@blackglory/estore-js 0.2.4 → 0.4.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/README.md +26 -221
  2. package/lib/contract.d.ts +16 -0
  3. package/lib/contract.js +2 -0
  4. package/lib/contract.js.map +1 -0
  5. package/lib/estore-client.d.ts +27 -0
  6. package/lib/estore-client.js +62 -0
  7. package/lib/estore-client.js.map +1 -0
  8. package/lib/index.d.ts +1 -0
  9. package/lib/index.js +2 -0
  10. package/lib/index.js.map +1 -0
  11. package/lib/utils/rpc-client.browser.d.ts +8 -0
  12. package/lib/utils/rpc-client.browser.js +24 -0
  13. package/lib/utils/rpc-client.browser.js.map +1 -0
  14. package/lib/utils/rpc-client.d.ts +8 -0
  15. package/lib/utils/rpc-client.js +25 -0
  16. package/lib/utils/rpc-client.js.map +1 -0
  17. package/package.json +47 -32
  18. package/lib/es2015/client.d.ts +0 -41
  19. package/lib/es2015/client.js +0 -139
  20. package/lib/es2015/client.js.map +0 -1
  21. package/lib/es2015/index.d.ts +0 -2
  22. package/lib/es2015/index.js +0 -15
  23. package/lib/es2015/index.js.map +0 -1
  24. package/lib/es2015/manager/base.d.ts +0 -13
  25. package/lib/es2015/manager/base.js +0 -26
  26. package/lib/es2015/manager/base.js.map +0 -1
  27. package/lib/es2015/manager/blacklist-manager.d.ts +0 -6
  28. package/lib/es2015/manager/blacklist-manager.js +0 -41
  29. package/lib/es2015/manager/blacklist-manager.js.map +0 -1
  30. package/lib/es2015/manager/index.d.ts +0 -20
  31. package/lib/es2015/manager/index.js +0 -20
  32. package/lib/es2015/manager/index.js.map +0 -1
  33. package/lib/es2015/manager/json-schema-manager.d.ts +0 -8
  34. package/lib/es2015/manager/json-schema-manager.js +0 -49
  35. package/lib/es2015/manager/json-schema-manager.js.map +0 -1
  36. package/lib/es2015/manager/token-manager.d.ts +0 -18
  37. package/lib/es2015/manager/token-manager.js +0 -73
  38. package/lib/es2015/manager/token-manager.js.map +0 -1
  39. package/lib/es2015/manager/token-policy-manager.d.ts +0 -17
  40. package/lib/es2015/manager/token-policy-manager.js +0 -73
  41. package/lib/es2015/manager/token-policy-manager.js.map +0 -1
  42. package/lib/es2015/manager/whitelist-manager.d.ts +0 -6
  43. package/lib/es2015/manager/whitelist-manager.js +0 -41
  44. package/lib/es2015/manager/whitelist-manager.js.map +0 -1
  45. package/lib/es2015/utils.d.ts +0 -1
  46. package/lib/es2015/utils.js +0 -5
  47. package/lib/es2015/utils.js.map +0 -1
  48. package/lib/es2018/client.d.ts +0 -41
  49. package/lib/es2018/client.js +0 -110
  50. package/lib/es2018/client.js.map +0 -1
  51. package/lib/es2018/index.d.ts +0 -2
  52. package/lib/es2018/index.js +0 -15
  53. package/lib/es2018/index.js.map +0 -1
  54. package/lib/es2018/manager/base.d.ts +0 -13
  55. package/lib/es2018/manager/base.js +0 -26
  56. package/lib/es2018/manager/base.js.map +0 -1
  57. package/lib/es2018/manager/blacklist-manager.d.ts +0 -6
  58. package/lib/es2018/manager/blacklist-manager.js +0 -26
  59. package/lib/es2018/manager/blacklist-manager.js.map +0 -1
  60. package/lib/es2018/manager/index.d.ts +0 -20
  61. package/lib/es2018/manager/index.js +0 -20
  62. package/lib/es2018/manager/index.js.map +0 -1
  63. package/lib/es2018/manager/json-schema-manager.d.ts +0 -8
  64. package/lib/es2018/manager/json-schema-manager.js +0 -32
  65. package/lib/es2018/manager/json-schema-manager.js.map +0 -1
  66. package/lib/es2018/manager/token-manager.d.ts +0 -18
  67. package/lib/es2018/manager/token-manager.js +0 -48
  68. package/lib/es2018/manager/token-manager.js.map +0 -1
  69. package/lib/es2018/manager/token-policy-manager.d.ts +0 -17
  70. package/lib/es2018/manager/token-policy-manager.js +0 -48
  71. package/lib/es2018/manager/token-policy-manager.js.map +0 -1
  72. package/lib/es2018/manager/whitelist-manager.d.ts +0 -6
  73. package/lib/es2018/manager/whitelist-manager.js +0 -26
  74. package/lib/es2018/manager/whitelist-manager.js.map +0 -1
  75. package/lib/es2018/utils.d.ts +0 -1
  76. package/lib/es2018/utils.js +0 -5
  77. package/lib/es2018/utils.js.map +0 -1
