@camera.ui/common 0.0.5 → 0.0.7

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 (47) hide show
  1. package/dist/index.d.ts +12 -0
  2. package/dist/index.js +13 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/logger/index.d.ts +26 -0
  5. package/dist/logger/index.js +92 -0
  6. package/dist/logger/index.js.map +1 -0
  7. package/dist/messaging/index.d.ts +48 -0
  8. package/dist/messaging/index.js +141 -0
  9. package/dist/messaging/index.js.map +1 -0
  10. package/dist/nats/index.d.ts +30 -0
  11. package/dist/nats/index.js +85 -0
  12. package/dist/nats/index.js.map +1 -0
  13. package/dist/network/index.d.ts +12 -0
  14. package/dist/network/index.js +92 -0
  15. package/dist/network/index.js.map +1 -0
  16. package/dist/npm/index.d.ts +4 -0
  17. package/dist/npm/index.js +128 -0
  18. package/dist/npm/index.js.map +1 -0
  19. package/dist/packer/index.d.ts +2 -0
  20. package/dist/packer/index.js +17 -0
  21. package/dist/packer/index.js.map +1 -0
  22. package/dist/python/index.d.ts +48 -0
  23. package/dist/python/index.js +478 -0
  24. package/dist/python/index.js.map +1 -0
  25. package/dist/utils/env.d.ts +5 -0
  26. package/dist/utils/env.js +6 -0
  27. package/dist/utils/env.js.map +1 -0
  28. package/dist/utils/ffmpeg.d.ts +14 -0
  29. package/dist/utils/ffmpeg.js +61 -0
  30. package/dist/utils/ffmpeg.js.map +1 -0
  31. package/dist/utils/index.d.ts +5 -0
  32. package/dist/utils/index.js +6 -0
  33. package/dist/utils/index.js.map +1 -0
  34. package/dist/utils/reader.d.ts +5 -0
  35. package/dist/utils/reader.js +41 -0
  36. package/dist/utils/reader.js.map +1 -0
  37. package/dist/utils/subscribed.d.ts +9 -0
  38. package/dist/utils/subscribed.js +17 -0
  39. package/dist/utils/subscribed.js.map +1 -0
  40. package/dist/utils/utils.js.map +1 -0
  41. package/package.json +60 -10
  42. package/dist/packages/common/src/index.d.ts +0 -1
  43. package/dist/packages/common/src/index.js +0 -2
  44. package/dist/packages/common/src/index.js.map +0 -1
  45. package/dist/server/src/utils/utils.js.map +0 -1
  46. /package/dist/{server/src/utils → utils}/utils.d.ts +0 -0
  47. /package/dist/{server/src/utils → utils}/utils.js +0 -0
