dreaction-client-core 1.3.0 → 1.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.
package/lib/index.d.ts CHANGED
@@ -8,6 +8,8 @@ export { assertHasStateResponsePlugin, hasStateResponsePlugin, } from './plugins
8
8
  export type { StateResponsePlugin, StateResponseFeatures, } from './plugins/state-responses';
9
9
  export { assertHasIssuePlugin, hasIssuePlugin } from './plugins/issue';
10
10
  export type { IssuePlugin, IssueFeatures } from './plugins/issue';
11
+ export { generateRequestId } from './plugins/api-response';
12
+ export type { ApiResponsePlugin, ApiResponseFeatures } from './plugins/api-response';
11
13
  export { runFPSMeter } from './utils/fps';
12
14
  export { createPluginGuard } from './utils/plugin-guard';
13
15
  import type { InferFeatures } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,MAAM,WAAW,SAAU,SAAQ,aAAa,EAAE,kBAAkB;CAAI"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,aAAa,EACb,wBAAwB,EACxB,gBAAgB,EAChB,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACvE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAGrF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAC,OAAO,WAAW,CAAC,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,MAAM,WAAW,SAAU,SAAQ,aAAa,EAAE,kBAAkB;CAAI"}
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createPluginGuard = exports.runFPSMeter = exports.hasIssuePlugin = exports.assertHasIssuePlugin = exports.hasStateResponsePlugin = exports.assertHasStateResponsePlugin = exports.hasLoggerPlugin = exports.assertHasLoggerPlugin = exports.corePlugins = exports.createClient = exports.DReactionImpl = void 0;
3
+ exports.createPluginGuard = exports.runFPSMeter = exports.generateRequestId = exports.hasIssuePlugin = exports.assertHasIssuePlugin = exports.hasStateResponsePlugin = exports.assertHasStateResponsePlugin = exports.hasLoggerPlugin = exports.assertHasLoggerPlugin = exports.corePlugins = exports.createClient = exports.DReactionImpl = void 0;
4
4
  // Core
5
5
  var core_1 = require("./core");
6
6
  Object.defineProperty(exports, "DReactionImpl", { enumerable: true, get: function () { return core_1.DReactionImpl; } });
