@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.
- package/.gitea/workflows/default_tags.yaml +0 -21
- package/.smartconfig.json +69 -0
- package/changelog.md +13 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/devicemanager.classes.devicemanager.js +33 -7
- package/dist_ts/discovery/discovery.classes.mdns.js +46 -11
- package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +1 -1
- package/dist_ts/discovery/discovery.classes.networkscanner.js +1 -1
- package/dist_ts/discovery/discovery.classes.ssdp.d.ts +52 -21
- package/dist_ts/discovery/discovery.classes.ssdp.js +407 -117
- package/dist_ts/index.d.ts +1 -1
- package/dist_ts/interfaces/feature.interfaces.d.ts +1 -1
- package/dist_ts/interfaces/index.d.ts +1 -1
- package/dist_ts/plugins.d.ts +5 -15
- package/dist_ts/plugins.js +6 -19
- package/dist_ts/protocols/protocol.escl.js +2 -2
- package/license.md +21 -0
- package/package.json +16 -25
- package/pnpm-workspace.yaml +4 -0
- package/readme.md +61 -76
- package/test/{test.ts → test.node.ts} +20 -45
- package/test/test.ssdp.node.ts +978 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/devicemanager.classes.devicemanager.ts +44 -6
- package/ts/discovery/discovery.classes.mdns.ts +40 -11
- package/ts/discovery/discovery.classes.networkscanner.ts +1 -1
- package/ts/discovery/discovery.classes.ssdp.ts +493 -130
- package/ts/index.ts +1 -0
- package/ts/interfaces/feature.interfaces.ts +1 -1
- package/ts/interfaces/index.ts +1 -1
- package/ts/plugins.ts +5 -25
- package/ts/protocols/protocol.escl.ts +1 -1
- package/dist_ts/protocols/protocol.ipp.old.d.ts +0 -45
- package/dist_ts/protocols/protocol.ipp.old.js +0 -284
- package/npmextra.json +0 -24
package/ts/index.ts
CHANGED
|
@@ -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
|
|
171
|
+
createdAt?: Date;
|
|
172
172
|
completedAt?: Date;
|
|
173
173
|
pagesPrinted?: number;
|
|
174
174
|
pagesTotal?: number;
|
package/ts/interfaces/index.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
}
|