ntpclient 1.5.1 → 1.5.2

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/dist/cjs/index.js CHANGED
@@ -1,5 +1,4 @@
1
- /* eslint-disable no-magic-numbers */
2
- import dgram from 'node:dgram';
1
+ import * as dgram from 'dgram';
3
2
  const TEN_SECONDS_IN_MILLIS = 10000;
4
3
  const defaultConfig = {
5
4
  port: 123,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /* eslint-disable no-magic-numbers */
11
+ import { assert, expect, describe, test, beforeEach, vi, afterEach } from 'vitest';
12
+ import { NTPClient } from './index.js';
13
+ const SECOND_IN_MILLIS = 1000;
14
+ const replyTimeout = 10 * SECOND_IN_MILLIS;
15
+ describe('NTP', () => {
16
+ beforeEach(() => {
17
+ vi.mock('dgram', () => __awaiter(void 0, void 0, void 0, function* () {
18
+ const actual = (yield vi.importActual('dgram'));
19
+ const socket = actual.createSocket('udp4');
20
+ return Object.assign(Object.assign({}, actual), { send: () => {
21
+ socket.emit('message', Buffer.from([
22
+ 0x1c, 0x02, 0x03, 0xe8, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x05, 0x12, 0xc0, 0x35, 0x67, 0x6c, 0xe9,
23
+ 0x03, 0x76, 0xff, 0xff, 0x97, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x03,
24
+ 0x78, 0x0f, 0xe9, 0xd6, 0x4e, 0x10, 0xe9, 0x03, 0x78, 0x0f, 0xea, 0x03, 0x93, 0xf5,
25
+ ]));
26
+ } });
27
+ }));
28
+ });
29
+ afterEach(() => {
30
+ vi.resetAllMocks();
31
+ });
32
+ test('returns the current time', () => __awaiter(void 0, void 0, void 0, function* () {
33
+ const ntpClient = new NTPClient({
34
+ replyTimeout,
35
+ });
36
+ const data = yield ntpClient.getNetworkTime();
37
+ expect(data).toEqual(expect.any(Date));
38
+ }), replyTimeout);
39
+ test('works with another NTP server', () => __awaiter(void 0, void 0, void 0, function* () {
40
+ const ntpClient = new NTPClient({
41
+ replyTimeout,
42
+ server: '0.pool.ntp.org',
43
+ });
44
+ const data = yield ntpClient.getNetworkTime();
45
+ expect(data).toEqual(expect.any(Date));
46
+ }), replyTimeout);
47
+ test("doesn't work with an invalid NTP server", () => __awaiter(void 0, void 0, void 0, function* () {
48
+ try {
49
+ const ntpClient = new NTPClient({
50
+ replyTimeout: SECOND_IN_MILLIS,
51
+ server: 'google.com',
52
+ });
53
+ yield ntpClient.getNetworkTime();
54
+ assert.fail();
55
+ }
56
+ catch (error) {
57
+ expect(error.message).toContain('Timeout');
58
+ }
59
+ }));
60
+ });
61
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"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"}
package/dist/mjs/index.js CHANGED
@@ -1,5 +1,4 @@
1
- /* eslint-disable no-magic-numbers */
2
- import dgram from 'node:dgram';
1
+ import * as dgram from 'dgram';
3
2
  const TEN_SECONDS_IN_MILLIS = 10000;
