@welshman/store 0.5.4 → 0.6.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 (93) hide show
  1. package/dist/lib/src/Tools.d.ts +15 -0
  2. package/dist/lib/src/Tools.d.ts.map +1 -1
  3. package/dist/lib/src/Tools.js +22 -0
  4. package/dist/lib/src/Tools.js.map +1 -1
  5. package/dist/net/src/adapter.d.ts +47 -0
  6. package/dist/net/src/adapter.d.ts.map +1 -0
  7. package/dist/net/src/adapter.js +126 -0
  8. package/dist/net/src/adapter.js.map +1 -0
  9. package/dist/net/src/auth.d.ts +40 -0
  10. package/dist/net/src/auth.d.ts.map +1 -0
  11. package/dist/net/src/auth.js +118 -0
  12. package/dist/net/src/auth.js.map +1 -0
  13. package/dist/net/src/context.d.ts +13 -0
  14. package/dist/net/src/context.d.ts.map +1 -0
  15. package/dist/net/src/context.js +10 -0
  16. package/dist/net/src/context.js.map +1 -0
  17. package/dist/net/src/diff.d.ts +56 -0
  18. package/dist/net/src/diff.d.ts.map +1 -0
  19. package/dist/net/src/diff.js +151 -0
  20. package/dist/net/src/diff.js.map +1 -0
  21. package/dist/net/src/index.d.ts +15 -0
  22. package/dist/net/src/index.d.ts.map +1 -0
  23. package/dist/net/src/index.js +15 -0
  24. package/dist/net/src/index.js.map +1 -0
  25. package/dist/net/src/message.d.ts +60 -0
  26. package/dist/net/src/message.d.ts.map +1 -0
  27. package/dist/net/src/message.js +35 -0
  28. package/dist/net/src/message.js.map +1 -0
  29. package/dist/net/src/negentropy.d.ts +48 -0
  30. package/dist/net/src/negentropy.d.ts.map +1 -0
  31. package/dist/net/src/negentropy.js +535 -0
  32. package/dist/net/src/negentropy.js.map +1 -0
  33. package/dist/net/src/policy.d.ts +41 -0
  34. package/dist/net/src/policy.d.ts.map +1 -0
  35. package/dist/net/src/policy.js +168 -0
  36. package/dist/net/src/policy.js.map +1 -0
  37. package/dist/net/src/pool.d.ts +21 -0
  38. package/dist/net/src/pool.d.ts.map +1 -0
  39. package/dist/net/src/pool.js +67 -0
  40. package/dist/net/src/pool.js.map +1 -0
  41. package/dist/net/src/publish.d.ts +45 -0
  42. package/dist/net/src/publish.d.ts.map +1 -0
  43. package/dist/net/src/publish.js +91 -0
  44. package/dist/net/src/publish.js.map +1 -0
  45. package/dist/{relay → net}/src/repository.d.ts +23 -24
  46. package/dist/net/src/repository.d.ts.map +1 -0
  47. package/dist/{relay → net}/src/repository.js +8 -19
  48. package/dist/net/src/repository.js.map +1 -0
  49. package/dist/net/src/request.d.ts +59 -0
  50. package/dist/net/src/request.d.ts.map +1 -0
  51. package/dist/net/src/request.js +202 -0
  52. package/dist/net/src/request.js.map +1 -0
  53. package/dist/net/src/socket.d.ts +43 -0
  54. package/dist/net/src/socket.d.ts.map +1 -0
  55. package/dist/net/src/socket.js +117 -0
  56. package/dist/net/src/socket.js.map +1 -0
  57. package/dist/net/src/tracker.d.ts +16 -0
  58. package/dist/net/src/tracker.d.ts.map +1 -0
  59. package/dist/net/src/tracker.js +63 -0
  60. package/dist/net/src/tracker.js.map +1 -0
  61. package/dist/net/src/util.d.ts +2 -0
  62. package/dist/net/src/util.d.ts.map +1 -0
  63. package/dist/net/src/util.js +2 -0
  64. package/dist/net/src/util.js.map +1 -0
  65. package/dist/net/src/wrapManager.d.ts +36 -0
  66. package/dist/net/src/wrapManager.d.ts.map +1 -0
  67. package/dist/net/src/wrapManager.js +90 -0
  68. package/dist/net/src/wrapManager.js.map +1 -0
  69. package/dist/store/src/repository.d.ts +1 -1
  70. package/dist/store/src/repository.d.ts.map +1 -1
  71. package/dist/store/src/repository.js.map +1 -1
  72. package/dist/util/src/Events.d.ts +0 -8
  73. package/dist/util/src/Events.d.ts.map +1 -1
  74. package/dist/util/src/Events.js +0 -4
  75. package/dist/util/src/Events.js.map +1 -1
  76. package/dist/util/src/Filters.d.ts.map +1 -1
  77. package/dist/util/src/Filters.js +0 -3
  78. package/dist/util/src/Filters.js.map +1 -1
  79. package/dist/util/src/Kinds.d.ts +5 -0
  80. package/dist/util/src/Kinds.d.ts.map +1 -1
  81. package/dist/util/src/Kinds.js +5 -0
  82. package/dist/util/src/Kinds.js.map +1 -1
  83. package/package.json +4 -4
  84. package/dist/relay/src/index.d.ts +0 -3
  85. package/dist/relay/src/index.d.ts.map +0 -1
  86. package/dist/relay/src/index.js +0 -3
  87. package/dist/relay/src/index.js.map +0 -1
  88. package/dist/relay/src/relay.d.ts +0 -13
  89. package/dist/relay/src/relay.d.ts.map +0 -1
  90. package/dist/relay/src/relay.js +0 -48
  91. package/dist/relay/src/relay.js.map +0 -1
  92. package/dist/relay/src/repository.d.ts.map +0 -1
  93. package/dist/relay/src/repository.js.map +0 -1
