n8n-nodes-labelzoom 1.0.0 → 1.2.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.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # n8n-nodes-labelzoom
2
2
 
3
3
  An [n8n](https://n8n.io) community node for [LabelZoom](https://www.labelzoom.com) — convert
4
- barcode labels between ZPL, EPL, TSPL, DPL, PDF, images and XML/JSON, and print them to
4
+ barcode labels between ZPL, EPL, IPL, TSPL, DPL, SBPL, PDF, images and XML/JSON, and print them to
5
5
  cloud-connected thermal printers.
6
6
 
7
7
  The labels in a business rarely arrive in the format the printer wants. A WMS emits ZPL, a
@@ -13,7 +13,11 @@ into two steps in a workflow.
13
13
 
14
14
  ## Installation
15
15
 
16
- In n8n, go to **Settings → Community nodes → Install** and enter:
16
+ The node is [verified by n8n](https://n8n.io/integrations/labelzoom/), so it installs straight
17
+ from the canvas: open the nodes panel, search for **LabelZoom**, and pick it from **More from the
18
+ community**.
19
+
20
+ To install it by package name instead, go to **Settings → Community nodes → Install** and enter:
17
21
 
18
22
  ```
19
23
  n8n-nodes-labelzoom
@@ -52,19 +56,20 @@ you're ready to ship.
52
56
  | **Convert** | Convert a document between any supported source and target format |
53
57
  | **Convert Template** | Fill a Print Template with data and render it, without printing |
54
58
 
55
- Sources: `zpl` `epl` `tspl` `dpl` `xml` `json` `pdf` `png` `bmp` `gif` `jpeg` `jpg` `url`
56
- Targets: `zpl` `epl` `tspl` `dpl` `xml` `json` `pdf` `png` `bmp` `gif` `jpeg`
59
+ Sources: `zpl` `epl` `ipl` `tspl` `dpl` `sbpl` `xml` `json` `pdf` `png` `bmp` `gif` `jpeg` `jpg` `url`
60
+ Targets: `zpl` `epl` `ipl` `tspl` `dpl` `sbpl` `xml` `json` `pdf` `png` `bmp` `gif` `jpeg`
57
61
 
58
62
  `url` is a source only — post a link and LabelZoom fetches the document itself. `jpg` is an
59
63
  input spelling that normalizes to `jpeg`.
60
64
 
61
- The output is always a **binary field**, because five of the eleven targets are binary. A
65
+ The output is always a **binary field**, because five of the thirteen targets are binary. A
62
66
  decoded `text` field is added for `zpl`, `xml` and `json` as a convenience. It is deliberately
63
- *not* added for `epl`, `tspl` or `dpl`: those come back as `text/plain` but can inline raw
64
- bytes (EPL's `GW`, TSPL's `BITMAP`, DPL's leading `STX`), and decoding them to a string would
65
- corrupt any label carrying graphics.
67
+ *not* added for `epl`, `ipl`, `tspl`, `dpl` or `sbpl`: those come back as `text/plain` but can
68
+ inline raw bytes (EPL's `GW`, IPL's `STX`/`ETX` framing, TSPL's `BITMAP`, DPL's leading `STX`,
69
+ SBPL's `ESC`-prefixed commands), and decoding them to a string would corrupt any label carrying
70
+ graphics.
66
71
 
67
- Options cover the full parameter set — DPI, rotation, scaling, colour mode, darkness, label
72
+ Options cover the full parameter set — DPI, rotation, scaling, color mode, darkness, label
68
73
  size in inches, position, PDF conversion mode and page number, ZPL image compression and
69
74
  commands to ignore, and a **Variable Data** field that fills placeholders on the label (one
70
75
  output label per array entry). Anything not yet surfaced in the UI can go through **Custom
@@ -91,10 +96,31 @@ transform option from Convert works here too, even when no format change is need
91
96
  once the print agent reports back. Turn on **Wait for Completion** when the workflow needs to
92
97
  know the label came out of the printer.
93
98
 
99
+ **Copies.** Print and Print Template both take **Copies**: how many times the job is sent to the
100
+ printer, from 1 to 9999, for any document in any printer language. **A print quantity already in
101
+ the label or template multiplies** — a label carrying `^PQ3` sent with Copies set to 5 prints 15.
102
+ A document holding several labels prints collated (A, B, A, B), all as a single job, and the job in
103
+ the output reports the `copies` it was accepted with (`null` when Copies was left at 1). Leave
104
+ Copies at the default of 1 and nothing is sent: the document prints once, as sent, exactly as
105
+ before. Map it from the incoming item to print a per-order quantity:
106
+
107
+ ```
108
+ {{ $json.quantity }}
109
+ ```
110
+
111
+ A number that arrives as text, such as `"25"` from a CSV or spreadsheet, is accepted. Anything
112
+ that isn't a whole number from 1 to 9999 fails the item before a request is made. Copies above 1
113
+ needs an up-to-date LabelZoom Print Agent: if the agent serving the printer is out of date, the
114
+ job is rejected with a 422 asking you to update it, rather than printed a different number of
115
+ times. For a large run of a complex label, the printer language's own quantity command inside the
116
+ label (`^PQ` in ZPL, for example) prints faster than sending the whole job again and again.
117
+
94
118
  **Idempotency.** Print carries an `Idempotency-Key`; repeating a key returns the original job
95
119
  instead of printing again. It defaults to `{{ $execution.id }}-{{ $itemIndex }}`, which makes a
96
120
  retried *step* safe. Set it from an order number to make a whole workflow re-run safe too — a
97
- duplicate shipping label is a real cost.
121
+ duplicate shipping label is a real cost. A key identifies the whole request, Copies included:
122
+ repeating it with a different document, merge data or Copies is rejected with a 422 instead of
123
+ replaying the original job, so give a deliberate reprint a key of its own.
98
124
 
99
125
  ## Examples
100
126
 
@@ -111,6 +137,11 @@ Variable Data mapped from the rows) → Google Drive. Each row becomes one page.
111
137
  Printer → Print Template with the merge fields mapped from the incoming item. The template
112
138
  picker shows each template's merge fields, so you can see what data it wants.
113
139
 
140
+ **One label per unit.** An order-line trigger (or a spreadsheet of SKUs) → LabelZoom (Printer →
141
+ Print Template, merge fields mapped from the line, **Copies** set to `{{ $json.quantity }}`). A
142
+ line for 12 units sends its label to the printer 12 times as one job. Design the template to
143
+ print a single label: a quantity built into the template multiplies with Copies.
144
+
114
145
  ## Development
115
146
 
116
147
  ```sh
@@ -127,11 +158,11 @@ npm test
127
158
  n8n verification forbids runtime dependencies, so this node cannot call
128
159
  [`@labelzoom/sdk`](https://www.npmjs.com/package/@labelzoom/sdk) — it re-implements the
129
160
  LabelZoom wire contract by hand. To stop the two drifting apart, it runs the **same
130
- language-neutral conformance fixtures** the eight official SDKs run: 83 cases pinned from
161
+ language-neutral conformance fixtures** the eight official SDKs run: 87 cases pinned from
131
162
  `labelzoom-sdk` covering request shape, error mapping, retry policy and local validation.
132
163
 
133
164
  ```sh
134
- npm run sync-conformance # refresh test/conformance/ from the pinned SDK tag
165
+ npm run sync-conformance # refresh test/conformance/ from the pinned SDK ref
135
166
  node scripts/sync-conformance.mjs --check # verify it hasn't drifted (CI)
136
167
  ```
137
168
 
@@ -148,6 +179,7 @@ claim to be LabelZoom Studio, whose prefix the server special-cases — is asser
148
179
 
149
180
  ## Resources
150
181
 
182
+ - [LabelZoom on n8n.io](https://n8n.io/integrations/labelzoom/) — the verified integration listing
151
183
  - [n8n integration guide](https://docs.labelzoom.com/integrations/n8n/) — this node, end to end
152
184
  - [LabelZoom API docs](https://docs.labelzoom.com)
153
185
  - [Conversion parameters](https://docs.labelzoom.com/reference/conversion-parameters/)
@@ -37,6 +37,7 @@ exports.printDescription = [
37
37
  displayOptions: { show: showFor },
38
38
  },
39
39
  ...(0, descriptions_1.documentInputFields)(showFor),
40
+ (0, shared_1.copiesField)(showFor),
40
41
  (0, shared_1.idempotencyKeyField)(showFor),
41
42
  {
42
43
  displayName: 'Wait for Completion',
@@ -73,6 +74,7 @@ async function waitForJob(jobId, timeoutSeconds, itemIndex) {
73
74
  }
74
75
  async function print(itemIndex) {
75
76
  const printerId = utils_1.resourceId.call(this, 'printerId', itemIndex);
77
+ const copies = shared_1.readCopies.call(this, itemIndex);
76
78
  const sourceFormat = this.getNodeParameter('sourceFormat', itemIndex, '');
77
79
  const idempotencyKey = this.getNodeParameter('idempotencyKey', itemIndex, '');
78
80
  const waitForCompletion = this.getNodeParameter('waitForCompletion', itemIndex, false);
@@ -82,6 +84,8 @@ async function print(itemIndex) {
82
84
  const query = {};
83
85
  if (sourceFormat !== '')
84
86
  query.sourceFormat = sourceFormat;
87
+ if (copies !== 1)
88
+ query.copies = String(copies);
85
89
  const headers = {};
86
90
  if (idempotencyKey !== '')
87
91
  headers['Idempotency-Key'] = idempotencyKey;
@@ -1 +1 @@
1
- {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/print.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/print.ts"],"names":[],"mappings":"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"}
@@ -27,11 +27,13 @@ exports.printTemplateDescription = [
27
27
  description: 'Whether to reject the job when a required merge field is missing, instead of printing a label with a blank in it',
28
28
  displayOptions: { show: showFor },
29
29
  },
30
+ (0, shared_1.copiesField)(showFor),
30
31
  (0, shared_1.idempotencyKeyField)(showFor),
31
32
  ];
32
33
  async function printTemplate(itemIndex) {
33
34
  const printerId = utils_1.resourceId.call(this, 'printerId', itemIndex);
34
35
  const templateId = utils_1.resourceId.call(this, 'templateId', itemIndex);
36
+ const copies = shared_1.readCopies.call(this, itemIndex);
35
37
  const validate = this.getNodeParameter('validate', itemIndex, true);
36
38
  const idempotencyKey = this.getNodeParameter('idempotencyKey', itemIndex, '');
37
39
  const rawMergeData = this.getNodeParameter('mergeData', itemIndex, '{}');
@@ -53,10 +55,15 @@ async function printTemplate(itemIndex) {
53
55
  description: 'Send one item per label — this operation runs once per input item and each run produces one print job.',
54
56
  });
55
57
  }
58
+ const query = {};
59
+ if (validate)
60
+ query.validate = 'true';
61
+ if (copies !== 1)
62
+ query.copies = String(copies);
56
63
  const headers = {};
57
64
  if (idempotencyKey !== '')
58
65
  headers['Idempotency-Key'] = idempotencyKey;
59
- const job = await transport_1.labelZoomJsonRequest.call(this, 'POST', `/api/v3/printers/${encodeURIComponent(printerId)}/templates/${encodeURIComponent(templateId)}/print`, mergeData, validate ? { validate: 'true' } : undefined, headers);
66
+ const job = await transport_1.labelZoomJsonRequest.call(this, 'POST', `/api/v3/printers/${encodeURIComponent(printerId)}/templates/${encodeURIComponent(templateId)}/print`, mergeData, Object.keys(query).length > 0 ? query : undefined, headers);
60
67
  return {
61
68
  json: { ...job, printerId, templateId },
62
69
  pairedItem: { item: itemIndex },
@@ -1 +1 @@
1
- {"version":3,"file":"printTemplate.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/printTemplate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"printTemplate.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/printTemplate.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { INodeProperties } from 'n8n-workflow';
1
+ import type { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2
2
  type ShowFor = {
3
3
  resource: string[];
4
4
  operation: string[];
@@ -6,5 +6,8 @@ type ShowFor = {
6
6
  export declare function printerLocator(showFor: ShowFor): INodeProperties;
7
7
  export declare function templateLocator(showFor: ShowFor): INodeProperties;
8
8
  export declare function idempotencyKeyField(showFor: ShowFor): INodeProperties;
9
+ export declare const MAX_COPIES = 9999;
10
+ export declare function copiesField(showFor: ShowFor): INodeProperties;
11
+ export declare function readCopies(this: IExecuteFunctions, itemIndex: number): number;
9
12
  export declare const TERMINAL_JOB_STATUSES: readonly ["completed", "failed"];
10
13
  export {};
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TERMINAL_JOB_STATUSES = void 0;
3
+ exports.TERMINAL_JOB_STATUSES = exports.MAX_COPIES = void 0;
4
4
  exports.printerLocator = printerLocator;
5
5
  exports.templateLocator = templateLocator;
6
6
  exports.idempotencyKeyField = idempotencyKeyField;
7
+ exports.copiesField = copiesField;
8
+ exports.readCopies = readCopies;
9
+ const validation_1 = require("../../shared/validation");
7
10
  function printerLocator(showFor) {
8
11
  return {
9
12
  displayName: 'Printer',
@@ -60,9 +63,39 @@ function idempotencyKeyField(showFor) {
60
63
  name: 'idempotencyKey',
61
64
  type: 'string',
62
65
  default: '={{ $execution.id }}-{{ $itemIndex }}',
63
- description: 'Repeating a key returns the original job instead of printing again. Set it from a stable business value (an order number) to make a whole workflow re-run safe.',
66
+ description: 'Repeating a key with the same request returns the original job instead of printing again; reusing it for a different document, merge data or Copies is rejected. Set it from a stable business value (an order number) to make a whole workflow re-run safe.',
64
67
  displayOptions: { show: showFor },
65
68
  };
66
69
  }
70
+ exports.MAX_COPIES = 9999;
71
+ function copiesField(showFor) {
72
+ return {
73
+ displayName: 'Copies',
74
+ name: 'copies',
75
+ type: 'number',
76
+ typeOptions: { minValue: 1, maxValue: exports.MAX_COPIES, numberPrecision: 0 },
77
+ default: 1,
78
+ description: "How many times to send the job to the printer, from 1 to 9999. A quantity already set in the document or template multiplies: a label carrying ^PQ3 with Copies set to 5 prints 15. Leave it at 1 to print it once, as sent.",
79
+ displayOptions: { show: showFor },
80
+ };
81
+ }
82
+ function readCopies(itemIndex) {
83
+ const raw = this.getNodeParameter('copies', itemIndex, 1);
84
+ let copies = Number.NaN;
85
+ if (typeof raw === 'number') {
86
+ copies = raw;
87
+ }
88
+ else if (typeof raw === 'string' && /^\d+$/.test(raw.trim())) {
89
+ copies = Number(raw.trim());
90
+ }
91
+ if (!Number.isInteger(copies) || copies < 1 || copies > exports.MAX_COPIES) {
92
+ const received = typeof raw === 'number' ? String(raw) : JSON.stringify(raw);
93
+ throw new validation_1.LabelZoomValidationError(this.getNode(), 'copies', `Copies must be a whole number from 1 to ${exports.MAX_COPIES}, got ${received}`, {
94
+ itemIndex,
95
+ description: "Set Copies to how many times the job should be sent to the printer, or leave it at 1 to print it once, as sent.",
96
+ });
97
+ }
98
+ return copies;
99
+ }
67
100
  exports.TERMINAL_JOB_STATUSES = ['completed', 'failed'];
68
101
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/shared.ts"],"names":[],"mappings":";;;AAUA,wCAwBC;AAED,0CAwBC;AAWD,kDAUC;AAvED,SAAgB,cAAc,CAAC,OAAgB;IAC9C,OAAO;QACN,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,gDAAgD;QAC7D,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACjC,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE;aAClE;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,cAAc;aAC3B;SACD;KACD,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC/C,OAAO;QACN,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,kDAAkD;QAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACjC,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE;aACnE;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,cAAc;aAC3B;SACD;KACD,CAAC;AACH,CAAC;AAWD,SAAgB,mBAAmB,CAAC,OAAgB;IACnD,OAAO;QACN,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,uCAAuC;QAChD,WAAW,EACV,iKAAiK;QAClK,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACjC,CAAC;AACH,CAAC;AAGY,QAAA,qBAAqB,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAU,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../nodes/LabelZoom/resources/printer/shared.ts"],"names":[],"mappings":";;;AAYA,wCAwBC;AAED,0CAwBC;AAWD,kDAUC;AAcD,kCAWC;AAWD,gCAyBC;AA9ID,wDAAmE;AAUnE,SAAgB,cAAc,CAAC,OAAgB;IAC9C,OAAO;QACN,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,gDAAgD;QAC7D,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACjC,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE;aAClE;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,cAAc;aAC3B;SACD;KACD,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,OAAgB;IAC/C,OAAO;QACN,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QACpC,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,kDAAkD;QAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QACjC,KAAK,EAAE;YACN;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,IAAI,EAAE;aACnE;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,cAAc;aAC3B;SACD;KACD,CAAC;AACH,CAAC;AAWD,SAAgB,mBAAmB,CAAC,OAAgB;IACnD,OAAO;QACN,WAAW,EAAE,iBAAiB;QAC9B,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,uCAAuC;QAChD,WAAW,EACV,8PAA8P;QAC/P,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACjC,CAAC;AACH,CAAC;AAGY,QAAA,UAAU,GAAG,IAAI,CAAC;AAW/B,SAAgB,WAAW,CAAC,OAAgB;IAC3C,OAAO;QACN,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,kBAAU,EAAE,eAAe,EAAE,CAAC,EAAE;QACtE,OAAO,EAAE,CAAC;QACV,WAAW,EACV,8NAA8N;QAC/N,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;KACjC,CAAC;AACH,CAAC;AAWD,SAAgB,UAAU,CAA0B,SAAiB;IACpE,MAAM,GAAG,GAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAEnE,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,CAAC;IACd,CAAC;SAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,kBAAU,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,IAAI,qCAAwB,CACjC,IAAI,CAAC,OAAO,EAAE,EACd,QAAQ,EACR,2CAA2C,kBAAU,SAAS,QAAQ,EAAE,EACxE;YACC,SAAS;YACT,WAAW,EACV,iHAAiH;SAClH,CACD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAGY,QAAA,qBAAqB,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAU,CAAC"}
@@ -1,5 +1,5 @@
1
- export declare const SOURCE_FORMATS: readonly ["zpl", "epl", "tspl", "dpl", "xml", "json", "pdf", "png", "bmp", "gif", "jpeg", "jpg", "url"];
2
- export declare const TARGET_FORMATS: readonly ["zpl", "epl", "tspl", "dpl", "xml", "json", "pdf", "png", "bmp", "gif", "jpeg"];
1
+ export declare const SOURCE_FORMATS: readonly ["zpl", "epl", "ipl", "tspl", "dpl", "sbpl", "xml", "json", "pdf", "png", "bmp", "gif", "jpeg", "jpg", "url"];
2
+ export declare const TARGET_FORMATS: readonly ["zpl", "epl", "ipl", "tspl", "dpl", "sbpl", "xml", "json", "pdf", "png", "bmp", "gif", "jpeg"];
3
3
  export type SourceFormat = (typeof SOURCE_FORMATS)[number];
4
4
  export type TargetFormat = (typeof TARGET_FORMATS)[number];
5
5
  export declare function sourceMediaType(format: string): string;
@@ -10,8 +10,10 @@ exports.formatOptions = formatOptions;
10
10
  exports.SOURCE_FORMATS = [
11
11
  'zpl',
12
12
  'epl',
13
+ 'ipl',
13
14
  'tspl',
14
15
  'dpl',
16
+ 'sbpl',
15
17
  'xml',
16
18
  'json',
17
19
  'pdf',
@@ -25,8 +27,10 @@ exports.SOURCE_FORMATS = [
25
27
  exports.TARGET_FORMATS = [
26
28
  'zpl',
27
29
  'epl',
30
+ 'ipl',
28
31
  'tspl',
29
32
  'dpl',
33
+ 'sbpl',
30
34
  'xml',
31
35
  'json',
32
36
  'pdf',
@@ -38,8 +42,10 @@ exports.TARGET_FORMATS = [
38
42
  const SOURCE_MEDIA_TYPES = {
39
43
  zpl: 'text/plain',
40
44
  epl: 'text/plain',
45
+ ipl: 'text/plain',
41
46
  tspl: 'text/plain',
42
47
  dpl: 'text/plain',
48
+ sbpl: 'text/plain',
43
49
  xml: 'application/xml',
44
50
  json: 'application/json',
45
51
  pdf: 'application/pdf',
@@ -53,8 +59,10 @@ const SOURCE_MEDIA_TYPES = {
53
59
  const TARGET_MEDIA_TYPES = {
54
60
  zpl: 'text/plain',
55
61
  epl: 'text/plain',
62
+ ipl: 'text/plain',
56
63
  tspl: 'text/plain',
57
64
  dpl: 'text/plain',
65
+ sbpl: 'text/plain',
58
66
  xml: 'application/xml',
59
67
  json: 'application/json',
60
68
  pdf: 'application/pdf',
@@ -66,8 +74,10 @@ const TARGET_MEDIA_TYPES = {
66
74
  const TARGET_EXTENSIONS = {
67
75
  zpl: 'zpl',
68
76
  epl: 'epl',
77
+ ipl: 'ipl',
69
78
  tspl: 'txt',
70
79
  dpl: 'dpl',
80
+ sbpl: 'sbpl',
71
81
  xml: 'xml',
72
82
  json: 'json',
73
83
  pdf: 'pdf',
@@ -96,8 +106,10 @@ function sourceWireToken(format) {
96
106
  const FORMAT_LABELS = {
97
107
  zpl: 'ZPL (Zebra)',
98
108
  epl: 'EPL (Eltron)',
109
+ ipl: 'IPL (Honeywell)',
99
110
  tspl: 'TSPL (TSC)',
100
111
  dpl: 'DPL (Datamax)',
112
+ sbpl: 'SBPL (SATO)',
101
113
  xml: 'XML (LBXML)',
102
114
  json: 'JSON (LabelZoom)',
103
115
  pdf: 'PDF',
@@ -1 +1 @@
1
- {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../../nodes/LabelZoom/shared/formats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formats.js","sourceRoot":"","sources":["../../../../nodes/LabelZoom/shared/formats.ts"],"names":[],"mappings":";;;AA8GA,0CAEC;AAED,0CAEC;AAED,0CAEC;AAED,0CAEC;AAGD,0CAGC;AAoBD,sCAEC;AA/IY,QAAA,cAAc,GAAG;IAC7B,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;CACI,CAAC;AAEE,QAAA,cAAc,GAAG;IAC7B,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;CACG,CAAC;AAMX,MAAM,kBAAkB,GAAiC;IACxD,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;CACjB,CAAC;AAGF,MAAM,kBAAkB,GAAiC;IACxD,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,YAAY;IACjB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,IAAI,EAAE,YAAY;CAClB,CAAC;AAEF,MAAM,iBAAiB,GAAiC;IACvD,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;CACX,CAAC;AAYF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAEtE,SAAgB,eAAe,CAAC,MAAc;IAC7C,OAAO,kBAAkB,CAAC,MAAsB,CAAC,IAAI,0BAA0B,CAAC;AACjF,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC7C,OAAO,kBAAkB,CAAC,MAAsB,CAAC,IAAI,0BAA0B,CAAC;AACjF,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC7C,OAAO,iBAAiB,CAAC,MAAsB,CAAC,IAAI,KAAK,CAAC;AAC3D,CAAC;AAED,SAAgB,eAAe,CAAC,MAAc;IAC7C,OAAO,eAAe,CAAC,GAAG,CAAC,MAAsB,CAAC,CAAC;AACpD,CAAC;AAGD,SAAgB,eAAe,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACzC,CAAC;AAED,MAAM,aAAa,GAA2B;IAC7C,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,cAAc;IACnB,GAAG,EAAE,iBAAiB;IACtB,IAAI,EAAE,YAAY;IAClB,GAAG,EAAE,eAAe;IACpB,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,aAAa;IAClB,IAAI,EAAE,kBAAkB;IACxB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,sBAAsB;IAC3B,GAAG,EAAE,6BAA6B;CAClC,CAAC;AAEF,SAAgB,aAAa,CAAC,OAA0B;IACvD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/F,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-labelzoom",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "n8n community node for LabelZoom \u2014 convert barcode labels between ZPL, EPL, TSPL, DPL, PDF and images, and print them to cloud-connected thermal printers",
5
5
  "license": "MIT",
6
6
  "homepage": "https://www.labelzoom.com",
@@ -57,12 +57,12 @@
57
57
  ]
58
58
  },
59
59
  "devDependencies": {
60
- "@n8n/node-cli": "^0.47.0",
60
+ "@n8n/node-cli": "^0.50.2",
61
61
  "@types/node": "^22.15.0",
62
62
  "eslint": "9.39.4",
63
- "prettier": "3.9.6",
63
+ "prettier": "3.9.9",
64
64
  "typescript": "6.0.3",
65
- "vitest": "^4.1.11"
65
+ "vitest": "^5.0.0"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "n8n-workflow": "*"