package/README.md CHANGED
@@ -9,247 +9,52 @@ yarn add @blackglory/estore-js
9
9
  ## API
10
10
  ### EStoreClient
11
11
  ```ts
12
- interface IInfo {
12
+ interface IStats {
13
13
  namespace: string
14
14
  items: number
15
15
  }
16
16
 
17
17
  interface IEStoreClientOptions {
18
18
  server: string
19
- token?: string
20
- basicAuth?: {
21
- username: string
22
- password: string
23
- }
24
- keepalive?: boolean
25
19
  timeout?: number
26
- }
27
-
28
- interface IEStoreClientRequestOptions {
29
- signal?: AbortSignal
30
- token?: string
31
- keepalive?: boolean
32
- timeout?: number | false
33
- }
34
-
35
- interface IEStoreClientRequestOptionsWithoutToken {
36
- signal?: AbortSignal
37
- keepalive?: boolean
38
- timeout?: number | false
20
+ retryIntervalForReconnection?: number
39
21
  }
40
22
 
41
23
  class EStoreClient {
42
- constructor(options: IEStoreClientOptions)
43
-
44
- append<T>(
45
- namespace: string
46
- , itemId: string
47
- , payload: T
48
- , index?: number
49
- , options: IEStoreClientRequestOptions = {}
50
- ): Promise<void>
24
+ static create(options: IEStoreClientOptions): Promise<EStoreClient>
51
25
 
52
- getEvent<T>(
53
- namespace: string
54
- , itemId: string
55
- , index: number
56
- , options: IEStoreClientRequestOptions = {}
57
- ): Promise<T | undefined>
26
+ close(): Promise<void>
58
27
 
59
- getEvents<T>(
28
+ stats(namespace: string, timeout?: number): Promise<IStats>
29
+ getAllNamespaces(timeout?: number): Promise<string[]>
30
+ getAllItemIds(namespace: string, timeout?: number): Promise<string[]>
31
+ getAllEvents(
60
32
  namespace: string
61
33
  , itemId: string
62
- , options: IEStoreClientRequestOptions = {}
63
- ): Promise<T[] | undefined>
64
-
65
- getSize(
66
- namespace: string
67
- , itemId: string
68
- , options: IEStoreClientRequestOptions = {}
69
- ): Promise<number>
70
-
71
- has(
72
- namespace: string
73
- , itemId: string
74
- , options: IEStoreClientRequestOptions = {}
75
- ): Promise<boolean>
76
-
77
- del(
78
- namespace: string
79
- , itemId: string
80
- , options: IEStoreClientRequestOptions = {}
81
- ): Promise<void>
82
-
83
- clear(
84
- namespace: string
85
- , options: IEStoreClientRequestOptions = {}
86
- ): Promise<void>
87
-
88
- getAllItemIds(
89
- namespace: string
90
- , options: IEStoreClientRequestOptions = {}
34
+ , timeout?: number
91
35
  ): Promise<string[]>
92
36
 
93
- getAllNamespaces(
94
- options: IEStoreClientRequestOptionsWithoutToken = {}
95
- ): Promise<string[]>
37
+ clearItemsByNamespace(namespace: string, timeout?: number): Promise<void>
38
+ removeItem(namespace: string, itemId: string, timeout?: number): Promise<void>
39
+ getItemSize(namespace: string, itemId: string, timeout?: number): Promise<number>
96
40
 
97
- stats(
41
+ /**
42
+ * @param nextEventIndex 如果指定, 则会在eventIndex不等于下一个index时抛出EventIndexConflict错误.
43
+ * @throws {IllegalIndex}
44
+ */
45
+ appendEvent(
98
46
  namespace: string
99
- , options: IEStoreClientRequestOptionsWithoutToken = {}
100
- ): Promise<IInfo>
101
- }
102
- ```
103
-
104
- ### EStoreManager
105
- ```ts
106
- interface IEStoreManagerRequestOptions {
107
- signal?: AbortSignal
108
- keepalive?: boolean
109
- timeout?: number | false
110
- }
111
-
112
- interface IEStoreManagerOptions {
113
- server: string
114
- adminPassword: string
115
- keepalive?: boolean
116
- timeout?: number
117
- }
118
-
119
- class EStoreManager {
120
- constructor(options: IEStoreManagerOptions)
121
-
122
- JsonSchema: JsonSchemaManager
123
- Blacklist: BlacklistManager
124
- Whitelist: WhitelistManager
125
- TokenPolicy: TokenPolicyManager
126
- Token: TokenManager
127
- }
128
- ```
129
-
130
- #### JsonSchemaManager
131
- ```ts
132
- class JsonSchemaManager {
133
- getNamespaces(options: IEStoreManagerRequestOptions = {}): Promise<string[]>
134
- get(namespace: string, options: IEStoreManagerRequestOptions = {}): Promise<unknown>
135
- set(
136
- namespace: string
137
- , schema: Json
138
- , options: IEStoreManagerRequestOptions = {}
139
- ): Promise<void>
140
- remove(
141
- namespace: string
142
- , options: IEStoreManagerRequestOptions = {}
143
- ): Promise<void>
144
- }
145
- ```
146
-
147
- #### BlacklistManager
148
- ```ts
149
- class BlacklistManager {
150
- getNamespaces(options: IEStoreManagerRequestOptions = {}): Promise<string[]>
151
- add(namespace: string, options: IEStoreManagerRequestOptions = {}): Promise<void>
152
- remove(namespace: string, options: IEStoreManagerRequestOptions = {}): Promise<void>
153
- }
154
- ```
155
-
156
- #### WhitelistManager
157
- ```ts
158
- class WhitelistManager {
159
- getNamespaces(options: IEStoreManagerRequestOptions = {}): Promise<string[]>
160
- add(namespace: string, options: IEStoreManagerRequestOptions = {}): Promise<void>
161
- remove(namespace: string, options: IEStoreManagerRequestOptions = {}): Promise<void>
162
- }
163
- ```
164
-
165
- #### TokenPolicyManager
166
- ```ts
167
- interface ITokenPolicy {
168
- writeTokenRequired: boolean | null
169
- readTokenRequired: boolean | null
170
- deleteTokenRequired: boolean | null
171
- }
172
-
173
- class TokenPolicyManager {
174
- getNamespaces(options: IEStoreManagerRequestOptions = {}): Promise<string[]>
175
- get(
176
- namespace: string
177
- , options: IEStoreManagerRequestOptions = {}
178
- ): Promise<ITokenPolicy>
179
- setWriteTokenRequired(
180
- namespace: string
181
- , val: boolean
182
- , options: IEStoreManagerRequestOptions = {}
183
- ): Promise<void>
184
- removeWriteTokenRequired(
185
- namespace: string
186
- , options: IEStoreManagerRequestOptions = {}
187
- ): Promise<void>
188
- setReadTokenRequired(
189
- namespace: string
190
- , val: boolean
191
- , options: IEStoreManagerRequestOptions = {}
192
- ): Promise<void>
193
- removeReadTokenRequired(
194
- namespace: string
195
- , options: IEStoreManagerRequestOptions = {}
196
- ): Promise<void>
197
- setDeleteTokenRequired(
198
- namespace: string
199
- , val: boolean
200
- , options: IEStoreManagerRequestOptions = {}
201
- ): Promise<void>
202
- removeDeleteTokenRequired(
203
- namespace: string
204
- , options: IEStoreManagerRequestOptions = {}
47
+ , itemId: string
48
+ , event: string
49
+ , nextEventIndex?: number
50
+ , timeout?: number
205
51
  ): Promise<void>
206
- }
207
- ```
208
52
 
