@welshman/store 0.14.0-pre3 → 0.14.0-pre5

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 (157) hide show
  1. package/dist/store/src/{repository.d.ts → derive.d.ts} +33 -41
  2. package/dist/store/src/derive.d.ts.map +1 -0
  3. package/dist/store/src/derive.js +706 -0
  4. package/dist/store/src/derive.js.map +1 -0
  5. package/dist/store/src/index.d.ts +9 -1
  6. package/dist/store/src/index.d.ts.map +1 -1
  7. package/dist/store/src/index.js +9 -1
  8. package/dist/store/src/index.js.map +1 -1
  9. package/dist/store/src/misc.d.ts +2 -7
  10. package/dist/store/src/misc.d.ts.map +1 -1
  11. package/dist/store/src/misc.js +1 -1
  12. package/dist/store/src/misc.js.map +1 -1
  13. package/dist/{net/src/repository.d.ts → store/src/repository/adapters/memory.d.ts} +22 -30
  14. package/dist/store/src/repository/adapters/memory.d.ts.map +1 -0
  15. package/dist/{net/src/repository.js → store/src/repository/adapters/memory.js} +96 -106
  16. package/dist/store/src/repository/adapters/memory.js.map +1 -0
  17. package/dist/store/src/repository/adapters/sqlite/engine.d.ts +65 -0
  18. package/dist/store/src/repository/adapters/sqlite/engine.d.ts.map +1 -0
  19. package/dist/store/src/repository/adapters/sqlite/engine.js +420 -0
  20. package/dist/store/src/repository/adapters/sqlite/engine.js.map +1 -0
  21. package/dist/store/src/repository/adapters/sqlite/leader.d.ts +8 -0
  22. package/dist/store/src/repository/adapters/sqlite/leader.d.ts.map +1 -0
  23. package/dist/store/src/repository/adapters/sqlite/leader.js +222 -0
  24. package/dist/store/src/repository/adapters/sqlite/leader.js.map +1 -0
  25. package/dist/store/src/repository/adapters/sqlite/protocol.d.ts +52 -0
  26. package/dist/store/src/repository/adapters/sqlite/protocol.d.ts.map +1 -0
  27. package/dist/store/src/repository/adapters/sqlite/protocol.js +52 -0
  28. package/dist/store/src/repository/adapters/sqlite/protocol.js.map +1 -0
  29. package/dist/store/src/repository/adapters/sqlite/repository.d.ts +54 -0
  30. package/dist/store/src/repository/adapters/sqlite/repository.d.ts.map +1 -0
  31. package/dist/store/src/repository/adapters/sqlite/repository.js +238 -0
  32. package/dist/store/src/repository/adapters/sqlite/repository.js.map +1 -0
  33. package/dist/store/src/repository/adapters/sqlite/serve.d.ts +4 -0
  34. package/dist/store/src/repository/adapters/sqlite/serve.d.ts.map +1 -0
  35. package/dist/store/src/repository/adapters/sqlite/serve.js +39 -0
  36. package/dist/store/src/repository/adapters/sqlite/serve.js.map +1 -0
  37. package/dist/store/src/repository/adapters/sqlite/wasm.d.ts +7 -0
  38. package/dist/store/src/repository/adapters/sqlite/wasm.d.ts.map +1 -0
  39. package/dist/store/src/repository/adapters/sqlite/wasm.js +61 -0
  40. package/dist/store/src/repository/adapters/sqlite/wasm.js.map +1 -0
  41. package/dist/store/src/repository/adapters/sqlite/worker.d.ts +2 -0
  42. package/dist/store/src/repository/adapters/sqlite/worker.d.ts.map +1 -0
  43. package/dist/store/src/repository/adapters/sqlite/worker.js +4 -0
  44. package/dist/store/src/repository/adapters/sqlite/worker.js.map +1 -0
  45. package/dist/store/src/repository/core.d.ts +68 -0
  46. package/dist/store/src/repository/core.d.ts.map +1 -0
  47. package/dist/store/src/repository/core.js +123 -0
  48. package/dist/store/src/repository/core.js.map +1 -0
  49. package/dist/store/src/svelte.d.ts +22 -0
  50. package/dist/store/src/svelte.d.ts.map +1 -0
  51. package/dist/store/src/svelte.js +100 -0
  52. package/dist/store/src/svelte.js.map +1 -0
  53. package/dist/store/src/synced.d.ts +1 -1
  54. package/dist/store/src/synced.d.ts.map +1 -1
  55. package/dist/store/src/synced.js +1 -1
  56. package/dist/store/src/synced.js.map +1 -1
  57. package/dist/store/src/throttle.d.ts +1 -1
  58. package/dist/store/src/throttle.d.ts.map +1 -1
  59. package/dist/{net → store}/src/tracker.d.ts +2 -0
  60. package/dist/store/src/tracker.d.ts.map +1 -0
  61. package/dist/{net → store}/src/tracker.js +8 -4
  62. package/dist/store/src/tracker.js.map +1 -0
  63. package/dist/tsconfig.build.tsbuildinfo +1 -1
  64. package/dist/util/src/Command.d.ts +1 -1
  65. package/dist/util/src/Command.d.ts.map +1 -1
  66. package/dist/util/src/Command.js +12 -5
  67. package/dist/util/src/Command.js.map +1 -1
  68. package/dist/util/src/Events.d.ts +3 -2
  69. package/dist/util/src/Events.d.ts.map +1 -1
  70. package/dist/util/src/Events.js.map +1 -1
  71. package/dist/util/src/Kinds.d.ts +1 -0
  72. package/dist/util/src/Kinds.d.ts.map +1 -1
  73. package/dist/util/src/Kinds.js +1 -0
  74. package/dist/util/src/Kinds.js.map +1 -1
  75. package/dist/util/src/RelaySelection.d.ts +5 -0
  76. package/dist/util/src/RelaySelection.d.ts.map +1 -1
  77. package/dist/util/src/RelaySelection.js.map +1 -1
  78. package/dist/util/src/Tags.d.ts +5 -0
  79. package/dist/util/src/Tags.d.ts.map +1 -1
  80. package/dist/util/src/Tags.js +3 -0
  81. package/dist/util/src/Tags.js.map +1 -1
  82. package/dist/util/src/index.d.ts +1 -0
  83. package/dist/util/src/index.d.ts.map +1 -1
  84. package/dist/util/src/index.js +1 -0
  85. package/dist/util/src/index.js.map +1 -1
  86. package/package.json +31 -12
  87. package/dist/net/src/adapter.d.ts +0 -47
  88. package/dist/net/src/adapter.d.ts.map +0 -1
  89. package/dist/net/src/adapter.js +0 -139
  90. package/dist/net/src/adapter.js.map +0 -1
  91. package/dist/net/src/auth.d.ts +0 -40
  92. package/dist/net/src/auth.d.ts.map +0 -1
  93. package/dist/net/src/auth.js +0 -131
  94. package/dist/net/src/auth.js.map +0 -1
  95. package/dist/net/src/context.d.ts +0 -10
  96. package/dist/net/src/context.d.ts.map +0 -1
  97. package/dist/net/src/context.js +0 -2
  98. package/dist/net/src/context.js.map +0 -1
  99. package/dist/net/src/count.d.ts +0 -30
  100. package/dist/net/src/count.d.ts.map +0 -1
  101. package/dist/net/src/count.js +0 -97
  102. package/dist/net/src/count.js.map +0 -1
  103. package/dist/net/src/diff.d.ts +0 -57
  104. package/dist/net/src/diff.d.ts.map +0 -1
  105. package/dist/net/src/diff.js +0 -169
  106. package/dist/net/src/diff.js.map +0 -1
  107. package/dist/net/src/index.d.ts +0 -17
  108. package/dist/net/src/index.d.ts.map +0 -1
  109. package/dist/net/src/index.js +0 -17
  110. package/dist/net/src/index.js.map +0 -1
  111. package/dist/net/src/message.d.ts +0 -96
  112. package/dist/net/src/message.d.ts.map +0 -1
  113. package/dist/net/src/message.js +0 -76
  114. package/dist/net/src/message.js.map +0 -1
  115. package/dist/net/src/multiplex.d.ts +0 -13
  116. package/dist/net/src/multiplex.d.ts.map +0 -1
  117. package/dist/net/src/multiplex.js +0 -210
  118. package/dist/net/src/multiplex.js.map +0 -1
  119. package/dist/net/src/negentropy.d.ts +0 -48
  120. package/dist/net/src/negentropy.d.ts.map +0 -1
  121. package/dist/net/src/negentropy.js +0 -528
  122. package/dist/net/src/negentropy.js.map +0 -1
  123. package/dist/net/src/policy.d.ts +0 -63
  124. package/dist/net/src/policy.d.ts.map +0 -1
  125. package/dist/net/src/policy.js +0 -388
  126. package/dist/net/src/policy.js.map +0 -1
  127. package/dist/net/src/pool.d.ts +0 -15
  128. package/dist/net/src/pool.d.ts.map +0 -1
  129. package/dist/net/src/pool.js +0 -51
  130. package/dist/net/src/pool.js.map +0 -1
  131. package/dist/net/src/publish.d.ts +0 -47
  132. package/dist/net/src/publish.d.ts.map +0 -1
  133. package/dist/net/src/publish.js +0 -112
  134. package/dist/net/src/publish.js.map +0 -1
  135. package/dist/net/src/repository.d.ts.map +0 -1
  136. package/dist/net/src/repository.js.map +0 -1
  137. package/dist/net/src/request.d.ts +0 -37
  138. package/dist/net/src/request.d.ts.map +0 -1
  139. package/dist/net/src/request.js +0 -206
  140. package/dist/net/src/request.js.map +0 -1
  141. package/dist/net/src/socket.d.ts +0 -52
  142. package/dist/net/src/socket.d.ts.map +0 -1
  143. package/dist/net/src/socket.js +0 -134
  144. package/dist/net/src/socket.js.map +0 -1
  145. package/dist/net/src/tracker.d.ts.map +0 -1
  146. package/dist/net/src/tracker.js.map +0 -1
  147. package/dist/net/src/util.d.ts +0 -18
  148. package/dist/net/src/util.d.ts.map +0 -1
  149. package/dist/net/src/util.js +0 -25
  150. package/dist/net/src/util.js.map +0 -1
  151. package/dist/net/src/wrapManager.d.ts +0 -34
  152. package/dist/net/src/wrapManager.d.ts.map +0 -1
  153. package/dist/net/src/wrapManager.js +0 -79
  154. package/dist/net/src/wrapManager.js.map +0 -1
  155. package/dist/store/src/repository.d.ts.map +0 -1
  156. package/dist/store/src/repository.js +0 -580
  157. package/dist/store/src/repository.js.map +0 -1