@@ -0,0 +1,12 @@
1
+ export * from './logger/index.js';
2
+ export * from './messaging/index.js';
3
+ export * from './nats/index.js';
4
+ export * from './network/index.js';
5
+ export * from './npm/index.js';
6
+ export * from './packer/index.js';
7
+ export * from './python/index.js';
8
+ export * from './utils/env.js';
9
+ export * from './utils/ffmpeg.js';
10
+ export * from './utils/reader.js';
11
+ export * from './utils/subscribed.js';
12
+ export * from './utils/utils.js';
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export * from './logger/index.js';
2
+ export * from './messaging/index.js';
3
+ export * from './nats/index.js';
4
+ export * from './network/index.js';
5
+ export * from './npm/index.js';
6
+ export * from './packer/index.js';
7
+ export * from './python/index.js';
8
+ export * from './utils/env.js';
9
+ export * from './utils/ffmpeg.js';
10
+ export * from './utils/reader.js';
11
+ export * from './utils/subscribed.js';
12
+ export * from './utils/utils.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { PluginLogger } from '@camera.ui/types';
2
+ export interface LoggerOptions {
3
+ prefix?: string;
4
+ suffix?: string;
5
+ disableTimestamps?: boolean;
6
+ debugEnabled?: boolean;
7
+ traceEnabled?: boolean;
8
+ }
9
+ export declare class Logger implements PluginLogger {
10
+ private prefix;
11
+ private suffix?;
12
+ disableTimestamps: boolean;
13
+ debugEnabled: boolean;
14
+ traceEnabled: boolean;
15
+ private get loggerPrefix();
16
+ constructor(options?: LoggerOptions);
17
+ log(...args: any[]): void;
18
+ error(...args: any[]): void;
19
+ warn(...args: any[]): void;
20
+ attention(...args: any[]): void;
21
+ debug(...args: any[]): void;
22
+ trace(...args: any[]): void;
23
+ formatMessage(level: 'log' | 'warn' | 'error' | 'debug' | 'trace' | 'attention', ...args: any[]): string[];
24
+ private formattedArgs;
25
+ private formatDateTime;
26
+ }
@@ -0,0 +1,92 @@
1
+ import { bgDarkGray, bgMagenta, bgRed, bgYellow, blue, cyan, darkGray, magenta, red, white, yellow } from 'ansicolor';
2
+ export class Logger {
3
+ prefix;
4
+ suffix;
5
+ disableTimestamps = false;
6
+ debugEnabled = false;
7
+ traceEnabled = false;
8
+ get loggerPrefix() {
9
+ const timestamp = this.disableTimestamps ? '' : white(`[${this.formatDateTime()}] `);
10
+ let prefix = blue(`[${this.prefix}]`);
11
+ if (this.suffix) {
12
+ prefix += cyan(` [${this.suffix}]`);
13
+ }
14
+ return timestamp + prefix;
15
+ }
16
+ constructor(options) {
17
+ this.prefix = options?.prefix || 'camera.ui';
18
+ this.suffix = options?.suffix;
19
+ this.disableTimestamps = options?.disableTimestamps || false;
20
+ this.debugEnabled = options?.debugEnabled || false;
21
+ this.traceEnabled = options?.traceEnabled || false;
22
+ }
23
+ log(...args) {
24
+ console.log(...this.formatMessage('log', ...args));
25
+ }
26
+ error(...args) {
27
+ console.log(...this.formatMessage('error', ...args));
28
+ }
29
+ warn(...args) {
30
+ console.log(...this.formatMessage('warn', ...args));
31
+ }
32
+ attention(...args) {
33
+ console.log(...this.formatMessage('attention', ...args));
34
+ }
35
+ debug(...args) {
36
+ if (this.debugEnabled) {
37
+ console.log(...this.formatMessage('debug', ...args));
38
+ }
39
+ }
40
+ trace(...args) {
41
+ if (this.traceEnabled) {
42
+ console.log(...this.formatMessage('trace', ...args));
43
+ }
44
+ }
45
+ formatMessage(level, ...args) {
46
+ switch (level) {
47
+ case 'debug':
48
+ return [this.loggerPrefix, ...this.formattedArgs(...args).map((x) => darkGray(x))];
49
+ case 'warn':
50
+ return [this.loggerPrefix, bgYellow(' WARN '), ...this.formattedArgs(...args).map((x) => yellow(x))];
51
+ case 'error':
52
+ return [this.loggerPrefix, bgRed(' ERROR '), ...this.formattedArgs(...args).map((x) => red(x))];
53
+ case 'trace':
54
+ return [this.loggerPrefix, bgDarkGray(' TRACE '), ...this.formattedArgs(...args).map((x) => darkGray(x))];
55
+ case 'attention':
56
+ return [this.loggerPrefix, bgMagenta(' ATTENTION '), ...this.formattedArgs(...args).map((x) => magenta(x))];
57
+ default:
58
+ return [this.loggerPrefix, ...this.formattedArgs(...args)];
59
+ }
60
+ }
61
+ formattedArgs(...args) {
62
+ return args.map((arg) => {
63
+ if (arg instanceof Error) {
64
+ let message = arg.stack || arg.message;
65
+ if ('cause' in arg && arg.cause) {
66
+ message += `\n[cause]: ${typeof arg.cause === 'object' ? JSON.stringify(arg.cause, null, 2) : arg.cause}`;
67
+ }
68
+ return message;
69
+ }
70
+ else if (arg instanceof Promise) {
71
+ return arg;
72
+ }
73
+ else if (typeof arg === 'object') {
74
+ return JSON.stringify(arg, null, 2);
75
+ }
76
+ else {
77
+ return arg;
78
+ }
79
+ });
80
+ }
81
+ formatDateTime() {
82
+ const date = new Date();
83
+ const day = date.getDate().toString().padStart(2, '0');
84
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
85
+ const year = date.getFullYear();
86
+ const hours = date.getHours().toString().padStart(2, '0');
87
+ const minutes = date.getMinutes().toString().padStart(2, '0');
88
+ const seconds = date.getSeconds().toString().padStart(2, '0');
89
+ return `${day}.${month}.${year}, ${hours}:${minutes}:${seconds}`;
90
+ }
91
+ }
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { CameraDelegates, PluginLogger } from '@camera.ui/types';
2
+ import type { ProxyConnection, ProxySubscription } from '../nats/index.js';
3
+ export declare const NATS_SERVER_SUBJECT = "camera.ui-server";
4
+ export interface DeserializedError {
5
+ name: string;
6
+ message: string;
7
+ stack: string;
8
+ }
9
+ export declare class RemoteError extends Error {
10
+ constructor(error: DeserializedError, cause: Omit<ProxyMessageStructure, 'error'>);
11
+ }
12
+ export interface QueueItem {
13
+ message: ProxyMessageStructure;
14
+ resolve: (response: any) => void;
15
+ reject: (error: RemoteError) => void;
16
+ }
17
+ export interface ProxyMessageStructure {
18
+ requestId: string;
19
+ cameraId?: string;
20
+ targetId: string;
21
+ targetName?: string;
22
+ pluginId: string;
23
+ type: 'request' | 'reply';
24
+ proxy: 'device' | 'camera' | 'plugin' | 'core';
25
+ client: 'cameraFn' | 'pluginFn' | 'deviceFn' | 'storageFn' | 'coreFn' | keyof CameraDelegates;
26
+ fn: string;
27
+ args: any[];
28
+ timeout: number;
29
+ timestamp: number;
30
+ response?: any;
31
+ error?: DeserializedError;
32
+ }
33
+ export declare class MessageQueue {
34
+ private logger;
35
+ private type;
36
+ private publisher;
37
+ private subscriber;
38
+ private requestHandler;
39
+ private aborted;
40
+ private isProcessing;
41
+ private queue;
42
+ private pendingResponses;
43
+ constructor(type: 'server' | 'client', publisher: ProxyConnection, subscriber: ProxySubscription, logger: PluginLogger, requestHandler: (message: ProxyMessageStructure) => void);
44
+ abortQueue(): void;
45
+ enqueue(message: ProxyMessageStructure): Promise<any>;
46
+ private processQueue;
47
+ private onMessage;
48
+ }
@@ -0,0 +1,141 @@
1
+ import { unpack } from '../packer/index.js';
2
+ export const NATS_SERVER_SUBJECT = 'camera.ui-server';
3
+ export class RemoteError extends Error {
4
+ constructor(error, cause) {
5
+ super(error.message);
6
+ this.name = error.name;
7
+ this.cause = cause;
8
+ if (error.stack && error.stack !== '') {
9
+ this.stack = error.stack;
10
+ }
11
+ }
12
+ }
13
+ export class MessageQueue {
14
+ logger;
15
+ type;
16
+ publisher;
17
+ subscriber;
18
+ requestHandler;
19
+ aborted = false;
20
+ isProcessing = false;
21
+ queue = [];
22
+ pendingResponses = new Map();
23
+ constructor(type, publisher, subscriber, logger, requestHandler) {
24
+ this.type = type;
25
+ this.logger = logger;
26
+ this.publisher = publisher;
27
+ this.subscriber = subscriber;
28
+ this.requestHandler = requestHandler;
29
+ this.subscriber.on('message', this.onMessage.bind(this));
30
+ }
31
+ abortQueue() {
32
+ this.aborted = true;
33
+ this.isProcessing = false;
34
+ while (this.queue.length > 0) {
35
+ const item = this.queue.shift();
36
+ const remoteError = new RemoteError({
37
+ name: 'AbortError',
38
+ message: 'Message processing aborted',
39
+ stack: '',
40
+ }, item.message);
41
+ item.reject(remoteError);
42
+ }
43
+ for (const [requestId, { reject, message }] of this.pendingResponses) {
44
+ const remoteError = new RemoteError({
45
+ name: 'AbortError',
46
+ message: 'Request aborted due to queue abort',
47
+ stack: '',
48
+ }, message);
49
+ reject(remoteError);
50
+ this.pendingResponses.delete(requestId);
51
+ }
52
+ }
53
+ async enqueue(message) {
54
+ if (message.type === 'request' && message.timeout > 0) {
55
+ // console.log(`${this.type.toUpperCase()} => Enqueueing message:`, message);
56
+ const promise = new Promise((_resolve, _reject) => {
57
+ const queueItem = {
58
+ message,
59
+ resolve: _resolve,
60
+ reject: _reject,
61
+ };
62
+ this.queue.push(queueItem);
63
+ });
64
+ if (!this.isProcessing) {
65
+ this.processQueue();
66
+ }
67
+ return promise;
68
+ }
69
+ else {
70
+ const targetId = this.type === 'server' ? message.targetId : NATS_SERVER_SUBJECT;
71
+ this.publisher.publish(targetId, message);
72
+ }
73
+ }
74
+ processQueue() {
75
+ if (this.isProcessing || this.queue.length === 0 || this.aborted) {
76
+ return;
77
+ }
78
+ this.isProcessing = true;
79
+ while (this.queue.length && !this.aborted) {
80
+ const currentItem = this.queue.shift();
81
+ // console.log(`${this.type.toUpperCase()} => Sending request to ${this.type === 'server' ? 'CLIENT' : 'SERVER'}:`, currentItem.message);
82
+ const cleanup = () => {
83
+ clearTimeout(timeout);
84
+ this.pendingResponses.delete(currentItem.message.requestId);
85
+ };
86
+ const timeout = setTimeout(() => {
87
+ const remoteError = new RemoteError({
88
+ name: 'TimeoutError',
89
+ message: `Request timed out after ${currentItem.message.timeout}ms`,
90
+ stack: '',
91
+ }, currentItem.message);
92
+ currentItem.reject(remoteError);
93
+ cleanup();
94
+ }, currentItem.message.timeout);
95
+ this.pendingResponses.set(currentItem.message.requestId, {
96
+ message: currentItem.message,
97
+ resolve: (response) => {
98
+ currentItem.resolve(response);
99
+ cleanup();
100
+ },
101
+ reject: (error) => {
102
+ currentItem.reject(error);
103
+ cleanup();
104
+ },
105
+ });
106
+ const targetId = this.type === 'server' ? currentItem.message.targetId : NATS_SERVER_SUBJECT;
107
+ this.publisher.publish(targetId, currentItem.message);
108
+ }
109
+ this.isProcessing = false;
110
+ }
111
+ async onMessage(msg) {
112
+ if (this.aborted) {
113
+ return;
114
+ }
115
+ const message = unpack(msg.data);
116
+ if (message.type === 'reply') {
117
+ // console.log(`${this.type.toUpperCase()} => Received reply from ${this.type === 'server' ? 'CLIENT' : 'SERVER'}:`, message);
118
+ const currentItem = this.pendingResponses.get(message.requestId);
119
+ if (!currentItem) {
120
+ // this.logger.error(`Unknown reply from ${this.type === 'server' ? 'client' : 'server'}:`, message);
121
+ return;
122
+ }
123
+ if (message.error) {
124
+ const { error, ...cause } = message;
125
+ const remoteError = new RemoteError(error, cause);
126
+ currentItem.reject(remoteError);
127
+ }
128
+ else {
129
+ currentItem.resolve(message.response);
130
+ }
131
+ }
132
+ else if (message.type === 'request') {
133
+ // console.log(`${this.type.toUpperCase()} => Received request from ${this.type === 'server' ? 'CLIENT' : 'SERVER'}:`, message);
134
+ this.requestHandler(message);
135
+ }
136
+ else {
137
+ this.logger.error('Invalid message type received:', message);
138
+ }
139
+ }
140
+ }
141
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messaging/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { Msg, NatsConnection, Subscription as NatsSubscription, RequestOptions } from 'nats';
3
+ export interface AuthConfig {
4
+ user: string;
5
+ password: string;
6
+ }
7
+ export declare interface ProxySubscription {
8
+ on(event: 'message', listener: (message: Msg) => void): this;
9
+ emit(event: 'message', message: Msg): boolean;
10
+ }
11
+ export declare class ProxySubscription extends EventEmitter implements ProxySubscription {
12
+ readonly subscriber: NatsSubscription;
13
+ constructor(subscriber: NatsSubscription);
14
+ listen(): Promise<void>;
15
+ close(): void;
16
+ }
17
+ export declare class ProxyConnection {
18
+ private name;
19
+ private servers;
20
+ private auth;
21
+ private publisher?;
22
+ private subscribers;
23
+ private closed;
24
+ constructor(name: string, servers: string[], auth: AuthConfig);
25
+ connect(): Promise<NatsConnection>;
26
+ subscribe(subject: string, skipListening?: boolean): ProxySubscription;
27
+ publish(subject: string, message: any): void;
28
+ request(subject: string, message: any, opts?: RequestOptions): Promise<any>;
29
+ close(): Promise<void>;
30
+ }
@@ -0,0 +1,85 @@
1
+ import { EventEmitter } from 'events';
2
+ import { connect } from 'nats';
3
+ import { pack, unpack } from '../packer/index.js';
4
+ export class ProxySubscription extends EventEmitter {
5
+ subscriber;
6
+ constructor(subscriber) {
7
+ super();
8
+ this.subscriber = subscriber;
9
+ }
10
+ async listen() {
11
+ for await (const msg of this.subscriber) {
12
+ if (msg.data.length == 0) {
13
+ continue;
14
+ }
15
+ this.emit('message', msg);
16
+ }
17
+ }
18
+ close() {
19
+ this.removeAllListeners();
20
+ this.subscriber.unsubscribe();
21
+ }
22
+ }
23
+ export class ProxyConnection {
24
+ name;
25
+ servers = [];
26
+ auth;
27
+ publisher;
28
+ subscribers = [];
29
+ closed = false;
30
+ constructor(name, servers, auth) {
31
+ this.name = name;
32
+ this.servers = servers;
33
+ this.auth = auth;
34
+ }
35
+ async connect() {
36
+ this.publisher = await connect({
37
+ servers: this.servers,
38
+ name: this.name,
39
+ maxReconnectAttempts: -1,
40
+ noAsyncTraces: true,
41
+ user: this.auth.user,
42
+ pass: this.auth.password,
43
+ });
44
+ return this.publisher;
45
+ }
46
+ subscribe(subject, skipListening) {
47
+ if (!this.publisher || this.publisher.isClosed()) {
48
+ throw new Error('Connection not established');
49
+ }
50
+ const subscriber = new ProxySubscription(this.publisher.subscribe(subject));
51
+ if (!skipListening) {
52
+ subscriber.listen();
53
+ }
54
+ this.subscribers.push(subscriber);
55
+ return subscriber;
56
+ }
57
+ publish(subject, message) {
58
+ if (this.closed) {
59
+ return;
60
+ }
61
+ if (!this.publisher || this.publisher.isClosed()) {
62
+ throw new Error('Connection not established');
63
+ }
64
+ this.publisher.publish(subject, pack(message));
65
+ }
66
+ async request(subject, message, opts) {
67
+ if (this.closed) {
68
+ return;
69
+ }
70
+ if (!this.publisher || this.publisher.isClosed()) {
71
+ throw new Error('Connection not established');
72
+ }
73
+ const msg = await this.publisher.request(subject, pack(message), opts);
74
+ const response = unpack(msg.data);
75
+ return response;
76
+ }
77
+ async close() {
78
+ this.closed = true;
79
+ for (const subscriber of this.subscribers) {
80
+ subscriber.close();
81
+ }
82
+ await this.publisher?.close();
83
+ }
84
+ }
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/nats/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Systeminformation } from 'systeminformation';
2
+ export type IPVersion = 'ipv4' | 'ipv6';
3
+ export interface UsableNetworkAddress {
4
+ address: string;
5
+ isPrivate: boolean;
6
+ }
7
+ export declare const isIPv4EmbeddedIPv6: (ip: string) => boolean;
8
+ export declare const extractPureIPAddress: (address: string) => string;
9
+ export declare const isValidNetworkAddress: (ip: string) => boolean;
10
+ export declare const isInternalNetworkAddress: (ip: string) => boolean;
11
+ export declare const fetchViableNetworkAddresses: () => UsableNetworkAddress[];
12
+ export declare const getSystemNetworkInterfaces: () => Promise<Systeminformation.NetworkInterfacesData[]>;
@@ -0,0 +1,92 @@
1
+ import { networkInterfaces } from 'os';
2
+ import { networkInterfaces as ni } from 'systeminformation';
3
+ class IPRange {
4
+ ranges = new Map();
5
+ constructor(entries) {
6
+ entries.forEach(([ip, prefixLength, version = 'ipv4']) => this.addSubnet(ip, prefixLength, version));
7
+ }
8
+ ipToBigInt(ip) {
9
+ if (ip.includes(':')) {
10
+ return BigInt(`0x${ip
11
+ .split(':')
12
+ .map((part) => part.padStart(4, '0'))
13
+ .join('')}`);
14
+ }
15
+ return BigInt(`0x${ip
16
+ .split('.')
17
+ .map((octet) => parseInt(octet).toString(16).padStart(2, '0'))
18
+ .join('')}`);
19
+ }
20
+ addSubnet(ip, prefixLength, version) {
21
+ const subnet = this.ipToBigInt(ip);
22
+ const bits = version === 'ipv4' ? 32n : 128n;
23
+ const mask = (1n << (bits - BigInt(prefixLength))) - 1n;
24
+ const start = subnet & ~mask;
25
+ const end = start | mask;
26
+ if (!this.ranges.has(version)) {
27
+ this.ranges.set(version, []);
28
+ }
29
+ this.ranges.get(version).push([start, end]);
30
+ }
31
+ check(ip, version) {
32
+ const ranges = this.ranges.get(version);
33
+ if (!ranges)
34
+ return false;
35
+ const ipInt = this.ipToBigInt(ip);
36
+ return ranges.some(([start, end]) => ipInt >= start && ipInt <= end);
37
+ }
38
+ }
39
+ const unusableRanges = new IPRange([
40
+ ['127.0.0.0', 8],
41
+ ['169.254.0.0', 16],
42
+ ['0.0.0.0', 8],
43
+ ['240.0.0.0', 4],
44
+ ['::1', 128, 'ipv6'],
45
+ ['fe80::', 10, 'ipv6'],
46
+ ]);
47
+ const privateRanges = new IPRange([
48
+ ['10.0.0.0', 8],
49
+ ['172.16.0.0', 12],
50
+ ['192.168.0.0', 16],
51
+ ['fc00::', 7, 'ipv6'],
52
+ ]);
53
+ export const isIPv4EmbeddedIPv6 = (ip) => ip.includes(':') && ip.startsWith('::ffff:');
54
+ export const extractPureIPAddress = (address) => (isIPv4EmbeddedIPv6(address) ? address.slice(7) : address);
55
+ export const isValidNetworkAddress = (ip) => {
56
+ if (!ip)
57
+ return false;
58
+ try {
59
+ const cleanedIp = extractPureIPAddress(ip);
60
+ const version = cleanedIp.includes(':') ? 'ipv6' : 'ipv4';
61
+ return !unusableRanges.check(cleanedIp, version);
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ };
67
+ export const isInternalNetworkAddress = (ip) => {
68
+ const cleanedIp = extractPureIPAddress(ip);
69
+ const version = cleanedIp.includes(':') ? 'ipv6' : 'ipv4';
70
+ return privateRanges.check(cleanedIp, version);
71
+ };
72
+ export const fetchViableNetworkAddresses = () => {
73
+ const interfaces = Object.values(networkInterfaces())
74
+ .flat()
75
+ .filter((ni) => ni !== undefined);
76
+ const isValidInterface = (ni) => isValidNetworkAddress(ni.address) && !ni.internal;
77
+ return interfaces.filter(isValidInterface).map((ni) => ({
78
+ address: ni.address,
79
+ isPrivate: isInternalNetworkAddress(ni.address),
80
+ }));
81
+ };
82
+ export const getSystemNetworkInterfaces = async () => {
83
+ let allInterfaces = await ni();
84
+ if (!Array.isArray(allInterfaces)) {
85
+ allInterfaces = [allInterfaces];
86
+ }
87
+ const interfaces = allInterfaces.filter((adapter) => {
88
+ return !adapter.internal && (adapter.ip4 || adapter.ip6);
89
+ });
90
+ return interfaces;
91
+ };
92
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/network/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function getNpmPath(): string[];
2
+ export declare function getNpmGlobalModulesDirectory(): string | null;
3
+ export declare function getInstallDir(currentDir: string, moduleName: string): string;
4
+ export declare function getUserHomeDir(asUser?: string): string;