209
- #### TokenManager
210
- ```ts
211
- interface ITokenInfo {
212
- token: string
213
- write: boolean
214
- read: boolean
215
- delete: boolean
216
- }
217
-
218
- class TokenManager {
219
- getNamespaces(options: IEStoreManagerRequestOptions = {}): Promise<string[]>
220
- getTokens(
221
- namespace: string
222
- , options: IEStoreManagerRequestOptions = {}
223
- ): Promise<ITokenInfo[]>
224
- addWriteToken(
225
- namespace: string
226
- , token: string
227
- , options: IEStoreManagerRequestOptions = {}
228
- ): Promise<void>
229
- removeWriteToken(
53
+ getEvent(
230
54
  namespace: string
231
- , token: string
232
- , options: IEStoreManagerRequestOptions = {}
233
- ): Promise<void>
234
- addReadToken(
235
- namespace: string
236
- , token: string
237
- , options: IEStoreManagerRequestOptions = {}
238
- ): Promise<void>
239
- removeReadToken(
240
- namespace: string
241
- , token: string
242
- , options: IEStoreManagerRequestOptions = {}
243
- ): Promise<void>
244
- addDeleteToken(
245
- namespace: string
246
- , token: string
247
- , options: IEStoreManagerRequestOptions = {}
248
- ): Promise<void>
249
- removeDeleteToken(
250
- namespace: string
251
- , token: string
252
- , options: IEStoreManagerRequestOptions = {}
253
- ): Promise<void>
55
+ , itemId: string
56
+ , index: number
57
+ , timeout?: number
58
+ ): Promise<string | null>
254
59
  }
255
60
  ```