@@ -1,139 +0,0 @@
1
- import EventEmitter from "events";
2
- import { call, sleep, on } from "@welshman/lib";
3
- import { isRelayUrl, matchFilters } from "@welshman/util";
4
- import { LOCAL_RELAY_URL } from "./repository.js";
5
- import { RelayMessageType, ClientMessageType, } from "./message.js";
6
- import { SocketEvent } from "./socket.js";
7
- export var AdapterEvent;
8
- (function (AdapterEvent) {
9
- AdapterEvent["Receive"] = "receive";
10
- })(AdapterEvent || (AdapterEvent = {}));
11
- export class AbstractAdapter extends EventEmitter {
12
- _unsubscribers = [];
13
- cleanup() {
14
- this.removeAllListeners();
15
- this._unsubscribers.splice(0).forEach(call);
16
- }
17
- }
18
- export class SocketAdapter extends AbstractAdapter {
19
- socket;
20
- constructor(socket) {
21
- super();
22
- this.socket = socket;
23
- this._unsubscribers.push(on(socket, SocketEvent.Receive, (message, url) => {
24
- this.emit(AdapterEvent.Receive, message, url);
25
- }));
26
- }
27
- get sockets() {
28
- return [this.socket];
29
- }
30
- get urls() {
31
- return [this.socket.url];
32
- }
33
- send(message) {
34
- this.socket.send(message);
35
- }
36
- }
37
- export class LocalAdapter extends AbstractAdapter {
38
- repository;
39
- subs = new Map();
40
- constructor(repository) {
41
- super();
42
- this.repository = repository;
43
- this._unsubscribers.push(on(repository, "update", ({ added }) => {
44
- for (const [subId, filters] of this.subs.entries()) {
45
- for (const event of added) {
46
- if (matchFilters(filters, event)) {
47
- this.#receive([RelayMessageType.Event, subId, event]);
48
- }
49
- }
50
- }
51
- }));
52
- }
53
- get sockets() {
54
- return [];
55
- }
56
- get urls() {
57
- return [LOCAL_RELAY_URL];
58
- }
59
- send(message) {
60
- switch (message[0]) {
61
- case ClientMessageType.Event:
62
- return this.#handleEVENT(message);
63
- case ClientMessageType.Close:
64
- return this.#handleCLOSE(message);
65
- case ClientMessageType.Count:
66
- return this.#handleCOUNT(message);
67
- case ClientMessageType.Req:
68
- return this.#handleREQ(message);
69
- }
70
- }
71
- #receive(message) {
72
- this.emit(AdapterEvent.Receive, message, LOCAL_RELAY_URL);
73
- }
74
- #handleEVENT([_, event]) {
75
- this.repository.publish(event);
76
- // Callers generally expect async relays
77
- sleep(1).then(() => this.#receive([RelayMessageType.Ok, event.id, true, ""]));
78
- }
79
- #handleCLOSE([_, subId]) {
80
- this.subs.delete(subId);
81
- }
82
- #handleCOUNT([_, subId, ...filters]) {
83
- // Callers generally expect async relays
84
- sleep(1).then(() => {
85
- const count = this.repository.query(filters).length;
86
- this.#receive([RelayMessageType.Count, subId, { count }]);
87
- });
88
- }
89
- #handleREQ([_, subId, ...filters]) {
90
- this.subs.set(subId, filters);
91
- // Callers generally expect async relays
92
- sleep(1).then(() => {
93
- for (const event of this.repository.query(filters)) {
94
- this.#receive([RelayMessageType.Event, subId, event]);
95
- }
96
- this.#receive([RelayMessageType.Eose, subId]);
97
- });
98
- }
99
- }
100
- export class MockAdapter extends AbstractAdapter {
101
- url;
102
- send;
103
- constructor(url, send) {
104
- super();
105
- this.url = url;
106
- this.send = send;
107
- }
108
- get sockets() {
109
- return [];
110
- }
111
- get urls() {
112
- return [this.url];
113
- }
114
- receive = (message) => {
115
- this.emit(AdapterEvent.Receive, message, this.url);
116
- };
117
- }
118
- export const getAdapter = (url, context = {}) => {
119
- if (context.getAdapter) {
120
- const adapter = context.getAdapter(url, context);
121
- if (adapter) {
122
- return adapter;
123
- }
124
- }
125
- if (url === LOCAL_RELAY_URL) {
126
- if (!context.repository) {
127
- throw new Error("LOCAL_RELAY_URL cannot be used without context.repository");
128
- }
129
- return new LocalAdapter(context.repository);
130
- }
131
- if (isRelayUrl(url)) {
132
- if (!context.pool) {
133
- throw new Error("Unable to connect to relays without context.pool");
134
- }
135
- return new SocketAdapter(context.pool.get(url));
136
- }
137
- throw new Error(`Invalid relay url ${url}`);
138
- };
139
- //# sourceMappingURL=adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../net/src/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,40 +0,0 @@
1
- import EventEmitter from "events";
2
- import { SignedEvent, StampedEvent } from "@welshman/util";
3
- import { Socket } from "./socket.js";
4
- import { Unsubscriber } from "./util.js";
5
- export declare enum AuthStatus {
6
- None = "none",
7
- Requested = "requested",
8
- PendingSignature = "pending_signature",
9
- DeniedSignature = "denied_signature",
10
- PendingResponse = "pending_response",
11
- Forbidden = "forbidden",
12
- Ok = "ok"
13
- }
14
- export type AuthResult = {
15
- ok: boolean;
16
- status: AuthStatus;
17
- reason?: string;
18
- };
19
- export declare enum AuthStateEvent {
20
- Status = "status"
21
- }
22
- export type AuthStateEvents = {
23
- [AuthStateEvent.Status]: (status: AuthStatus) => void;
24
- };
25
- type Sign = (event: StampedEvent) => Promise<SignedEvent>;
26
- export declare class AuthState extends EventEmitter {
27
- readonly socket: Socket;
28
- challenge: string | undefined;
29
- request: string | undefined;
30
- details: string | undefined;
31
- status: AuthStatus;
32
- _unsubscribers: Unsubscriber[];
33
- constructor(socket: Socket);
34
- setStatus(status: AuthStatus): void;
35
- doAuth(sign: Sign): Promise<void>;
36
- authenticate(sign: Sign, signal: AbortSignal): Promise<AuthResult>;
37
- cleanup(): void;
38
- }
39
- export {};
40
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../net/src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAC,WAAW,EAAE,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAGxD,OAAO,EAAC,MAAM,EAA4B,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAA;AAEtC,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,gBAAgB,sBAAsB;IACtC,eAAe,qBAAqB;IACpC,eAAe,qBAAqB;IACpC,SAAS,cAAc;IACvB,EAAE,OAAO;CACV;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,oBAAY,cAAc;IACxB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAA;CACtD,CAAA;AAED,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;AAEzD,qBAAa,SAAU,SAAQ,YAAY;IAO7B,QAAQ,CAAC,MAAM,EAAE,MAAM;IANnC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,aAAkB;IACxB,cAAc,EAAE,YAAY,EAAE,CAAK;gBAEd,MAAM,EAAE,MAAM;IAgDnC,SAAS,CAAC,MAAM,EAAE,UAAU;IAKtB,MAAM,CAAC,IAAI,EAAE,IAAI;IAmCjB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAyCxE,OAAO;CAIR"}
@@ -1,131 +0,0 @@
1
- import EventEmitter from "events";
2
- import { on, poll, call, tryCatch } from "@welshman/lib";
3
- import { makeRelayAuth } from "@welshman/util";
4
- import { isRelayAuth, isClientAuth, isRelayOk } from "./message.js";
5
- import { SocketStatus, SocketEvent } from "./socket.js";
6
- export var AuthStatus;
7
- (function (AuthStatus) {
8
- AuthStatus["None"] = "none";
9
- AuthStatus["Requested"] = "requested";
10
- AuthStatus["PendingSignature"] = "pending_signature";
11
- AuthStatus["DeniedSignature"] = "denied_signature";
12
- AuthStatus["PendingResponse"] = "pending_response";
13
- AuthStatus["Forbidden"] = "forbidden";
14
- AuthStatus["Ok"] = "ok";
15
- })(AuthStatus || (AuthStatus = {}));
16
- export var AuthStateEvent;
17
- (function (AuthStateEvent) {
18
- AuthStateEvent["Status"] = "status";
19
- })(AuthStateEvent || (AuthStateEvent = {}));
20
- export class AuthState extends EventEmitter {
21
- socket;
22
- challenge;
23
- request;
24
- details;
25
- status = AuthStatus.None;
26
- _unsubscribers = [];
27
- constructor(socket) {
28
- super();
29
- this.socket = socket;
30
- this._unsubscribers.push(on(socket, SocketEvent.Receiving, (message) => {
31
- if (isRelayOk(message)) {
32
- const [_, id, ok, details] = message;
33
- if (id === this.request) {
34
- this.details = details;
35
- if (ok) {
36
- this.setStatus(AuthStatus.Ok);
37
- }
38
- else {
39
- this.setStatus(AuthStatus.Forbidden);
40
- }
41
- }
42
- }
43
- if (isRelayAuth(message)) {
44
- const [_, challenge] = message;
45
- // Sometimes relays send the same challenge multiple times, no need to
46
- // respond to it twice
47
- if (challenge !== this.challenge) {
48
- this.challenge = challenge;
49
- this.request = undefined;
50
- this.details = undefined;
51
- this.setStatus(AuthStatus.Requested);
52
- }
53
- }
54
- }), on(socket, SocketEvent.Sending, (message) => {
55
- if (isClientAuth(message)) {
56
- this.setStatus(AuthStatus.PendingResponse);
57
- }
58
- }), on(socket, SocketEvent.Status, (status) => {
59
- if (status === SocketStatus.Closed || status === SocketStatus.Error) {
60
- this.challenge = undefined;
61
- this.request = undefined;
62
- this.details = undefined;
63
- this.setStatus(AuthStatus.None);
64
- }
65
- }));
66
- }
67
- setStatus(status) {
68
- this.status = status;
69
- this.emit(AuthStateEvent.Status, status);
70
- }
71
- async doAuth(sign) {
72
- if (!this.challenge) {
73
- throw new Error("Attempted to authenticate with no challenge");
74
- }
75
- if (this.status !== AuthStatus.Requested) {
76
- throw new Error(`Attempted to authenticate when auth is already ${this.status}`);
77
- }
78
- const challenge = this.challenge;
79
- this.setStatus(AuthStatus.PendingSignature);
80
- const template = makeRelayAuth(this.socket.url, challenge);
81
- const event = await tryCatch(() => sign(template), e => console.error("Failed to sign auth event", e));
82
- if (event) {
83
- // If a new challenge arrived while signing, our signature is stale, so
84
- // abort rather than responding to an obsolete challenge
85
- if (this.challenge !== challenge) {
86
- return;
87
- }
88
- this.request = event.id;
89
- this.socket.send(["AUTH", event]);
90
- }
91
- else {
92
- this.setStatus(AuthStatus.DeniedSignature);
93
- }
94
- }
95
- // Opens the socket and answers the relay's challenge, answering again if an earlier answer
96
- // failed. Resolves once the relay accepts or refuses, or it never challenges, or `signal` aborts.
97
- async authenticate(sign, signal) {
98
- this.socket.attemptToOpen();
99
- await poll({ signal, condition: () => this.socket.status !== SocketStatus.Opening });
100
- // Some relays challenge as soon as the socket opens, and others only once a request needs it.
101
- if (this.socket.status === SocketStatus.Open && !this.challenge) {
102
- await poll({
103
- signal: AbortSignal.any([signal, AbortSignal.timeout(3000)]),
104
- condition: () => Boolean(this.challenge),
105
- });
106
- }
107
- if (this.challenge &&
108
- [AuthStatus.Forbidden, AuthStatus.DeniedSignature].includes(this.status)) {
109
- this.request = undefined;
110
- this.details = undefined;
111
- this.setStatus(AuthStatus.Requested);
112
- }
113
- if (this.status === AuthStatus.Requested) {
114
- this.doAuth(sign);
115
- }
116
- // A socket that closes mid-way drops its challenge, which ends the wait too.
117
- await poll({
118
- signal,
119
- condition: () => !this.challenge ||
120
- [AuthStatus.Ok, AuthStatus.Forbidden, AuthStatus.DeniedSignature].includes(this.status),
121
- });
122
- const ok = this.socket.status === SocketStatus.Open &&
123
- [AuthStatus.None, AuthStatus.Ok].includes(this.status);
124
- return { ok, status: this.status, reason: this.details };
125
- }
126
- cleanup() {
127
- this.removeAllListeners();
128
- this._unsubscribers.forEach(call);
129
- }
130
- }
131
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../net/src/auth.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { AbstractAdapter } from "./adapter.js";
2
- import { Repository } from "./repository.js";
3
- import { Pool } from "./pool.js";
4
- export type AdapterFactory = (url: string, context: NetContext) => AbstractAdapter | undefined;
5
- export type NetContext = {
6
- pool?: Pool;
7
- repository?: Repository;
8
- getAdapter?: AdapterFactory;
9
- };
10
- //# sourceMappingURL=context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../../net/src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAA;AAC1C,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAE9B,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,eAAe,GAAG,SAAS,CAAA;AAE9F,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,UAAU,CAAC,EAAE,cAAc,CAAA;CAC5B,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../net/src/context.ts"],"names":[],"mappings":""}
@@ -1,30 +0,0 @@
1
- import { Filter } from "@welshman/util";
2
- import { AdapterContext } from "./adapter.js";
3
- export declare const COUNT_TIMEOUT = 3000;
4
- export declare const supportsCount: (relay: string) => boolean | undefined;
5
- export type CountOneOptions = {
6
- relay: string;
7
- filters: Filter[];
8
- context?: AdapterContext;
9
- signal?: AbortSignal;
10
- };
11
- /**
12
- * Asks one relay how many events match the given filters (NIP-45).
13
- * @param options - CountOneOptions
14
- * @returns the relay's count, or undefined if it does not support COUNT
15
- */
16
- export declare const countOne: (options: CountOneOptions) => import("@welshman/lib").Deferred<number | undefined, number | undefined>;
17
- export type CountOptions = {
18
- relays: string[];
19
- filters: Filter[];
20
- context?: AdapterContext;
21
- signal?: AbortSignal;
22
- };
23
- /**
24
- * Asks several relays how many events match the given filters (NIP-45). Relays hold
25
- * overlapping subsets of the network, so the highest answer is a lower bound.
26
- * @param options - CountOptions
27
- * @returns the highest count given, or undefined if no relay supports COUNT
28
- */
29
- export declare const count: (options: CountOptions) => Promise<number | undefined>;
30
- //# sourceMappingURL=count.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../../../../net/src/count.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,gBAAgB,CAAA;AASrC,OAAO,EAAa,cAAc,EAAe,MAAM,cAAc,CAAA;AAIrE,eAAO,MAAM,aAAa,OAAO,CAAA;AAgBjC,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,wBAA8B,CAAA;AAEzE,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,eAAe,6EA+EhD,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAU,SAAS,YAAY,gCAMhD,CAAA"}
@@ -1,97 +0,0 @@
1
- import { call, defer, max, on, randomId, removeUndefined, uniq } from "@welshman/lib";
2
- import { ClientMessageType, RelayReasonPrefix, isRelayClosed, isRelayCount, matchReason, } from "./message.js";
3
- import { getAdapter, AdapterEvent } from "./adapter.js";
4
- import { SocketEvent, SocketStatus } from "./socket.js";
5
- import { AuthStatus } from "./auth.js";
6
- export const COUNT_TIMEOUT = 3000;
7
- // Which relays answer a COUNT, read off the wire rather than from NIP-11. A relay that
8
- // refused once is not asked again.
9
- const supportByRelay = new Map();
10
- // A socket that is still connecting or authenticating can be slow for reasons of its own
11
- const isReady = (socket) => socket.status === SocketStatus.Open &&
12
- [AuthStatus.None, AuthStatus.Ok].includes(socket.auth.status);
13
- // Refusals that say nothing about whether the relay can count
14
- const isTransientReason = (reason) => matchReason(RelayReasonPrefix.AuthRequired, reason) ||
15
- matchReason(RelayReasonPrefix.RateLimited, reason);
16
- export const supportsCount = (relay) => supportByRelay.get(relay);
17
- /**
18
- * Asks one relay how many events match the given filters (NIP-45).
19
- * @param options - CountOneOptions
20
- * @returns the relay's count, or undefined if it does not support COUNT
21
- */
22
- export const countOne = (options) => {
23
- const deferred = defer();
24
- if (options.signal?.aborted || supportByRelay.get(options.relay) === false) {
25
- deferred.resolve(undefined);
26
- return deferred;
27
- }
28
- const id = `COUNT-${randomId().slice(0, 8)}`;
29
- const adapter = getAdapter(options.relay, options.context);
30
- let closed = false;
31
- const finish = (result) => {
32
- if (closed)
33
- return;
34
- closed = true;
35
- clearTimeout(timeoutId);
36
- adapter.cleanup();
37
- unsubscribers.map(call);
38
- deferred.resolve(result);
39
- };
40
- // Only the relay's own answer says whether it supports COUNT
41
- const remember = (supported, result) => {
42
- supportByRelay.set(options.relay, supported);
43
- finish(result);
44
- };
45
- const unsubscribers = [
46
- on(adapter, AdapterEvent.Receive, (message) => {
47
- if (isRelayCount(message) && message[1] === id) {
48
- remember(true, message[2].count);
49
- }
50
- if (isRelayClosed(message) && message[1] === id) {
51
- if (isTransientReason(message[2])) {
52
- finish(undefined);
53
- }
54
- else {
55
- remember(false);
56
- }
57
- }
58
- }),
59
- ];
60
- for (const socket of adapter.sockets) {
61
- unsubscribers.push(on(socket, SocketEvent.Status, (status) => {
62
- if (![SocketStatus.Open, SocketStatus.Opening].includes(status)) {
63
- finish(undefined);
64
- }
65
- }));
66
- }
67
- if (options.signal) {
68
- const signal = options.signal;
69
- const abort = () => finish(undefined);
70
- signal.addEventListener("abort", abort);
71
- unsubscribers.push(() => signal.removeEventListener("abort", abort));
72
- }
73
- // A relay that does not know the verb usually says nothing, so silence is a refusal too, as
74
- // long as the relay was ready to answer the whole time
75
- const wasReady = adapter.sockets.every(isReady);
76
- const timeoutId = setTimeout(() => {
77
- if (wasReady && adapter.sockets.every(isReady)) {
78
- remember(false);
79
- }
80
- else {
81
- finish(undefined);
82
- }
83
- }, COUNT_TIMEOUT);
84
- adapter.send([ClientMessageType.Count, id, ...options.filters]);
85
- return deferred;
86
- };
87
- /**
88
- * Asks several relays how many events match the given filters (NIP-45). Relays hold
89
- * overlapping subsets of the network, so the highest answer is a lower bound.
90
- * @param options - CountOptions
91
- * @returns the highest count given, or undefined if no relay supports COUNT
92
- */
93
- export const count = async (options) => {
94
- const counts = removeUndefined(await Promise.all(uniq(options.relays).map(relay => countOne({ ...options, relay }))));
95
- return counts.length > 0 ? max(counts) : undefined;
96
- };
97
- //# sourceMappingURL=count.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"count.js","sourceRoot":"","sources":["../../../../net/src/count.ts"],"names":[],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import { EventEmitter } from "events";
2
- import { SignedEvent, TrustedEvent, Filter } from "@welshman/util";
3
- import { AdapterContext, AbstractAdapter } from "./adapter.js";
4
- export declare enum DifferenceEvent {
5
- Message = "message",
6
- Error = "error",
7
- Close = "close"
8
- }
9
- export type DifferenceEvents = {
10
- [DifferenceEvent.Message]: (payload: {
11
- have: string[];
12
- need: string[];
13
- }, url: string) => void;
14
- [DifferenceEvent.Error]: (error: string, url: string) => void;
15
- [DifferenceEvent.Close]: () => void;
16
- };
17
- export type DifferenceOptions = {
18
- relay: string;
19
- filter: Filter;
20
- events: SignedEvent[];
21
- signal?: AbortSignal;
22
- context?: AdapterContext;
23
- };
24
- export declare class Difference extends EventEmitter {
25
- readonly options: DifferenceOptions;
26
- have: Set<string>;
27
- need: Set<string>;
28
- _id: string;
29
- _unsubscriber: () => void;
30
- _adapter: AbstractAdapter;
31
- _closed: boolean;
32
- _reconcileQueue: Promise<void>;
33
- constructor(options: DifferenceOptions);
34
- close(): void;
35
- }
36
- export type DiffOptions = {
37
- relays: string[];
38
- filters: Filter[];
39
- events: SignedEvent[];
40
- signal?: AbortSignal;
41
- context?: AdapterContext;
42
- };
43
- export type DiffItem = {
44
- relay: string;
45
- have: Set<string>;
46
- need: Set<string>;
47
- };
48
- export declare const diff: ({ relays, filters, ...options }: DiffOptions) => Promise<{
49
- relay: string;
50
- have: string[];
51
- need: string[];
52
- }[]>;
53
- export type PullOptions = DiffOptions;
54
- export declare const pull: ({ context, ...options }: PullOptions) => Promise<TrustedEvent[]>;
55
- export type PushOptions = DiffOptions;
56
- export declare const push: ({ context, events, ...options }: PushOptions) => Promise<void>;
57
- //# sourceMappingURL=diff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../net/src/diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAEnC,OAAO,EAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAC,MAAM,gBAAgB,CAAA;AAQhE,OAAO,EAAa,cAAc,EAAE,eAAe,EAAe,MAAM,cAAc,CAAA;AAKtF,oBAAY,eAAe;IACzB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE;QAAC,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAC,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3F,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7D,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,CAAA;AAED,qBAAa,UAAW,SAAQ,YAAY;IAU9B,QAAQ,CAAC,OAAO,EAAE,iBAAiB;IAT/C,IAAI,cAAoB;IACxB,IAAI,cAAoB;IAExB,GAAG,SAAkC;IACrC,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,EAAE,eAAe,CAAA;IACzB,OAAO,UAAQ;IACf,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,CAAoB;gBAE7B,OAAO,EAAE,iBAAiB;IAoE/C,KAAK;CAUN;AAID,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACjB,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,IAAI,GAAU,iCAA+B,WAAW;;;;IA0CpE,CAAA;AAID,MAAM,MAAM,WAAW,GAAG,WAAW,CAAA;AAMrC,eAAO,MAAM,IAAI,GAAU,yBAAuB,WAAW,4BAmD5D,CAAA;AAID,MAAM,MAAM,WAAW,GAAG,WAAW,CAAA;AAErC,eAAO,MAAM,IAAI,GAAU,iCAA+B,WAAW,kBAkBpE,CAAA"}