4
3
  const defaultConfig = {
5
4
  port: 123,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,52 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ import { assert, expect, describe, test, beforeEach, vi, afterEach } from 'vitest';
3
+ import { NTPClient } from './index.js';
4
+ const SECOND_IN_MILLIS = 1000;
5
+ const replyTimeout = 10 * SECOND_IN_MILLIS;
6
+ describe('NTP', () => {
7
+ beforeEach(() => {
8
+ vi.mock('dgram', async () => {
9
+ const actual = (await vi.importActual('dgram'));
10
+ const socket = actual.createSocket('udp4');
11
+ return Object.assign(Object.assign({}, actual), { send: () => {
12
+ socket.emit('message', Buffer.from([
13
+ 0x1c, 0x02, 0x03, 0xe8, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x05, 0x12, 0xc0, 0x35, 0x67, 0x6c, 0xe9,
14
+ 0x03, 0x76, 0xff, 0xff, 0x97, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x03,
15
+ 0x78, 0x0f, 0xe9, 0xd6, 0x4e, 0x10, 0xe9, 0x03, 0x78, 0x0f, 0xea, 0x03, 0x93, 0xf5,
16
+ ]));
17
+ } });
18
+ });
19
+ });
20
+ afterEach(() => {
21
+ vi.resetAllMocks();
22
+ });
23
+ test('returns the current time', async () => {
24
+ const ntpClient = new NTPClient({
25
+ replyTimeout,
26
+ });
27
+ const data = await ntpClient.getNetworkTime();
28
+ expect(data).toEqual(expect.any(Date));
29
+ }, replyTimeout);
30
+ test('works with another NTP server', async () => {
31
+ const ntpClient = new NTPClient({
32
+ replyTimeout,
33
+ server: '0.pool.ntp.org',
34
+ });
35
+ const data = await ntpClient.getNetworkTime();
36
+ expect(data).toEqual(expect.any(Date));
37
+ }, replyTimeout);
38
+ test("doesn't work with an invalid NTP server", async () => {
39
+ try {
40
+ const ntpClient = new NTPClient({
41
+ replyTimeout: SECOND_IN_MILLIS,
42
+ server: 'google.com',
43
+ });
44
+ await ntpClient.getNetworkTime();
45
+ assert.fail();
46
+ }
47
+ catch (error) {
48
+ expect(error.message).toContain('Timeout');
49
+ }
50
+ });
51
+ });
52
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,6 @@
1
1
  {
2
2
  "author": "Florian Imdahl <git@ffflorian.de>",
3
- "bin": {
4
- "ntpclient": "dist/cjs/cli.js"
5
- },
3
+ "bin": "dist/cjs/cli.js",
6
4
  "dependencies": {
7
5
  "commander": "11.1.0"
8
6
  },
@@ -37,9 +35,9 @@
37
35
  "dist": "yarn clean && yarn build",
38
36
  "generate:packagejson": "../../bin/generate-hybrid-package-json.sh",
39
37
  "start": "ts-node-esm src/cli.ts",
40
- "test": "ts-node-esm -P tsconfig.jasmine.json ../../node_modules/.bin/jasmine"
38
+ "test": "vitest run"
41
39
  },
42
40
  "type": "module",
43
- "version": "1.5.1",
44
- "gitHead": "bb5b97965f04bba13e813a2998873f974909b68a"
41
+ "version": "1.5.2",
42
+ "gitHead": "f5134e8663185ed1ff19e0291a7a2da86c0aa39e"
45
43
  }
@@ -0,0 +1,70 @@
1
+ /* eslint-disable no-magic-numbers */
2
+ import {assert, expect, describe, test, beforeEach, vi, afterEach} from 'vitest';
3
+ import {NTPClient} from './index.js';
4
+ import type dgram from 'dgram';
5
+
6
+ const SECOND_IN_MILLIS = 1000;
7
+ const replyTimeout = 10 * SECOND_IN_MILLIS;
8
+
9
+ describe('NTP', () => {
10
+ beforeEach(() => {
11
+ vi.mock('dgram', async () => {
12
+ const actual = (await vi.importActual('dgram')) as typeof dgram;
13
+ const socket = actual.createSocket('udp4');
14
+ return {
15
+ ...actual,
16
+ send: () => {
17
+ socket.emit(
18
+ 'message',
19
+ Buffer.from([
20
+ 0x1c, 0x02, 0x03, 0xe8, 0x00, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x05, 0x12, 0xc0, 0x35, 0x67, 0x6c, 0xe9,
21
+ 0x03, 0x76, 0xff, 0xff, 0x97, 0x0f, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x03,
22
+ 0x78, 0x0f, 0xe9, 0xd6, 0x4e, 0x10, 0xe9, 0x03, 0x78, 0x0f, 0xea, 0x03, 0x93, 0xf5,
23
+ ])
24
+ );
25
+ },
26
+ };
27
+ });
28
+ });
29
+ afterEach(() => {
30
+ vi.resetAllMocks();
31
+ });
32
+
33
+ test(
34
+ 'returns the current time',
35
+ async () => {
36
+ const ntpClient = new NTPClient({
37
+ replyTimeout,
38
+ });
39
+ const data = await ntpClient.getNetworkTime();
40
+ expect(data).toEqual(expect.any(Date));
41
+ },
42
+ replyTimeout
43
+ );
44
+
45
+ test(
46
+ 'works with another NTP server',
47
+ async () => {
48
+ const ntpClient = new NTPClient({
49
+ replyTimeout,
50
+ server: '0.pool.ntp.org',
51
+ });
52
+ const data = await ntpClient.getNetworkTime();
53
+ expect(data).toEqual(expect.any(Date));
54
+ },
55
+ replyTimeout
56
+ );
57
+
58
+ test("doesn't work with an invalid NTP server", async () => {
59
+ try {
60
+ const ntpClient = new NTPClient({
61
+ replyTimeout: SECOND_IN_MILLIS,
62
+ server: 'google.com',
63
+ });
64
+ await ntpClient.getNetworkTime();
65
+ assert.fail();
66
+ } catch (error) {
67
+ expect((error as Error).message).toContain('Timeout');
68
+ }
69
+ });
70
+ });
package/src/index.ts CHANGED
@@ -1,5 +1,4 @@
1
- /* eslint-disable no-magic-numbers */
2
- import dgram from 'node:dgram';
1
+ import * as dgram from 'dgram';
3
2
 
4
3
  const TEN_SECONDS_IN_MILLIS = 10_000;
5
4