@@ -0,0 +1,16 @@
1
+ export declare const expectedVersion = "^0.3.0";
2
+ export interface IStats {
3
+ namespace: string;
4
+ items: number;
5
+ }
6
+ export interface IAPI {
7
+ stats(namespace: string): IStats;
8
+ getAllNamespaces(): string[];
9
+ getAllItemIds(namespace: string): string[];
10
+ getAllEvents(namespace: string, itemId: string): string[];
11
+ clearItemsByNamespace(namespace: string): null;
12
+ removeItem(namespace: string, itemId: string): null;
13
+ getItemSize(namespace: string, itemId: string): number;
14
+ appendEvent(namespace: string, itemId: string, event: string, nextEventIndex?: number): null;
15
+ getEvent(namespace: string, itemId: string, eventIndex: number): string | null;
16
+ }
@@ -0,0 +1,2 @@
1
+ export const expectedVersion = '^0.3.0';
2
+ //# sourceMappingURL=contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAA"}
@@ -0,0 +1,27 @@
1
+ import { IStats } from './contract.js';
2
+ export { IStats } from './contract.js';
3
+ export interface IEStoreClientOptions {
4
+ server: string;
5
+ timeout?: number;
6
+ retryIntervalForReconnection?: number;
7
+ }
8
+ export declare class EStoreClient {
9
+ private client;
10
+ private batchClient;
11
+ private batchProxy;
12
+ private closeClients;
13
+ private timeout?;
14
+ static create(options: IEStoreClientOptions): Promise<EStoreClient>;
15
+ private constructor();
16
+ close(): Promise<void>;
17
+ stats(namespace: string, timeout?: number): Promise<IStats>;
18
+ getAllNamespaces(timeout?: number): Promise<string[]>;
19
+ getAllItemIds(namespace: string, timeout?: number): Promise<string[]>;
20
+ getAllEvents(namespace: string, itemId: string, timeout?: number): Promise<string[]>;
21
+ clearItemsByNamespace(namespace: string, timeout?: number): Promise<void>;
22
+ removeItem(namespace: string, itemId: string, timeout?: number): Promise<void>;
23
+ getItemSize(namespace: string, itemId: string, timeout?: number): Promise<number>;
24
+ appendEvent(namespace: string, itemId: string, event: string, nextEventIndex?: number, timeout?: number): Promise<void>;
25
+ getEvent(namespace: string, itemId: string, index: number, timeout?: number): Promise<string | null>;
26
+ private withTimeout;
27
+ }
@@ -0,0 +1,62 @@
1
+ import { createRPCClient } from "./utils/rpc-client.js";
2
+ import { timeoutSignal, withAbortSignal } from 'extra-abort';
3
+ import { isUndefined } from '@blackglory/prelude';
4
+ export class EStoreClient {
5
+ constructor(client, batchClient, batchProxy, closeClients, timeout) {
6
+ this.client = client;
7
+ this.batchClient = batchClient;
8
+ this.batchProxy = batchProxy;
9
+ this.closeClients = closeClients;
10
+ this.timeout = timeout;
11
+ }
12
+ static async create(options) {
13
+ const { client, batchClient, proxy, close } = await createRPCClient(options.server);
14
+ return new EStoreClient(client, batchClient, proxy, close, options.timeout);
15
+ }
16
+ async close() {
17
+ await this.closeClients();
18
+ }
19
+ async stats(namespace, timeout) {
20
+ return await this.withTimeout(() => this.client.stats(namespace), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
21
+ }
22
+ async getAllNamespaces(timeout) {
23
+ return await this.withTimeout(() => this.client.getAllNamespaces(), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
24
+ }
25
+ async getAllItemIds(namespace, timeout) {
26
+ return await this.withTimeout(() => this.client.getAllItemIds(namespace), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
27
+ }
28
+ async getAllEvents(namespace, itemId, timeout) {
29
+ return await this.withTimeout(() => this.client.getAllEvents(namespace, itemId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
30
+ }
31
+ async clearItemsByNamespace(namespace, timeout) {
32
+ await this.withTimeout(() => this.client.clearItemsByNamespace(namespace), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
33
+ }
34
+ async removeItem(namespace, itemId, timeout) {
35
+ await this.withTimeout(() => this.client.removeItem(namespace, itemId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
36
+ }
37
+ async getItemSize(namespace, itemId, timeout) {
38
+ return await this.withTimeout(() => this.client.getItemSize(namespace, itemId), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
39
+ }
40
+ async appendEvent(namespace, itemId, event, nextEventIndex, timeout) {
41
+ await this.withTimeout(() => {
42
+ if (isUndefined(nextEventIndex)) {
43
+ return this.client.appendEvent(namespace, itemId, event);
44
+ }
45
+ else {
46
+ return this.client.appendEvent(namespace, itemId, event, nextEventIndex);
47
+ }
48
+ }, timeout !== null && timeout !== void 0 ? timeout : this.timeout);
49
+ }
50
+ async getEvent(namespace, itemId, index, timeout) {
51
+ return await this.withTimeout(() => this.client.getEvent(namespace, itemId, index), timeout !== null && timeout !== void 0 ? timeout : this.timeout);
52
+ }
53
+ async withTimeout(fn, timeout = this.timeout) {
54
+ if (timeout) {
55
+ return await withAbortSignal(timeoutSignal(timeout), fn);
56
+ }
57
+ else {
58
+ return await fn();
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=estore-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estore-client.js","sourceRoot":"","sources":["../src/estore-client.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './estore-client.js';
package/lib/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './estore-client.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { IAPI } from "../contract.js";
2
+ import { ClientProxy, BatchClient, BatchClientProxy } from 'delight-rpc';
3
+ export declare function createRPCClient(url: string, retryIntervalForReconnection?: number): Promise<{
4
+ client: ClientProxy<IAPI>;
5
+ batchClient: BatchClient<IAPI>;
6
+ proxy: BatchClientProxy<IAPI, unknown>;
7
+ close: () => Promise<void>;
8
+ }>;
@@ -0,0 +1,24 @@
1
+ import { expectedVersion } from "../contract.js";
2
+ import { createBatchProxy } from 'delight-rpc';
3
+ import { createClient, createBatchClient } from '@delight-rpc/extra-native-websocket';
4
+ import { ExtraNativeWebSocket, autoReconnect } from 'extra-native-websocket';
5
+ export async function createRPCClient(url, retryIntervalForReconnection) {
6
+ const ws = new ExtraNativeWebSocket(() => new WebSocket(url));
7
+ const cancelAutoReconnect = autoReconnect(ws, retryIntervalForReconnection);
8
+ await ws.connect();
9
+ const [client, closeClient] = createClient(ws, { expectedVersion });
10
+ const [batchClient, closeBatchClient] = createBatchClient(ws, { expectedVersion });
11
+ const proxy = createBatchProxy();
12
+ return {
13
+ client,
14
+ batchClient,
15
+ proxy,
16
+ close: async () => {
17
+ closeClient();
18
+ closeBatchClient();
19
+ cancelAutoReconnect();
20
+ await ws.close();
21
+ }
22
+ };
23
+ }
24
+ //# sourceMappingURL=rpc-client.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.browser.js","sourceRoot":"","sources":["../../src/utils/rpc-client.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,eAAe,EAAE,uBAAwB;AACxD,OAAO,EAA8C,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACrF,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE5E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,4BAAqC;IAOrC,MAAM,EAAE,GAAG,IAAI,oBAAoB,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7D,MAAM,mBAAmB,GAAG,aAAa,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAA;IAC3E,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IAElB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,YAAY,CAAO,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;IACzE,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;IAClF,MAAM,KAAK,GAAG,gBAAgB,EAAQ,CAAA;IAEtC,OAAO;QACL,MAAM;QACN,WAAW;QACX,KAAK;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,WAAW,EAAE,CAAA;YACb,gBAAgB,EAAE,CAAA;YAClB,mBAAmB,EAAE,CAAA;YACrB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { IAPI } from "../contract.js";
2
+ import { ClientProxy, BatchClient, BatchClientProxy } from 'delight-rpc';
3
+ export declare function createRPCClient(url: string, retryIntervalForReconnection?: number): Promise<{
4
+ client: ClientProxy<IAPI>;
5
+ batchClient: BatchClient<IAPI>;
6
+ proxy: BatchClientProxy<IAPI, unknown>;
7
+ close: () => Promise<void>;
8
+ }>;
@@ -0,0 +1,25 @@
1
+ import { expectedVersion } from "../contract.js";
2
+ import { createBatchProxy } from 'delight-rpc';
3
+ import { createClient, createBatchClient } from '@delight-rpc/extra-websocket';
4
+ import { WebSocket } from 'ws';
5
+ import { ExtraWebSocket, autoReconnect } from 'extra-websocket';
6
+ export async function createRPCClient(url, retryIntervalForReconnection) {
7
+ const ws = new ExtraWebSocket(() => new WebSocket(url));
8
+ const cancelAutoReconnect = autoReconnect(ws, retryIntervalForReconnection);
9
+ await ws.connect();
10
+ const [client, closeClient] = createClient(ws, { expectedVersion });
11
+ const [batchClient, closeBatchClient] = createBatchClient(ws, { expectedVersion });
12
+ const proxy = createBatchProxy();
13
+ return {
14
+ client,
15
+ batchClient,
16
+ proxy,
17
+ close: async () => {
18
+ closeClient();
19
+ closeBatchClient();
20
+ cancelAutoReconnect();
21
+ await ws.close();
22
+ }
23
+ };
24
+ }
25
+ //# sourceMappingURL=rpc-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.js","sourceRoot":"","sources":["../../src/utils/rpc-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,eAAe,EAAE,uBAAwB;AACxD,OAAO,EAA8C,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC1F,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAW,EACX,4BAAqC;IAOrC,MAAM,EAAE,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;IACvD,MAAM,mBAAmB,GAAG,aAAa,CAAC,EAAE,EAAE,4BAA4B,CAAC,CAAA;IAC3E,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IAElB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,YAAY,CAAO,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;IACzE,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,GAAG,iBAAiB,CAAC,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,CAAA;IAClF,MAAM,KAAK,GAAG,gBAAgB,EAAQ,CAAA;IAEtC,OAAO;QACL,MAAM;QACN,WAAW;QACX,KAAK;QACL,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,WAAW,EAAE,CAAA;YACb,gBAAgB,EAAE,CAAA;YAClB,mBAAmB,EAAE,CAAA;YACrB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAA;QAClB,CAAC;KACF,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,64 +1,79 @@
1
1
  {
2
2
  "name": "@blackglory/estore-js",
3
- "version": "0.2.4",
3
+ "version": "0.4.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "files": [
7
7
  "lib"
8
8
  ],
9
- "main": "lib/es2018/index.js",
10
- "types": "lib/es2018/index.d.ts",
9
+ "type": "module",
10
+ "main": "lib/index.js",
11
+ "types": "lib/index.d.ts",
12
+ "browser": {
13
+ "./lib/utils/rpc-client.js": "./lib/utils/rpc-client.browser.js"
14
+ },
11
15
  "repository": "git@github.com:BlackGlory/estore-js.git",
12
16
  "author": "BlackGlory <woshenmedoubuzhidao@blackglory.me>",
13
17
  "license": "MIT",
14
18
  "sideEffects": false,
19
+ "engines": {
20
+ "node": ">=16"
21
+ },
15
22
  "scripts": {
16
23
  "prepare": "ts-patch install -s",
17
24
  "lint": "eslint --ext .js,.jsx,.ts,.tsx --quiet src __tests__",
18
- "test": "jest --runInBand --no-cache --config jest.config.js",
19
- "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
20
- "test:coverage": "jest --coverage --config jest.config.js",
25
+ "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --no-cache --config jest.config.cjs",
26
+ "test:debug": "cross-env NODE_OPTIONS=--experimental-vm-modules node --inspect-brk node_modules/.bin/jest --runInBand jest.config.cjs",
27
+ "test:coverage": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --coverage --config jest.config.cjs",
21
28
  "prepublishOnly": "run-s prepare clean build",
22
29
  "clean": "rimraf lib",
23
- "build": "run-p build:*",
24
- "build:es2015": "tsc --project tsconfig.build.json --module commonjs --target es2015 --outDir lib/es2015",
25
- "build:es2018": "tsc --project tsconfig.build.json --module commonjs --target es2018 --outDir lib/es2018",
30
+ "build": "tsc --project tsconfig.build.json",
31
+ "docker:test": "run-s docker:test:clean docker:test:build docker:test:run docker:test:clean",
32
+ "docker:coverage": "run-s docker:test:clean docker:test:build docker:test:coverage docker:test:clean",
33
+ "docker:test:build": "docker-compose --project-name estore-js --file docker-compose.test.yml build",
34
+ "docker:test:run": "docker-compose --project-name estore-js --file docker-compose.test.yml run --rm test",
35
+ "docker:test:clean": "docker-compose --project-name estore-js --file docker-compose.test.yml down",
26
36
  "release": "standard-version"
27
37
  },
28
38
  "husky": {
29
39
  "hooks": {
30
- "pre-commit": "run-s prepare lint test",
40
+ "pre-commit": "run-s prepare lint build docker:test",
31
41
  "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
32
42
  }
33
43
  },
34
44
  "devDependencies": {
35
- "@blackglory/jest-matchers": "^0.2.1",
36
- "@commitlint/cli": "^17.1.2",
37
- "@commitlint/config-conventional": "^17.1.0",
38
- "@types/jest": "^27.4.0",
39
- "@typescript-eslint/eslint-plugin": "^5.10.2",
40
- "@typescript-eslint/parser": "^5.10.2",
41
- "eslint": "^8.8.0",
45
+ "@blackglory/jest-resolver": "^0.3.0",
46
+ "@commitlint/cli": "^17.4.2",
47
+ "@commitlint/config-conventional": "^17.4.2",
48
+ "@types/jest": "^29.4.0",
49
+ "@types/ws": "^8.5.4",
50
+ "@typescript-eslint/eslint-plugin": "^5.49.0",
51
+ "@typescript-eslint/parser": "^5.49.0",
52
+ "cross-env": "^7.0.3",
53
+ "eslint": "^8.33.0",
54
+ "extra-utils": "^5.0.1",
42
55
  "husky": "4",
43
- "jest": "^27.5.0",
44
- "msw": "^0.36.8",
56
+ "jest": "^29.4.1",
57
+ "jest-resolve": "^29.4.1",
45
58
  "npm-run-all": "^4.1.5",
46
59
  "rimraf": "^3.0.2",
47
60
  "standard-version": "^9.3.2",
48
- "ts-jest": "^27.1.3",
49
- "ts-patch": "^2.0.1",
50
- "tslib": "^2.3.1",
51
- "typescript": "^4.5.5",
52
- "typescript-transform-paths": "^3.3.1"
61
+ "ts-jest": "^29.0.5",
62
+ "ts-patch": "^2.1.0",
63
+ "tslib": "^2.5.0",
64
+ "typescript": "4.8",
65
+ "typescript-transform-paths": "^3.4.6"
53
66
  },
54
67
  "dependencies": {
55
- "@blackglory/errors": "^2.1.0",
56
- "@blackglory/http-status": "^1.0.3",
57
- "@blackglory/types": "^1.3.0",
58
- "extra-abort": "^0.1.1",
59
- "extra-fetch": "^1.9.1",
60
- "extra-request": "^4.0.1",
61
- "extra-response": "^0.3.9",
62
- "justypes": "^3.0.0"
68
+ "@blackglory/errors": "^3.0.0",
69
+ "@blackglory/prelude": "^0.3.1",
70
+ "@delight-rpc/extra-native-websocket": "^0.4.0",
71
+ "@delight-rpc/extra-websocket": "^0.4.0",
72
+ "delight-rpc": "^5.0.3",
73
+ "extra-abort": "^0.3.1",
74
+ "extra-native-websocket": "^0.3.1",
75
+ "extra-websocket": "^0.3.1",
76
+ "justypes": "^4.1.0",
77
+ "ws": "^8.12.0"
63
78
  }
64
79
  }
@@ -1,41 +0,0 @@
1
- interface IInfo {
2
- namespace: string;
3
- items: number;
4
- }
5
- export interface IEStoreClientOptions {
6
- server: string;
7
- token?: string;
8
- basicAuth?: {
9
- username: string;
10
- password: string;
11
- };
12
- keepalive?: boolean;
13
- timeout?: number;
14
- }
15
- export interface IEStoreClientRequestOptions {
16
- signal?: AbortSignal;
17
- token?: string;
18
- keepalive?: boolean;
19
- timeout?: number | false;
20
- }
21
- export interface IEStoreClientRequestOptionsWithoutToken {
22
- signal?: AbortSignal;
23
- keepalive?: boolean;
24
- timeout?: number | false;
25
- }
26
- export declare class EStoreClient {
27
- private options;
28
- constructor(options: IEStoreClientOptions);
29
- private getCommonTransformers;
30
- append<T>(namespace: string, itemId: string, payload: T, index?: number, options?: IEStoreClientRequestOptions): Promise<void>;
31
- getEvent<T>(namespace: string, itemId: string, index: number, options?: IEStoreClientRequestOptions): Promise<T | undefined>;
32
- getEvents<T>(namespace: string, itemId: string, options?: IEStoreClientRequestOptions): Promise<T[] | undefined>;
33
- getSize(namespace: string, itemId: string, options?: IEStoreClientRequestOptions): Promise<number>;
34
- has(namespace: string, itemId: string, options?: IEStoreClientRequestOptions): Promise<boolean>;
35
- del(namespace: string, itemId: string, options?: IEStoreClientRequestOptions): Promise<void>;
36
- clear(namespace: string, options?: IEStoreClientRequestOptions): Promise<void>;
37
- getAllItemIds(namespace: string, options?: IEStoreClientRequestOptions): Promise<string[]>;
38
- getAllNamespaces(options?: IEStoreClientRequestOptionsWithoutToken): Promise<string[]>;
39
- stats(namespace: string, options?: IEStoreClientRequestOptionsWithoutToken): Promise<IInfo>;
40
- }
41
- export {};