stellarium-ts 0.12.0 → 0.13.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.
Files changed (77) hide show
  1. package/dist/client/operatorClient.d.ts +10 -4
  2. package/dist/client/operatorClient.d.ts.map +1 -1
  3. package/dist/client/operatorClient.js +51 -7
  4. package/dist/crypto/utils.d.ts +9 -0
  5. package/dist/crypto/utils.d.ts.map +1 -1
  6. package/dist/crypto/utils.js +30 -1
  7. package/dist/db/db.d.ts +5 -4
  8. package/dist/db/db.d.ts.map +1 -1
  9. package/dist/db/db.js +88 -12
  10. package/dist/grant/grant.d.ts +132 -0
  11. package/dist/grant/grant.d.ts.map +1 -0
  12. package/dist/grant/grant.js +158 -0
  13. package/dist/grant/repository.d.ts +57 -0
  14. package/dist/grant/repository.d.ts.map +1 -0
  15. package/dist/grant/repository.js +105 -0
  16. package/dist/grant/service.d.ts +141 -0
  17. package/dist/grant/service.d.ts.map +1 -0
  18. package/dist/grant/service.js +431 -0
  19. package/dist/index.d.ts +6 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +5 -1
  22. package/dist/peer/repository.d.ts +33 -2
  23. package/dist/peer/repository.d.ts.map +1 -1
  24. package/dist/peer/repository.js +43 -21
  25. package/dist/resource/invoker.d.ts +21 -9
  26. package/dist/resource/invoker.d.ts.map +1 -1
  27. package/dist/resource/invoker.js +69 -16
  28. package/dist/resource/repository.d.ts +47 -8
  29. package/dist/resource/repository.d.ts.map +1 -1
  30. package/dist/resource/repository.js +122 -67
  31. package/dist/routes.d.ts +8 -0
  32. package/dist/routes.d.ts.map +1 -1
  33. package/dist/routes.js +302 -48
  34. package/dist/server.d.ts +62 -0
  35. package/dist/server.d.ts.map +1 -1
  36. package/dist/server.js +119 -18
  37. package/dist/service.d.ts +24 -1
  38. package/dist/service.d.ts.map +1 -1
  39. package/dist/service.js +9 -6
  40. package/dist/startup.d.ts +14 -0
  41. package/dist/startup.d.ts.map +1 -1
  42. package/dist/startup.js +90 -76
  43. package/dist/tests/client/operatorClient.test.d.ts +2 -0
  44. package/dist/tests/client/operatorClient.test.d.ts.map +1 -0
  45. package/dist/tests/client/operatorClient.test.js +96 -0
  46. package/dist/tests/db/db.test.d.ts +2 -0
  47. package/dist/tests/db/db.test.d.ts.map +1 -0
  48. package/dist/tests/db/db.test.js +64 -0
  49. package/dist/tests/grant/grant.test.d.ts +2 -0
  50. package/dist/tests/grant/grant.test.d.ts.map +1 -0
  51. package/dist/tests/grant/grant.test.js +133 -0
  52. package/dist/tests/grant/service.test.d.ts +2 -0
  53. package/dist/tests/grant/service.test.d.ts.map +1 -0
  54. package/dist/tests/grant/service.test.js +415 -0
  55. package/dist/tests/helpers.d.ts +13 -0
  56. package/dist/tests/helpers.d.ts.map +1 -0
  57. package/dist/tests/helpers.js +49 -0
  58. package/dist/tests/integration/network.test.d.ts +2 -0
  59. package/dist/tests/integration/network.test.d.ts.map +1 -0
  60. package/dist/tests/integration/network.test.js +188 -0
  61. package/dist/tests/peer/repository.test.d.ts +2 -0
  62. package/dist/tests/peer/repository.test.d.ts.map +1 -0
  63. package/dist/tests/peer/repository.test.js +50 -0
  64. package/dist/tests/resource/invoker.test.js +132 -5
  65. package/dist/tests/resource/repository.test.d.ts +2 -0
  66. package/dist/tests/resource/repository.test.d.ts.map +1 -0
  67. package/dist/tests/resource/repository.test.js +151 -0
  68. package/dist/tests/routes.test.d.ts +2 -0
  69. package/dist/tests/routes.test.d.ts.map +1 -0
  70. package/dist/tests/routes.test.js +565 -0
  71. package/dist/tests/server.test.d.ts +2 -0
  72. package/dist/tests/server.test.d.ts.map +1 -0
  73. package/dist/tests/server.test.js +37 -0
  74. package/dist/tests/startup.test.d.ts +2 -0
  75. package/dist/tests/startup.test.d.ts.map +1 -0
  76. package/dist/tests/startup.test.js +75 -0
  77. package/package.json +2 -1