@@ -17,6 +17,8 @@ Object.defineProperty(exports, "hasStateResponsePlugin", { enumerable: true, get
17
17
  var issue_1 = require("./plugins/issue");
18
18
  Object.defineProperty(exports, "assertHasIssuePlugin", { enumerable: true, get: function () { return issue_1.assertHasIssuePlugin; } });
19
19
  Object.defineProperty(exports, "hasIssuePlugin", { enumerable: true, get: function () { return issue_1.hasIssuePlugin; } });
20
+ var api_response_1 = require("./plugins/api-response");
21
+ Object.defineProperty(exports, "generateRequestId", { enumerable: true, get: function () { return api_response_1.generateRequestId; } });
20
22
  // Utils
21
23
  var fps_1 = require("./utils/fps");
22
24
  Object.defineProperty(exports, "runFPSMeter", { enumerable: true, get: function () { return fps_1.runFPSMeter; } });
@@ -1,12 +1,23 @@
1
- import type { DReactionCore } from '../types';
1
+ import type { NetworkRequest, NetworkResponse } from 'dreaction-protocol';
2
+ import type { DReactionCore, Plugin } from '../types';
3
+ /**
4
+ * Generates a unique request ID for pairing api.request and api.response events.
5
+ */
6
+ export declare function generateRequestId(): string;
7
+ export interface ApiResponseFeatures {
8
+ apiRequest: (requestId: string, request: NetworkRequest) => void;
9
+ apiResponse: (requestId: string, request: NetworkRequest, response: NetworkResponse, duration: number) => void;
10
+ }
11
+ export type ApiResponsePlugin = Plugin<DReactionCore> & {
12
+ features: ApiResponseFeatures;
13
+ };
2
14
  /**
3
15
  * Sends API request/response information.
4
16
  */
5
17
  declare const apiResponse: () => (dreaction: DReactionCore) => {
6
18
  features: {
7
- apiResponse: (request: {
8
- status: number;
9
- }, response: any, duration: number) => void;
19
+ apiRequest: (requestId: string, request: NetworkRequest) => void;
20
+ apiResponse: (requestId: string, request: NetworkRequest, response: NetworkResponse, duration: number) => void;
10
21
  };
11
22
  };
12
23
  export default apiResponse;
@@ -1 +1 @@
1
- {"version":3,"file":"api-response.d.ts","sourceRoot":"","sources":["../../src/plugins/api-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAU,MAAM,UAAU,CAAC;AAEtD;;GAEG;AACH,QAAA,MAAM,WAAW,oBAAqB,aAAa;;+BAIlC;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,YACjB,GAAG,YACH,MAAM;;CAkBvB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"api-response.d.ts","sourceRoot":"","sources":["../../src/plugins/api-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAItD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAK1C;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,CACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,KACb,IAAI,CAAC;CACX;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG;IACtD,QAAQ,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,WAAW,oBAAqB,aAAa;;gCAGrB,MAAM,WAAW,cAAc;iCAI1C,MAAM,WACR,cAAc,YACb,eAAe,YACf,MAAM;;CAiBvB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,21 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateRequestId = generateRequestId;
4
+ let requestCounter = 0;
5
+ /**
6
+ * Generates a unique request ID for pairing api.request and api.response events.
7
+ */
8
+ function generateRequestId() {
9
+ requestCounter++;
10
+ const timestamp = Date.now();
11
+ const random = Math.random().toString(36).substring(2, 9);
12
+ return `${timestamp}-${requestCounter}-${random}`;
13
+ }
3
14
  /**
4
15
  * Sends API request/response information.
5
16
  */
6
17
  const apiResponse = () => (dreaction) => {
7
18
  return {
8
19
  features: {
9
- apiResponse: (request, response, duration) => {
20
+ apiRequest: (requestId, request) => {
21
+ dreaction.send('api.request', { requestId, request });
22
+ },
23
+ apiResponse: (requestId, request, response, duration) => {
10
24
  const ok = response &&
11
25
  response.status &&
12
26
  typeof response.status === 'number' &&
13
27
  response.status >= 200 &&
14
28
  response.status <= 299;
15
29
  const important = !ok;
16
- dreaction.send('api.response',
17
- // @ts-ignore
18
- { request, response, duration }, important);
30
+ dreaction.send('api.response', { requestId, request, response, duration }, important);
19
31
  },
20
32
  },
21
33
  };
@@ -37,9 +37,8 @@ export declare const corePlugins: (((dreaction: DReactionCore) => {
37
37
  };
38
38
  }) | ((dreaction: DReactionCore) => {
39
39
  features: {
40
- apiResponse: (request: {
41
- status: number;
42
- }, response: any, duration: number) => void;
40
+ apiRequest: (requestId: string, request: import("dreaction-protocol").NetworkRequest) => void;
41
+ apiResponse: (requestId: string, request: import("dreaction-protocol").NetworkRequest, response: import("dreaction-protocol").NetworkResponse, duration: number) => void;
43
42
  };
44
43
  }) | ((dreaction: DReactionCore) => {
45
44
  features: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAS7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAS7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAQkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dreaction-client-core",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "main": "lib/index.js",
@@ -17,7 +17,7 @@
17
17
  "@types/ws": "^8.5.13",
18
18
  "eventemitter-strict": "^1.0.1",
19
19
  "ws": "^8.18.0",
20
- "dreaction-protocol": "1.0.10"
20
+ "dreaction-protocol": "1.0.11"
21
21
  },
22
22
  "devDependencies": {
23
23
  "typescript": "^5.4.5"
package/src/index.ts CHANGED
@@ -29,6 +29,8 @@ export type {
29
29
  } from './plugins/state-responses';
30
30
  export { assertHasIssuePlugin, hasIssuePlugin } from './plugins/issue';
31
31
  export type { IssuePlugin, IssueFeatures } from './plugins/issue';
32
+ export { generateRequestId } from './plugins/api-response';
33
+ export type { ApiResponsePlugin, ApiResponseFeatures } from './plugins/api-response';
32
34
 
33
35
  // Utils
34
36
  export { runFPSMeter } from './utils/fps';
@@ -1,14 +1,48 @@
1
+ import type {
2
+ NetworkRequest,
3
+ NetworkResponse,
4
+ } from 'dreaction-protocol';
1
5
  import type { DReactionCore, Plugin } from '../types';
2
6
 
7
+ let requestCounter = 0;
8
+
9
+ /**
10
+ * Generates a unique request ID for pairing api.request and api.response events.
11
+ */
12
+ export function generateRequestId(): string {
13
+ requestCounter++;
14
+ const timestamp = Date.now();
15
+ const random = Math.random().toString(36).substring(2, 9);
16
+ return `${timestamp}-${requestCounter}-${random}`;
17
+ }
18
+
19
+ export interface ApiResponseFeatures {
20
+ apiRequest: (requestId: string, request: NetworkRequest) => void;
21
+ apiResponse: (
22
+ requestId: string,
23
+ request: NetworkRequest,
24
+ response: NetworkResponse,
25
+ duration: number
26
+ ) => void;
27
+ }
28
+
29
+ export type ApiResponsePlugin = Plugin<DReactionCore> & {
30
+ features: ApiResponseFeatures;
31
+ };
32
+
3
33
  /**
4
34
  * Sends API request/response information.
5
35
  */
6
36
  const apiResponse = () => (dreaction: DReactionCore) => {
7
37
  return {
8
38
  features: {
39
+ apiRequest: (requestId: string, request: NetworkRequest) => {
40
+ dreaction.send('api.request', { requestId, request });
41
+ },
9
42
  apiResponse: (
10
- request: { status: number },
11
- response: any,
43
+ requestId: string,
44
+ request: NetworkRequest,
45
+ response: NetworkResponse,
12
46
  duration: number
13
47
  ) => {
14
48
  const ok =
@@ -20,13 +54,12 @@ const apiResponse = () => (dreaction: DReactionCore) => {
20
54
  const important = !ok;
21
55
  dreaction.send(
22
56
  'api.response',
23
- // @ts-ignore
24
- { request, response, duration },
57
+ { requestId, request, response, duration },
25
58
  important
26
59
  );
27
60
  },
28
61
  },
29
- } satisfies Plugin<DReactionCore>;
62
+ } satisfies ApiResponsePlugin;
30
63
  };
31
64
 
32
65
  export default apiResponse;