@ecobridge.xyz/devicemanager 3.1.0 → 3.1.1

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 (35) hide show
  1. package/.gitea/workflows/default_tags.yaml +0 -21
  2. package/.smartconfig.json +69 -0
  3. package/changelog.md +13 -1
  4. package/dist_ts/00_commitinfo_data.js +1 -1
  5. package/dist_ts/devicemanager.classes.devicemanager.js +33 -7
  6. package/dist_ts/discovery/discovery.classes.mdns.js +46 -11
  7. package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +1 -1
  8. package/dist_ts/discovery/discovery.classes.networkscanner.js +1 -1
  9. package/dist_ts/discovery/discovery.classes.ssdp.d.ts +52 -21
  10. package/dist_ts/discovery/discovery.classes.ssdp.js +407 -117
  11. package/dist_ts/index.d.ts +1 -1
  12. package/dist_ts/interfaces/feature.interfaces.d.ts +1 -1
  13. package/dist_ts/interfaces/index.d.ts +1 -1
  14. package/dist_ts/plugins.d.ts +5 -15
  15. package/dist_ts/plugins.js +6 -19
  16. package/dist_ts/protocols/protocol.escl.js +2 -2
  17. package/license.md +21 -0
  18. package/package.json +16 -25
  19. package/pnpm-workspace.yaml +4 -0
  20. package/readme.md +61 -76
  21. package/test/{test.ts → test.node.ts} +20 -45
  22. package/test/test.ssdp.node.ts +978 -0
  23. package/ts/00_commitinfo_data.ts +1 -1
  24. package/ts/devicemanager.classes.devicemanager.ts +44 -6
  25. package/ts/discovery/discovery.classes.mdns.ts +40 -11
  26. package/ts/discovery/discovery.classes.networkscanner.ts +1 -1
  27. package/ts/discovery/discovery.classes.ssdp.ts +493 -130
  28. package/ts/index.ts +1 -0
  29. package/ts/interfaces/feature.interfaces.ts +1 -1
  30. package/ts/interfaces/index.ts +1 -1
  31. package/ts/plugins.ts +5 -25
  32. package/ts/protocols/protocol.escl.ts +1 -1
  33. package/dist_ts/protocols/protocol.ipp.old.d.ts +0 -45
  34. package/dist_ts/protocols/protocol.ipp.old.js +0 -284
  35. package/npmextra.json +0 -24
package/ts/index.ts CHANGED
@@ -160,6 +160,7 @@ export * from './interfaces/index.js';
160
160
  export type {
161
161
  ISsdpDevice,
162
162
  ISsdpDeviceDescription,
163
+ ISsdpDiscoveryDependencies,
163
164
  ISsdpService,
164
165
  ISsdpIcon,
165
166
  } from './discovery/discovery.classes.ssdp.js';