@@ -0,0 +1,75 @@
1
+ import Fastify from "fastify";
2
+ import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
3
+ import { openDatabase } from "../db/db.js";
4
+ import routes from "../routes.js";
5
+ import { createService } from "../service.js";
6
+ import { STARTUP_PAGE_SIZE, StartupService } from "../startup.js";
7
+ import { testConfig, weatherResource } from "./helpers.js";
8
+ const STARTING_PEER = "http://starting.example";
9
+ const SELF = "http://self.example";
10
+ describe("StartupService", () => {
11
+ const peerCount = STARTUP_PAGE_SIZE * 2 + 5;
12
+ const resourceCount = STARTUP_PAGE_SIZE + 1;
13
+ let databases;
14
+ let startingNode;
15
+ let service;
16
+ let startup;
17
+ let requestedUrls;
18
+ beforeEach(async () => {
19
+ const startingDb = await openDatabase(":memory:");
20
+ const startingService = createService(startingDb, [weatherResource(STARTING_PEER)], testConfig({ baseUrl: STARTING_PEER }));
21
+ for (let i = 0; i < peerCount; i++) {
22
+ const baseUrl = `http://peer${i}.example`;
23
+ await startingService.peerRepository.create({ baseUrl, name: baseUrl, publicKey: `key-${i}` });
24
+ }
25
+ for (let i = 0; i < resourceCount - 1; i++) {
26
+ await startingService.resourceRepository.learn({ id: 0, baseUrl: "http://peer0.example", metadata: {}, path: "com.peer", name: `Learned${i}`, functions: [] });
27
+ }
28
+ startingNode = Fastify();
29
+ await startingNode.register(routes, { prefix: "/v1", service: startingService });
30
+ await startingNode.ready();
31
+ // Route the starting peer's traffic to the in-process node, recording each request.
32
+ requestedUrls = [];
33
+ vi.spyOn(globalThis, "fetch").mockImplementation(async (input) => {
34
+ const url = new URL(String(input));
35
+ requestedUrls.push(url.pathname + url.search);
36
+ const response = await startingNode.inject({ method: "GET", url: url.pathname + url.search });
37
+ return new Response(response.body, { status: response.statusCode, headers: { "Content-Type": "application/json" } });
38
+ });
39
+ const db = await openDatabase(":memory:");
40
+ databases = [startingDb, db];
41
+ const config = testConfig({ baseUrl: SELF });
42
+ service = createService(db, [], config);
43
+ startup = new StartupService(startingNode.log, service, STARTING_PEER, SELF, config.publicKey, config.privateKey);
44
+ });
45
+ afterEach(async () => {
46
+ vi.restoreAllMocks();
47
+ await startingNode.close();
48
+ await Promise.all(databases.map(db => db.close()));
49
+ });
50
+ test("populatePeers walks every page and stores the starting peer", async () => {
51
+ await startup.populatePeers();
52
+ const peers = await service.peerRepository.getPeerList();
53
+ expect(peers).toHaveLength(peerCount + 1);
54
+ expect(peers.map(p => p.baseUrl)).toContain(STARTING_PEER);
55
+ expect(requestedUrls.filter(url => url.startsWith("/v1/peers"))).toEqual([
56
+ `/v1/peers?offset=0&limit=${STARTUP_PAGE_SIZE}`,
57
+ `/v1/peers?offset=${STARTUP_PAGE_SIZE}&limit=${STARTUP_PAGE_SIZE}`,
58
+ `/v1/peers?offset=${STARTUP_PAGE_SIZE * 2}&limit=${STARTUP_PAGE_SIZE}`,
59
+ ]);
60
+ });
61
+ test("populatePeers completes a list a previous run left partial", async () => {
62
+ await service.peerRepository.create({ baseUrl: "http://peer0.example", name: "http://peer0.example", publicKey: "key-0" });
63
+ await startup.populatePeers();
64
+ expect(await service.peerRepository.getPeerList()).toHaveLength(peerCount + 1);
65
+ });
66
+ test("populateResources walks every page", async () => {
67
+ await startup.populateResources();
68
+ expect(await service.resourceRepository.getExternalResources()).toHaveLength(resourceCount);
69
+ expect(requestedUrls.filter(url => url.startsWith("/v1/resources"))).toHaveLength(2);
70
+ });
71
+ test("rejects a next offset that doesn't move forward", async () => {
72
+ vi.mocked(fetch).mockResolvedValue(Response.json({ resources: [], nextOffset: 0 }));
73
+ await expect(startup.populateResources()).rejects.toThrow("Invalid response from peer");
74
+ });
75
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stellarium-ts",
3
- "version": "0.12.0",
3
+ "version": "0.13.0",
4
4
  "description": "A Stellarium Node in TypeScript.",
5
5
  "homepage": "https://github.com/qualletio/stellarium-ts#readme",
6
6
  "bugs": {
@@ -42,6 +42,7 @@
42
42
  "vitest": "^4.1.11"
43
43
  },
44
44
  "dependencies": {
45
+ "@fastify/rate-limit": "^11.2.1",
45
46
  "dotenv": "^18.0.5",
46
47
  "fastify": "^5.12.5",
47
48
  "requestscript": "1.1.0",