@@ -0,0 +1,168 @@
1
+ import { on, ms, nthNe, always, call, sleep, ago, now } from "@welshman/lib";
2
+ import { AUTH_JOIN } from "@welshman/util";
3
+ import { isClientAuth, isClientClose, isClientEvent, isClientReq, isClientNegClose, isRelayOk, isRelayEose, isRelayClosed, } from "./message.js";
4
+ import { SocketStatus, SocketEvent } from "./socket.js";
5
+ import { AuthStatus, AuthStateEvent } from "./auth.js";
6
+ /**
7
+ * Handles auth-related message management:
8
+ * - Defers sending messages when a challenge is pending
9
+ * - Re-enqueues event/req messages once if rejected due to auth-required
10
+ * @param socket - a Socket object
11
+ * @return a cleanup function
12
+ */
13
+ export const socketPolicyAuthBuffer = (socket) => {
14
+ const { None, Ok, DeniedSignature, Forbidden } = AuthStatus;
15
+ const terminalStatuses = [Ok, DeniedSignature, Forbidden];
16
+ let buffer = [];
17
+ const unsubscribers = [
18
+ on(socket, SocketEvent.Sending, (message) => {
19
+ // Always allow sending auth
20
+ if (isClientAuth(message))
21
+ return;
22
+ // Always allow sending join requests
23
+ if (isClientEvent(message) && message[1].kind === AUTH_JOIN)
24
+ return;
25
+ // If the auth flow is complete, no need to buffer anymore
26
+ if (terminalStatuses.includes(socket.auth.status))
27
+ return;
28
+ // If the client is closing a req, remove both from our buffer
29
+ // Otherwise, if auth isn't done, hang on to recent messages in case we need to replay them
30
+ if (isClientClose(message) || isClientNegClose(message)) {
31
+ buffer = buffer.filter(nthNe(1, message[1]));
32
+ }
33
+ else {
34
+ buffer = buffer.slice(-50).concat([message]);
35
+ }
36
+ }),
37
+ on(socket, SocketEvent.Receiving, (message) => {
38
+ // If the client is closing a request during auth, don't tell the caller, we'll retry it
39
+ if (isRelayClosed(message) && message[2]?.startsWith("auth-required:")) {
40
+ socket._recvQueue.remove(message);
41
+ }
42
+ // If we get an eose but we're in the middle of authenticating, wait
43
+ if (isRelayEose(message) && ![None, Ok].includes(socket.auth.status)) {
44
+ socket._recvQueue.remove(message);
45
+ }
46
+ // If the client is rejecting an event during auth, don't tell the caller, we'll retry it
47
+ if (isRelayOk(message) && !message[2] && message[3]?.startsWith("auth-required:")) {
48
+ socket._recvQueue.remove(message);
49
+ }
50
+ }),
51
+ on(socket.auth, AuthStateEvent.Status, (status) => {
52
+ // Send buffered messages when we get successful auth. In any case, clear them out
53
+ // if the auth flow is complete
54
+ if (status === Ok) {
55
+ for (const message of buffer.splice(0)) {
56
+ socket.send(message);
57
+ }
58
+ }
59
+ else if (terminalStatuses.includes(socket.auth.status)) {
60
+ buffer = [];
61
+ }
62
+ }),
63
+ ];
64
+ return () => unsubscribers.forEach(call);
65
+ };
66
+ /**
67
+ * Auto-connects a closed socket when a message is sent unless there was a recent error
68
+ * @param socket - a Socket object
69
+ * @return a cleanup function
70
+ */
71
+ export const socketPolicyConnectOnSend = (socket) => {
72
+ let lastError = 0;
73
+ const unsubscribers = [
74
+ on(socket, SocketEvent.Status, (newStatus) => {
75
+ // Keep track of the most recent error
76
+ if (newStatus === SocketStatus.Error) {
77
+ lastError = now();
78
+ }
79
+ }),
80
+ on(socket, SocketEvent.Sending, (message) => {
81
+ const isClosed = [SocketStatus.Closed, SocketStatus.Error].includes(socket.status);
82
+ // When a new message is sent, make sure the socket is open (unless there was a recent error)
83
+ if (isClosed && lastError < ago(5)) {
84
+ socket.open();
85
+ }
86
+ }),
87
+ ];
88
+ return () => unsubscribers.forEach(call);
89
+ };
90
+ /**
91
+ * Auto-closes inactive sockets, and re-opens sockets with pending messages
92
+ * @param socket - a Socket object
93
+ * @return a cleanup function
94
+ */
95
+ export const socketPolicyCloseInactive = (socket) => {
96
+ const pending = new Map();
97
+ let lastOpen = now();
98
+ let lastActivity = now();
99
+ const unsubscribers = [
100
+ on(socket, SocketEvent.Status, (newStatus) => {
101
+ const isClosed = [SocketStatus.Closed, SocketStatus.Error].includes(socket.status);
102
+ // Keep track of the most recent open
103
+ if (newStatus === SocketStatus.Open) {
104
+ lastOpen = now();
105
+ }
106
+ // If the socket closed and we have no error, reopen it but don't flap
107
+ if (isClosed && pending.size) {
108
+ sleep(Math.max(0, ms(5 - (now() - lastOpen)))).then(() => {
109
+ socket.attemptToOpen();
110
+ for (const message of pending.values()) {
111
+ socket.send(message);
112
+ }
113
+ });
114
+ }
115
+ }),
116
+ on(socket, SocketEvent.Send, (message) => {
117
+ lastActivity = now();
118
+ if (isClientEvent(message)) {
119
+ pending.set(message[1].id, message);
120
+ }
121
+ if (isClientReq(message)) {
122
+ pending.set(message[1], message);
123
+ }
124
+ if (isClientClose(message)) {
125
+ pending.delete(message[1]);
126
+ }
127
+ }),
128
+ on(socket, SocketEvent.Receive, (message) => {
129
+ lastActivity = now();
130
+ if (isRelayClosed(message) || isRelayOk(message)) {
131
+ pending.delete(message[1]);
132
+ }
133
+ }),
134
+ ];
135
+ const interval = setInterval(() => {
136
+ if (socket.status === SocketStatus.Open && lastActivity < ago(30) && pending.size === 0) {
137
+ socket.close();
138
+ }
139
+ }, 3000);
140
+ return () => {
141
+ unsubscribers.forEach(call);
142
+ clearInterval(interval);
143
+ };
144
+ };
145
+ /**
146
+ * Factory function for a policy which may authenticate the socket
147
+ * @param options - SocketPolicyAuthOptions object
148
+ * @return a socket policy
149
+ */
150
+ export const makeSocketPolicyAuth = (options) => (socket) => {
151
+ const shouldAuth = options.shouldAuth || always(true);
152
+ const unsubscribers = [
153
+ on(socket.auth, AuthStateEvent.Status, (status) => {
154
+ if (status === AuthStatus.Requested && shouldAuth(socket)) {
155
+ socket.auth.doAuth(options.sign);
156
+ }
157
+ }),
158
+ ];
159
+ return () => {
160
+ unsubscribers.forEach(call);
161
+ };
162
+ };
163
+ export const defaultSocketPolicies = [
164
+ socketPolicyAuthBuffer,
165
+ socketPolicyConnectOnSend,
166
+ socketPolicyCloseInactive,
167
+ ];
168
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../net/src/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Socket } from "./socket.js";
2
+ export declare const makeSocket: (url: string, policies?: ((socket: Socket) => () => void)[]) => Socket;
3
+ export type PoolSubscription = (socket: Socket) => void;
4
+ export type PoolOptions = {
5
+ makeSocket?: (url: string) => Socket;
6
+ };
7
+ export declare let poolSingleton: Pool;
8
+ export declare class Pool {
9
+ readonly options: PoolOptions;
10
+ _data: Map<string, Socket>;
11
+ _subs: PoolSubscription[];
12
+ static get(): Pool;
13
+ constructor(options?: PoolOptions);
14
+ has(url: string): boolean;
15
+ makeSocket(url: string): Socket;
16
+ get(_url: string): Socket;
17
+ subscribe(cb: PoolSubscription): () => void;
18
+ remove(url: string): void;
19
+ clear(): void;
20
+ }
21
+ //# sourceMappingURL=pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../../../../net/src/pool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAGlC,eAAO,MAAM,UAAU,GAAI,KAAK,MAAM,EAAE,6CAAgC,WAQvE,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;AAEvD,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;CACrC,CAAA;AAED,eAAO,IAAI,aAAa,EAAE,IAAI,CAAA;AAE9B,qBAAa,IAAI;IAYH,QAAQ,CAAC,OAAO,EAAE,WAAW;IAXzC,KAAK,sBAA4B;IACjC,KAAK,EAAE,gBAAgB,EAAE,CAAK;IAE9B,MAAM,CAAC,GAAG;gBAQW,OAAO,GAAE,WAAgB;IAE9C,GAAG,CAAC,GAAG,EAAE,MAAM;IAIf,UAAU,CAAC,GAAG,EAAE,MAAM;IAQtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAmBzB,SAAS,CAAC,EAAE,EAAE,gBAAgB;IAQ9B,MAAM,CAAC,GAAG,EAAE,MAAM;IAUlB,KAAK;CAKN"}
@@ -0,0 +1,67 @@
1
+ import { remove } from "@welshman/lib";
2
+ import { normalizeRelayUrl } from "@welshman/util";
3
+ import { Socket } from "./socket.js";
4
+ import { defaultSocketPolicies } from "./policy.js";
5
+ export const makeSocket = (url, policies = defaultSocketPolicies) => {
6
+ const socket = new Socket(url);
7
+ for (const applyPolicy of policies) {
8
+ applyPolicy(socket);
9
+ }
10
+ return socket;
11
+ };
12
+ export let poolSingleton;
13
+ export class Pool {
14
+ options;
15
+ _data = new Map();
16
+ _subs = [];
17
+ static get() {
18
+ if (!poolSingleton) {
19
+ poolSingleton = new Pool();
20
+ }
21
+ return poolSingleton;
22
+ }
23
+ constructor(options = {}) {
24
+ this.options = options;
25
+ }
26
+ has(url) {
27
+ return this._data.has(normalizeRelayUrl(url));
28
+ }
29
+ makeSocket(url) {
30
+ if (this.options.makeSocket) {
31
+ return this.options.makeSocket(url);
32
+ }
33
+ return makeSocket(url);
34
+ }
35
+ get(_url) {
36
+ const url = normalizeRelayUrl(_url);
37
+ const socket = this._data.get(url);
38
+ if (socket) {
39
+ return socket;
40
+ }
41
+ const newSocket = this.makeSocket(url);
42
+ this._data.set(url, newSocket);
43
+ for (const cb of this._subs) {
44
+ cb(newSocket);
45
+ }
46
+ return newSocket;
47
+ }
48
+ subscribe(cb) {
49
+ this._subs.push(cb);
50
+ return () => {
51
+ this._subs = remove(cb, this._subs);
52
+ };
53
+ }
54
+ remove(url) {
55
+ const socket = this._data.get(url);
56
+ if (socket) {
57
+ socket.cleanup();
58
+ this._data.delete(url);
59
+ }
60
+ }
61
+ clear() {
62
+ for (const url of this._data.keys()) {
63
+ this.remove(url);
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pool.js","sourceRoot":"","sources":["../../../../net/src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAA;AACpC,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,qBAAqB,EAAC,MAAM,aAAa,CAAA;AAEjD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,QAAQ,GAAG,qBAAqB,EAAE,EAAE;IAC1E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IAE9B,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE,CAAC;QACnC,WAAW,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAQD,MAAM,CAAC,IAAI,aAAmB,CAAA;AAE9B,MAAM,OAAO,IAAI;IAYM;IAXrB,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;IACjC,KAAK,GAAuB,EAAE,CAAA;IAE9B,MAAM,CAAC,GAAG;QACR,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,IAAI,IAAI,EAAE,CAAA;QAC5B,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,YAAqB,UAAuB,EAAE;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAElD,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;IAED,GAAG,CAAC,IAAY;QACd,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAA;QACf,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAE9B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,CAAA;QACf,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS,CAAC,EAAoB;QAC5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEnB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAElC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,OAAO,EAAE,CAAA;YAEhB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IAED,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAClB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ import { SignedEvent } from "@welshman/util";
2
+ import { AdapterContext } from "./adapter.js";
3
+ export declare enum PublishStatus {
4
+ Sending = "sending",
5
+ Pending = "pending",
6
+ Success = "success",
7
+ Failure = "failure",
8
+ Timeout = "timeout",
9
+ Aborted = "aborted"
10
+ }
11
+ export type PublishResult = {
12
+ status: PublishStatus;
13
+ detail: string;
14
+ relay: string;
15
+ };
16
+ export type PublishOneOptions = {
17
+ event: SignedEvent;
18
+ relay: string;
19
+ signal?: AbortSignal;
20
+ timeout?: number;
21
+ context?: AdapterContext;
22
+ onSuccess?: (result: PublishResult) => void;
23
+ onFailure?: (result: PublishResult) => void;
24
+ onPending?: (result: PublishResult) => void;
25
+ onTimeout?: (result: PublishResult) => void;
26
+ onAborted?: (result: PublishResult) => void;
27
+ onComplete?: (result: PublishResult) => void;
28
+ };
29
+ export declare const publishOne: (options: PublishOneOptions) => Promise<PublishResult>;
30
+ export type PublishResultsByRelay = Record<string, PublishResult>;
31
+ export type PublishOptions = {
32
+ event: SignedEvent;
33
+ relays: string[];
34
+ signal?: AbortSignal;
35
+ timeout?: number;
36
+ context?: AdapterContext;
37
+ onSuccess?: (result: PublishResult) => void;
38
+ onFailure?: (result: PublishResult) => void;
39
+ onPending?: (result: PublishResult) => void;
40
+ onTimeout?: (result: PublishResult) => void;
41
+ onAborted?: (result: PublishResult) => void;
42
+ onComplete?: (result: PublishResult) => void;
43
+ };
44
+ export declare const publish: (options: PublishOptions) => Promise<PublishResultsByRelay>;
45
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../../net/src/publish.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAA;AAE1C,OAAO,EAAe,cAAc,EAAa,MAAM,cAAc,CAAA;AAErE,oBAAY,aAAa;IACvB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,OAAO,YAAY;CACpB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,aAAa,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,SAAS,iBAAiB,2BA+DjD,CAAA;AAEJ,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAC3C,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;CAC7C,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,SAAS,cAAc,KAAG,OAAO,CAAC,qBAAqB,CAoCpF,CAAA"}
@@ -0,0 +1,91 @@
1
+ import { fromPairs } from "@welshman/lib";
2
+ import { ClientMessageType, isRelayOk } from "./message.js";
3
+ import { AdapterEvent, getAdapter } from "./adapter.js";
4
+ export var PublishStatus;
5
+ (function (PublishStatus) {
6
+ PublishStatus["Sending"] = "sending";
7
+ PublishStatus["Pending"] = "pending";
8
+ PublishStatus["Success"] = "success";
9
+ PublishStatus["Failure"] = "failure";
10
+ PublishStatus["Timeout"] = "timeout";
11
+ PublishStatus["Aborted"] = "aborted";
12
+ })(PublishStatus || (PublishStatus = {}));
13
+ export const publishOne = (options) => new Promise(resolve => {
14
+ const adapter = getAdapter(options.relay, options.context);
15
+ const result = {
16
+ relay: options.relay,
17
+ status: PublishStatus.Pending,
18
+ detail: "",
19
+ };
20
+ options.onPending?.(result);
21
+ const cleanup = () => {
22
+ options.onComplete?.(result);
23
+ adapter.cleanup();
24
+ resolve(result);
25
+ };
26
+ adapter.on(AdapterEvent.Receive, (message, url) => {
27
+ if (isRelayOk(message)) {
28
+ const [_, id, ok, detail] = message;
29
+ if (id !== options.event.id)
30
+ return;
31
+ if (ok) {
32
+ result.status = PublishStatus.Success;
33
+ result.detail = detail;
34
+ options.onSuccess?.(result);
35
+ }
36
+ else {
37
+ result.status = PublishStatus.Failure;
38
+ result.detail = detail;
39
+ options.onFailure?.(result);
40
+ }
41
+ cleanup();
42
+ }
43
+ });
44
+ options.signal?.addEventListener("abort", () => {
45
+ if (result.status === PublishStatus.Pending) {
46
+ result.status = PublishStatus.Aborted;
47
+ result.detail = "aborted";
48
+ options.onAborted?.(result);
49
+ }
50
+ cleanup();
51
+ });
52
+ setTimeout(() => {
53
+ if (result.status === PublishStatus.Pending) {
54
+ result.status = PublishStatus.Timeout;
55
+ result.detail = "timed out";
56
+ options.onTimeout?.(result);
57
+ }
58
+ cleanup();
59
+ }, options.timeout || 10_000);
60
+ adapter.send([ClientMessageType.Event, options.event]);
61
+ });
62
+ export const publish = async (options) => {
63
+ const { event, timeout, signal, context } = options;
64
+ const completed = new Set();
65
+ const relays = new Set(options.relays);
66
+ if (relays.size !== options.relays.length) {
67
+ console.warn("Non-unique relays passed to publish");
68
+ }
69
+ return fromPairs(await Promise.all(options.relays.map(async (relay) => {
70
+ const result = await publishOne({
71
+ event,
72
+ relay,
73
+ signal,
74
+ timeout,
75
+ context,
76
+ onSuccess: options.onSuccess,
77
+ onFailure: options.onFailure,
78
+ onPending: options.onPending,
79
+ onTimeout: options.onTimeout,
80
+ onAborted: options.onAborted,
81
+ onComplete: (result) => {
82
+ completed.add(relay);
83
+ if (completed.size === relays.size) {
84
+ options.onComplete?.(result);
85
+ }
86
+ },
87
+ });
88
+ return [relay, result];
89
+ })));
90
+ };
91
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../net/src/publish.ts"],"names":[],"mappings":"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"}
@@ -1,43 +1,42 @@
1
1
  import { Emitter } from "@welshman/lib";
2
- import { Filter, TrustedEvent, HashedEvent } from "@welshman/util";
2
+ import { Filter, TrustedEvent } from "@welshman/util";
3
3
  export declare const LOCAL_RELAY_URL = "local://welshman.relay/";
4
- export declare let repositorySingleton: Repository<TrustedEvent>;
4
+ export declare let repositorySingleton: Repository;
5
5
  export type RepositoryUpdate = {
6
6
  added: TrustedEvent[];
7
7
  removed: Set<string>;
8
8
  };
9
- export declare class Repository<E extends HashedEvent = TrustedEvent> extends Emitter {
10
- eventsById: Map<string, E>;
11
- eventsByWrap: Map<string, E>;
12
- eventsByAddress: Map<string, E>;
13
- eventsByTag: Map<string, E[]>;
14
- eventsByDay: Map<number, E[]>;
15
- eventsByAuthor: Map<string, E[]>;
16
- eventsByKind: Map<number, E[]>;
9
+ export declare class Repository extends Emitter {
10
+ eventsById: Map<string, TrustedEvent>;
11
+ eventsByAddress: Map<string, TrustedEvent>;
12
+ eventsByTag: Map<string, TrustedEvent[]>;
13
+ eventsByDay: Map<number, TrustedEvent[]>;
14
+ eventsByAuthor: Map<string, TrustedEvent[]>;
15
+ eventsByKind: Map<number, TrustedEvent[]>;
17
16
  deletes: Map<string, number>;
18
17
  expired: Map<string, number>;
19
- static get(): Repository<TrustedEvent>;
18
+ static get(): Repository;
20
19
  constructor();
21
- dump: () => E[];
22
- load: (events: E[], chunkSize?: number) => void;
23
- getEvent: (idOrAddress: string) => E | undefined;
24
- hasEvent: (event: E) => boolean | undefined;
20
+ dump: () => TrustedEvent[];
21
+ load: (events: TrustedEvent[]) => void;
22
+ getEvent: (idOrAddress: string) => TrustedEvent | undefined;
23
+ hasEvent: (event: TrustedEvent) => boolean | undefined;
25
24
  removeEvent: (idOrAddress: string) => void;
26
25
  query: (filters: Filter[], { includeDeleted, includeExpired, shouldSort }?: {
27
26
  includeDeleted?: boolean | undefined;
28
27
  includeExpired?: boolean | undefined;
29
28
  shouldSort?: boolean | undefined;
30
- }) => E[];
31
- publish: (event: E, { shouldNotify }?: {
29
+ }) => TrustedEvent[];
30
+ publish: (event: TrustedEvent, { shouldNotify }?: {
32
31
  shouldNotify?: boolean | undefined;
33
32
  }) => boolean;
34
- isDeletedByAddress: (event: E) => boolean;
35
- isDeletedById: (event: E) => boolean;
36
- isDeleted: (event: E) => boolean;
37
- isExpired: (event: E) => boolean;
38
- _sortEvents: (shouldSort: boolean, events: E[]) => E[];
39
- _updateIndex: <K>(m: Map<K, E[]>, k: K, add?: E, remove?: E) => void;
40
- _getEvents: (ids: Iterable<string>) => E[];
33
+ isDeletedByAddress: (event: TrustedEvent) => boolean;
34
+ isDeletedById: (event: TrustedEvent) => boolean;
35
+ isDeleted: (event: TrustedEvent) => boolean;
36
+ isExpired: (event: TrustedEvent) => boolean;
37
+ _sortEvents: (shouldSort: boolean, events: TrustedEvent[]) => TrustedEvent[];
38
+ _updateIndex: <K>(m: Map<K, TrustedEvent[]>, k: K, add?: TrustedEvent, remove?: TrustedEvent) => void;
39
+ _getEvents: (ids: Iterable<string>) => TrustedEvent[];
41
40
  _applyIdsFilter: (filter: Filter) => {
42
41
  filter: Filter;
43
42
  ids: Set<string>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../../../net/src/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,OAAO,EAAsD,MAAM,eAAe,CAAA;AAC/F,OAAO,EAML,MAAM,EACN,YAAY,EACb,MAAM,gBAAgB,CAAA;AAEvB,eAAO,MAAM,eAAe,4BAA4B,CAAA;AAIxD,eAAO,IAAI,mBAAmB,EAAE,UAAU,CAAA;AAE1C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAA;IACrB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACrB,CAAA;AAED,qBAAa,UAAW,SAAQ,OAAO;IACrC,UAAU,4BAAkC;IAC5C,eAAe,4BAAkC;IACjD,WAAW,8BAAoC;IAC/C,WAAW,8BAAoC;IAC/C,cAAc,8BAAoC;IAClD,YAAY,8BAAoC;IAChD,OAAO,sBAA4B;IACnC,OAAO,sBAA4B;IAEnC,MAAM,CAAC,GAAG;;IAgBV,IAAI,uBAEH;IAED,IAAI,GAAI,QAAQ,YAAY,EAAE,UA2C7B;IAID,QAAQ,GAAI,aAAa,MAAM,8BAI9B;IAED,QAAQ,GAAI,OAAO,YAAY,yBAI9B;IAED,WAAW,GAAI,aAAa,MAAM,UAmBjC;IAED,KAAK,GACH,SAAS,MAAM,EAAE,EACjB;;;;KAAwE,oBAwCzE;IAED,OAAO,GAAI,OAAO,YAAY,EAAE;;KAA0B,KAAG,OAAO,CA2EnE;IAED,kBAAkB,GAAI,OAAO,YAAY,aACsB;IAE/D,aAAa,GAAI,OAAO,YAAY,aAAyD;IAE7F,SAAS,GAAI,OAAO,YAAY,aAAgE;IAEhG,SAAS,GAAI,OAAO,YAAY,aAI/B;IAID,WAAW,GAAI,YAAY,OAAO,EAAE,QAAQ,YAAY,EAAE,oBACA;IAE1D,YAAY,GAAI,CAAC,EACf,GAAG,GAAG,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EACzB,GAAG,CAAC,EACJ,MAAM,YAAY,EAClB,SAAS,YAAY,UAatB;IAED,UAAU,GAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,oBAYlC;IAED,eAAe,GAAI,QAAQ,MAAM;;;kBAOhC;IAED,mBAAmB,GAAI,QAAQ,MAAM;;;kBASpC;IAED,gBAAgB,GAAI,QAAQ,MAAM;;;kBAkBjC;IAED,iBAAiB,GAAI,QAAQ,MAAM;;;kBASlC;IAED,gBAAgB,GAAI,QAAQ,MAAM;;;kBAUjC;IAED,eAAe,GAAI,QAAQ,MAAM;;;kBAkBhC;CACF"}
@@ -1,11 +1,10 @@
1
- import { DAY, Emitter, flatten, pluck, sortBy, inc, chunk, uniq, omit, now, range, } from "@welshman/lib";
2
- import { DELETE, EPOCH, matchFilter, isReplaceable, isUnwrappedEvent, getAddress, } from "@welshman/util";
1
+ import { DAY, Emitter, flatten, pluck, sortBy, inc, uniq, omit, now, range } from "@welshman/lib";
2
+ import { DELETE, EPOCH, matchFilter, isReplaceable, getAddress, } from "@welshman/util";
3
3
  export const LOCAL_RELAY_URL = "local://welshman.relay/";
4
4
  const getDay = (ts) => Math.floor(ts / DAY);
5
5
  export let repositorySingleton;
6
6
  export class Repository extends Emitter {
7
7
  eventsById = new Map();
8
- eventsByWrap = new Map();
9
8
  eventsByAddress = new Map();
10
9
  eventsByTag = new Map();
11
10
  eventsByDay = new Map();
@@ -27,10 +26,9 @@ export class Repository extends Emitter {
27
26
  dump = () => {
28
27
  return Array.from(this.eventsById.values());
29
28
  };
30
- load = (events, chunkSize = 1000) => {
29
+ load = (events) => {
31
30
  const stale = new Set(this.eventsById.keys());
32
31
  this.eventsById.clear();
33
- this.eventsByWrap.clear();
34
32
  this.eventsByAddress.clear();
35
33
  this.eventsByTag.clear();
36
34
  this.eventsByDay.clear();
@@ -39,13 +37,11 @@ export class Repository extends Emitter {
39
37
  this.deletes.clear();
40
38
  this.expired.clear();
41
39
  const added = [];
42
- for (const eventsChunk of chunk(chunkSize, events)) {
43
- for (const event of eventsChunk) {
44
- if (this.publish(event, { shouldNotify: false })) {
45
- // Don't send duplicate events to subscribers
46
- if (!stale.has(event.id)) {
47
- added.push(event);
48
- }
40
+ for (const event of events) {
41
+ if (this.publish(event, { shouldNotify: false })) {
42
+ // Don't send duplicate events to subscribers
43
+ if (!stale.has(event.id)) {
44
+ added.push(event);
49
45
  }
50
46
  }
51
47
  }
@@ -80,9 +76,6 @@ export class Repository extends Emitter {
80
76
  const event = this.getEvent(idOrAddress);
81
77
  if (event) {
82
78
  this.eventsById.delete(event.id);
83
- if (isUnwrappedEvent(event)) {
84
- this.eventsByWrap.delete(event.wrap.id);
85
- }
86
79
  this.eventsByAddress.delete(getAddress(event));
87
80
  for (const [k, v] of event.tags) {
88
81
  if (k.length === 1) {
@@ -155,10 +148,6 @@ export class Repository extends Emitter {
155
148
  if (isReplaceable(event)) {
156
149
  this.eventsByAddress.set(address, event);
157
150
  }
158
- // Save wrapper index
159
- if (isUnwrappedEvent(event)) {
160
- this.eventsByWrap.set(event.wrap.id, event);
161
- }
162
151
  // Update our timestamp and author indexes
163
152
  this._updateIndex(this.eventsByDay, getDay(event.created_at), event, duplicate);
164
153
  this._updateIndex(this.eventsByAuthor, event.pubkey, event, duplicate);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../net/src/repository.ts"],"names":[],"mappings":"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"}