@@ -168,7 +168,7 @@ export interface IPrintJob {
168
168
  name: string;
169
169
  state: 'pending' | 'processing' | 'completed' | 'canceled' | 'aborted';
170
170
  stateReason?: string;
171
- createdAt: Date;
171
+ createdAt?: Date;
172
172
  completedAt?: Date;
173
173
  pagesPrinted?: number;
174
174
  pagesTotal?: number;
@@ -154,7 +154,7 @@ export interface IPrintJob {
154
154
  name: string;
155
155
  state: 'pending' | 'processing' | 'completed' | 'canceled' | 'aborted';
156
156
  stateReason?: string;
157
- createdAt: Date;
157
+ createdAt?: Date;
158
158
  completedAt?: Date;
159
159
  pagesPrinted?: number;
160
160
  pagesTotal?: number;
package/ts/plugins.ts CHANGED
@@ -1,41 +1,21 @@
1
1
  // native scope
2
2
  import * as path from 'path';
3
3
  import * as net from 'net';
4
- import * as dgram from 'dgram';
4
+ import * as dgram from 'node:dgram';
5
+ import * as os from 'node:os';
5
6
  import * as events from 'events';
6
7
 
7
- export { path, net, dgram, events };
8
+ export { path, net, dgram, os, events };
8
9
 
9
10
  // @push.rocks scope
10
11
  import * as smartpath from '@push.rocks/smartpath';
11
- import * as smartpromise from '@push.rocks/smartpromise';
12
12
  import * as smartdelay from '@push.rocks/smartdelay';
13
- import * as smartnetwork from '@push.rocks/smartnetwork';
14
13
 
15
- // Re-export SmartRequest for HTTP
16
- import { SmartRequest } from '@push.rocks/smartrequest';
17
- export { SmartRequest };
18
-
19
- export {
20
- smartpath,
21
- smartpromise,
22
- smartdelay,
23
- smartnetwork,
24
- };
14
+ export { smartpath, smartdelay };
25
15
 
26
16
  // third party
27
17
  import * as bonjourService from 'bonjour-service';
28
- import ipp from 'ipp';
29
- import nodeSsdpModule from 'node-ssdp';
30
18
  import * as netSnmp from 'net-snmp';
31
- import * as sonos from 'sonos';
32
- import * as castv2Client from 'castv2-client';
33
19
  import WebSocket from 'ws';
34
20
 
35
- // node-ssdp exports Client/Server under default in ESM
36
- const nodeSsdp = {
37
- Client: nodeSsdpModule.Client,
38
- Server: nodeSsdpModule.Server,
39
- };
40
-
41
- export { bonjourService, ipp, nodeSsdp, netSnmp, sonos, castv2Client, WebSocket };
21
+ export { bonjourService, netSnmp, WebSocket };
@@ -118,7 +118,7 @@ export class EsclProtocol {
118
118
  public async submitScanJob(options: IScanOptions): Promise<string> {
119
119
  const scanSettings = this.buildScanSettings(options);
120
120
 
121
- // Use fetch for POST with body since SmartRequest API may not support raw body
121
+ // Use fetch for the raw XML request body.
122
122
  const response = await fetch(`${this.baseUrl}/ScanJobs`, {
123
123
  method: 'POST',
124
124
  headers: {
@@ -1,45 +0,0 @@
1
- import type { IPrinterCapabilities, IPrintOptions, IPrintJob } from '../interfaces/index.js';
2
- /**
3
- * IPP protocol wrapper using the ipp npm package
4
- */
5
- export declare class IppProtocol {
6
- private printerUrl;
7
- private printer;
8
- constructor(address: string, port: number, path?: string);
9
- /**
10
- * Get printer attributes/capabilities
11
- */
12
- getAttributes(): Promise<IPrinterCapabilities>;
13
- /**
14
- * Print a document
15
- */
16
- print(data: Buffer, options?: IPrintOptions): Promise<IPrintJob>;
17
- /**
18
- * Get all jobs
19
- */
20
- getJobs(): Promise<IPrintJob[]>;
21
- /**
22
- * Get specific job info
23
- */
24
- getJobInfo(jobId: number): Promise<IPrintJob>;
25
- /**
26
- * Cancel a job
27
- */
28
- cancelJob(jobId: number): Promise<void>;
29
- /**
30
- * Check if printer is available
31
- */
32
- checkAvailability(): Promise<boolean>;
33
- /**
34
- * Build IPP print message from options
35
- */
36
- private buildPrintMessage;
37
- /**
38
- * Parse printer capabilities from attributes
39
- */
40
- private parseCapabilities;
41
- /**
42
- * Parse job info from attributes
43
- */
44
- private parseJobInfo;
45
- }
@@ -1,284 +0,0 @@
1
- import * as plugins from '../plugins.js';
2
- /**
3
- * IPP protocol wrapper using the ipp npm package
4
- */
5
- export class IppProtocol {
6
- printerUrl;
7
- printer;
8
- constructor(address, port, path = '/ipp/print') {
9
- this.printerUrl = `ipp://${address}:${port}${path}`;
10
- this.printer = plugins.ipp.Printer(this.printerUrl);
11
- }
12
- /**
13
- * Get printer attributes/capabilities
14
- */
15
- async getAttributes() {
16
- return new Promise((resolve, reject) => {
17
- this.printer.execute('Get-Printer-Attributes', null, (err, res) => {
18
- if (err) {
19
- reject(err);
20
- return;
21
- }
22
- try {
23
- const attrs = res['printer-attributes-tag'] || {};
24
- resolve(this.parseCapabilities(attrs));
25
- }
26
- catch (parseErr) {
27
- reject(parseErr);
28
- }
29
- });
30
- });
31
- }
32
- /**
33
- * Print a document
34
- */
35
- async print(data, options) {
36
- const msg = this.buildPrintMessage(options);
37
- return new Promise((resolve, reject) => {
38
- this.printer.execute('Print-Job', { ...msg, data }, (err, res) => {
39
- if (err) {
40
- reject(err);
41
- return;
42
- }
43
- try {
44
- const jobAttrs = res['job-attributes-tag'] || {};
45
- resolve(this.parseJobInfo(jobAttrs));
46
- }
47
- catch (parseErr) {
48
- reject(parseErr);
49
- }
50
- });
51
- });
52
- }
53
- /**
54
- * Get all jobs
55
- */
56
- async getJobs() {
57
- return new Promise((resolve, reject) => {
58
- this.printer.execute('Get-Jobs', {
59
- 'operation-attributes-tag': {
60
- 'requesting-user-name': 'devicemanager',
61
- 'which-jobs': 'not-completed',
62
- },
63
- }, (err, res) => {
64
- if (err) {
65
- reject(err);
66
- return;
67
- }
68
- try {
69
- const jobs = [];
70
- const jobTags = res['job-attributes-tag'];
71
- if (Array.isArray(jobTags)) {
72
- for (const jobAttrs of jobTags) {
73
- jobs.push(this.parseJobInfo(jobAttrs));
74
- }
75
- }
76
- else if (jobTags && typeof jobTags === 'object') {
77
- jobs.push(this.parseJobInfo(jobTags));
78
- }
79
- resolve(jobs);
80
- }
81
- catch (parseErr) {
82
- reject(parseErr);
83
- }
84
- });
85
- });
86
- }
87
- /**
88
- * Get specific job info
89
- */
90
- async getJobInfo(jobId) {
91
- return new Promise((resolve, reject) => {
92
- this.printer.execute('Get-Job-Attributes', {
93
- 'operation-attributes-tag': {
94
- 'job-id': jobId,
95
- },
96
- }, (err, res) => {
97
- if (err) {
98
- reject(err);
99
- return;
100
- }
101
- try {
102
- const jobAttrs = res['job-attributes-tag'] || {};
103
- resolve(this.parseJobInfo(jobAttrs));
104
- }
105
- catch (parseErr) {
106
- reject(parseErr);
107
- }
108
- });
109
- });
110
- }
111
- /**
112
- * Cancel a job
113
- */
114
- async cancelJob(jobId) {
115
- return new Promise((resolve, reject) => {
116
- this.printer.execute('Cancel-Job', {
117
- 'operation-attributes-tag': {
118
- 'job-id': jobId,
119
- },
120
- }, (err, _res) => {
121
- if (err) {
122
- reject(err);
123
- return;
124
- }
125
- resolve();
126
- });
127
- });
128
- }
129
- /**
130
- * Check if printer is available
131
- */
132
- async checkAvailability() {
133
- try {
134
- await this.getAttributes();
135
- return true;
136
- }
137
- catch {
138
- return false;
139
- }
140
- }
141
- /**
142
- * Build IPP print message from options
143
- */
144
- buildPrintMessage(options) {
145
- const operationAttrs = {
146
- 'requesting-user-name': 'devicemanager',
147
- 'job-name': options?.jobName ?? 'Print Job',
148
- 'document-format': 'application/octet-stream',
149
- };
150
- const jobAttrs = {};
151
- if (options?.copies && options.copies > 1) {
152
- jobAttrs['copies'] = options.copies;
153
- }
154
- if (options?.mediaSize) {
155
- jobAttrs['media'] = options.mediaSize;
156
- }
157
- if (options?.mediaType) {
158
- jobAttrs['media-type'] = options.mediaType;
159
- }
160
- if (options?.sides) {
161
- jobAttrs['sides'] = options.sides;
162
- }
163
- if (options?.quality) {
164
- const qualityMap = {
165
- draft: 3,
166
- normal: 4,
167
- high: 5,
168
- };
169
- jobAttrs['print-quality'] = qualityMap[options.quality] ?? 4;
170
- }
171
- if (options?.colorMode) {
172
- jobAttrs['print-color-mode'] = options.colorMode;
173
- }
174
- const msg = {
175
- 'operation-attributes-tag': operationAttrs,
176
- };
177
- if (Object.keys(jobAttrs).length > 0) {
178
- msg['job-attributes-tag'] = jobAttrs;
179
- }
180
- return msg;
181
- }
182
- /**
183
- * Parse printer capabilities from attributes
184
- */
185
- parseCapabilities(attrs) {
186
- const getArray = (key) => {
187
- const value = attrs[key];
188
- if (Array.isArray(value))
189
- return value.map(String);
190
- if (value !== undefined)
191
- return [String(value)];
192
- return [];
193
- };
194
- const getNumber = (key, defaultVal) => {
195
- const value = attrs[key];
196
- if (typeof value === 'number')
197
- return value;
198
- if (typeof value === 'string')
199
- return parseInt(value) || defaultVal;
200
- return defaultVal;
201
- };
202
- const getBool = (key, defaultVal) => {
203
- const value = attrs[key];
204
- if (typeof value === 'boolean')
205
- return value;
206
- if (value === 'true' || value === 1)
207
- return true;
208
- if (value === 'false' || value === 0)
209
- return false;
210
- return defaultVal;
211
- };
212
- // Parse resolutions
213
- const resolutions = [];
214
- const resSupported = attrs['printer-resolution-supported'];
215
- if (Array.isArray(resSupported)) {
216
- for (const res of resSupported) {
217
- if (typeof res === 'object' && res !== null && 'x' in res) {
218
- resolutions.push(res.x);
219
- }
220
- else if (typeof res === 'number') {
221
- resolutions.push(res);
222
- }
223
- }
224
- }
225
- if (resolutions.length === 0) {
226
- resolutions.push(300, 600);
227
- }
228
- return {
229
- colorSupported: getBool('color-supported', false),
230
- duplexSupported: getArray('sides-supported').some((s) => s.includes('two-sided')),
231
- mediaSizes: getArray('media-supported'),
232
- mediaTypes: getArray('media-type-supported'),
233
- resolutions: [...new Set(resolutions)],
234
- maxCopies: getNumber('copies-supported', 99),
235
- sidesSupported: getArray('sides-supported'),
236
- qualitySupported: getArray('print-quality-supported').map(String),
237
- };
238
- }
239
- /**
240
- * Parse job info from attributes
241
- */
242
- parseJobInfo(attrs) {
243
- const getString = (key, defaultVal) => {
244
- const value = attrs[key];
245
- if (typeof value === 'string')
246
- return value;
247
- if (value !== undefined)
248
- return String(value);
249
- return defaultVal;
250
- };
251
- const getNumber = (key, defaultVal) => {
252
- const value = attrs[key];
253
- if (typeof value === 'number')
254
- return value;
255
- if (typeof value === 'string')
256
- return parseInt(value) || defaultVal;
257
- return defaultVal;
258
- };
259
- // Map IPP job state to our state
260
- const ippState = getNumber('job-state', 3);
261
- const stateMap = {
262
- 3: 'pending', // pending
263
- 4: 'pending', // pending-held
264
- 5: 'processing', // processing
265
- 6: 'processing', // processing-stopped
266
- 7: 'canceled', // canceled
267
- 8: 'aborted', // aborted
268
- 9: 'completed', // completed
269
- };
270
- const createdTime = attrs['time-at-creation'];
271
- const completedTime = attrs['time-at-completed'];
272
- return {
273
- id: getNumber('job-id', 0),
274
- name: getString('job-name', 'Unknown Job'),
275
- state: stateMap[ippState] ?? 'pending',
276
- stateReason: getString('job-state-reasons', undefined),
277
- createdAt: createdTime ? new Date(createdTime * 1000) : new Date(),
278
- completedAt: completedTime ? new Date(completedTime * 1000) : undefined,
279
- pagesPrinted: getNumber('job-media-sheets-completed', undefined),
280
- pagesTotal: getNumber('job-media-sheets', undefined),
281
- };
282
- }
283
- }
284
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuaXBwLm9sZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Byb3RvY29scy9wcm90b2NvbC5pcHAub2xkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBT3pDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFDZCxVQUFVLENBQVM7SUFDbkIsT0FBTyxDQUF5QztJQUV4RCxZQUFZLE9BQWUsRUFBRSxJQUFZLEVBQUUsT0FBZSxZQUFZO1FBQ3BFLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxPQUFPLElBQUksSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxhQUFhO1FBQ3hCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ2xCLHdCQUF3QixFQUN4QixJQUFJLEVBQ0osQ0FBQyxHQUFpQixFQUFFLEdBQTRCLEVBQUUsRUFBRTtnQkFDbEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDUixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ1osT0FBTztnQkFDVCxDQUFDO2dCQUVELElBQUksQ0FBQztvQkFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsd0JBQXdCLENBQTRCLElBQUksRUFBRSxDQUFDO29CQUM3RSxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNu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
package/npmextra.json DELETED
@@ -1,24 +0,0 @@
1
- {
2
- "@git.zone/cli": {
3
- "projectType": "npm",
4
- "module": {
5
- "githost": "code.foss.global",
6
- "gitscope": "ecobridge.xyz",
7
- "gitrepo": "devicemanager",
8
- "description": "a device manager for talking to devices on network and over usb",
9
- "npmPackagename": "@ecobridge.xyz/devicemanager",
10
- "license": "MIT",
11
- "projectDomain": "ecobridge.xyz"
12
- },
13
- "release": {
14
- "accessLevel": "public",
15
- "registries": [
16
- "https://verdaccio.lossless.digital",
17
- "https://registry.npmjs.org"
18
- ]
19
- }
20
- },
21
- "@ship.zone/szci": {
22
- "npmGlobalTools": []
23
- }
24
- }