@vforsh/argus-core 0.1.2 → 0.1.4

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 (90) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/auth/cookies.d.ts +11 -0
  3. package/dist/auth/cookies.d.ts.map +1 -0
  4. package/dist/auth/cookies.js +33 -0
  5. package/dist/auth/cookies.js.map +1 -0
  6. package/dist/index.d.ts +4 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/logs/previewStringify.d.ts +11 -0
  11. package/dist/logs/previewStringify.d.ts.map +1 -0
  12. package/dist/logs/previewStringify.js +158 -0
  13. package/dist/logs/previewStringify.js.map +1 -0
  14. package/dist/protocol/http/auth.d.ts +20 -0
  15. package/dist/protocol/http/auth.d.ts.map +1 -0
  16. package/dist/protocol/http/auth.js +2 -0
  17. package/dist/protocol/http/auth.js.map +1 -0
  18. package/dist/protocol/http/code.d.ts +59 -0
  19. package/dist/protocol/http/code.d.ts.map +1 -0
  20. package/dist/protocol/http/code.js +2 -0
  21. package/dist/protocol/http/code.js.map +1 -0
  22. package/dist/protocol/http/dom.d.ts +392 -0
  23. package/dist/protocol/http/dom.d.ts.map +1 -0
  24. package/dist/protocol/http/dom.js +2 -0
  25. package/dist/protocol/http/dom.js.map +1 -0
  26. package/dist/protocol/http/emulation.d.ts +92 -0
  27. package/dist/protocol/http/emulation.d.ts.map +1 -0
  28. package/dist/protocol/http/emulation.js +2 -0
  29. package/dist/protocol/http/emulation.js.map +1 -0
  30. package/dist/protocol/http/errors.d.ts +9 -0
  31. package/dist/protocol/http/errors.d.ts.map +1 -0
  32. package/dist/protocol/http/errors.js +2 -0
  33. package/dist/protocol/http/errors.js.map +1 -0
  34. package/dist/protocol/http/eval.d.ts +23 -0
  35. package/dist/protocol/http/eval.d.ts.map +1 -0
  36. package/dist/protocol/http/eval.js +2 -0
  37. package/dist/protocol/http/eval.js.map +1 -0
  38. package/dist/protocol/http/logs.d.ts +15 -0
  39. package/dist/protocol/http/logs.d.ts.map +1 -0
  40. package/dist/protocol/http/logs.js +2 -0
  41. package/dist/protocol/http/logs.js.map +1 -0
  42. package/dist/protocol/http/net.d.ts +29 -0
  43. package/dist/protocol/http/net.d.ts.map +1 -0
  44. package/dist/protocol/http/net.js +2 -0
  45. package/dist/protocol/http/net.js.map +1 -0
  46. package/dist/protocol/http/screenshot.d.ts +13 -0
  47. package/dist/protocol/http/screenshot.d.ts.map +1 -0
  48. package/dist/protocol/http/screenshot.js +2 -0
  49. package/dist/protocol/http/screenshot.js.map +1 -0
  50. package/dist/protocol/http/snapshot.d.ts +40 -0
  51. package/dist/protocol/http/snapshot.d.ts.map +1 -0
  52. package/dist/protocol/http/snapshot.js +2 -0
  53. package/dist/protocol/http/snapshot.js.map +1 -0
  54. package/dist/protocol/http/status.d.ts +38 -0
  55. package/dist/protocol/http/status.d.ts.map +1 -0
  56. package/dist/protocol/http/status.js +2 -0
  57. package/dist/protocol/http/status.js.map +1 -0
  58. package/dist/protocol/http/storage.d.ts +46 -0
  59. package/dist/protocol/http/storage.d.ts.map +1 -0
  60. package/dist/protocol/http/storage.js +2 -0
  61. package/dist/protocol/http/storage.js.map +1 -0
  62. package/dist/protocol/http/throttle.d.ts +48 -0
  63. package/dist/protocol/http/throttle.d.ts.map +1 -0
  64. package/dist/protocol/http/throttle.js +2 -0
  65. package/dist/protocol/http/throttle.js.map +1 -0
  66. package/dist/protocol/http/trace.d.ts +27 -0
  67. package/dist/protocol/http/trace.d.ts.map +1 -0
  68. package/dist/protocol/http/trace.js +2 -0
  69. package/dist/protocol/http/trace.js.map +1 -0
  70. package/dist/protocol/http.d.ts +14 -41
  71. package/dist/protocol/http.d.ts.map +1 -1
  72. package/dist/protocol/version.d.ts +5 -0
  73. package/dist/protocol/version.d.ts.map +1 -0
  74. package/dist/protocol/version.js +3 -0
  75. package/dist/protocol/version.js.map +1 -0
  76. package/dist/registry/lock.d.ts +7 -0
  77. package/dist/registry/lock.d.ts.map +1 -0
  78. package/dist/registry/lock.js +87 -0
  79. package/dist/registry/lock.js.map +1 -0
  80. package/dist/registry/registry.d.ts +6 -0
  81. package/dist/registry/registry.d.ts.map +1 -1
  82. package/dist/registry/registry.js +16 -0
  83. package/dist/registry/registry.js.map +1 -1
  84. package/dist/registry/types.d.ts +26 -2
  85. package/dist/registry/types.d.ts.map +1 -1
  86. package/dist/textPattern.d.ts +23 -0
  87. package/dist/textPattern.d.ts.map +1 -0
  88. package/dist/textPattern.js +48 -0
  89. package/dist/textPattern.js.map +1 -0
  90. package/package.json +7 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/protocol/http/logs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ /** Network request summary captured from CDP. */
2
+ export type NetworkRequestSummary = {
3
+ id: number;
4
+ ts: number;
5
+ requestId: string;
6
+ url: string;
7
+ method: string;
8
+ /** Captured auth-related request headers with sensitive values redacted. */
9
+ requestHeaders?: Record<string, string>;
10
+ resourceType: string | null;
11
+ status: number | null;
12
+ encodedDataLength: number | null;
13
+ errorText: string | null;
14
+ durationMs: number | null;
15
+ };
16
+ /** Response payload for GET /net. */
17
+ export type NetResponse = {
18
+ ok: true;
19
+ requests: NetworkRequestSummary[];
20
+ nextAfter: number;
21
+ };
22
+ /** Response payload for GET /net/tail. */
23
+ export type NetTailResponse = {
24
+ ok: true;
25
+ requests: NetworkRequestSummary[];
26
+ nextAfter: number;
27
+ timedOut: boolean;
28
+ };
29
+ //# sourceMappingURL=net.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/net.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,MAAM,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAEzB,CAAA;AAED,qCAAqC;AACrC,MAAM,MAAM,WAAW,GAAG;IACzB,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,qBAAqB,EAAE,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GAAG;IAC7B,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,qBAAqB,EAAE,CAAA;IACjC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../../../src/protocol/http/net.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ /** Request payload for POST /screenshot. */
2
+ export type ScreenshotRequest = {
3
+ outFile?: string;
4
+ selector?: string;
5
+ format?: 'png';
6
+ };
7
+ /** Response payload for POST /screenshot. */
8
+ export type ScreenshotResponse = {
9
+ ok: true;
10
+ outFile: string;
11
+ clipped: boolean;
12
+ };
13
+ //# sourceMappingURL=screenshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,KAAK,CAAA;CACd,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAA;IACR,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;CAChB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=screenshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/protocol/http/screenshot.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * A node in the accessibility tree.
3
+ * Reconstructed from CDP's flat AXNode array into a nested structure.
4
+ */
5
+ export type AXTreeNode = {
6
+ /** Accessibility role (e.g. "button", "textbox", "heading", "link"). */
7
+ role: string;
8
+ /** Accessible name (visible label or aria-label). */
9
+ name: string;
10
+ /** Current value for inputs/selects/sliders. */
11
+ value?: string;
12
+ /** Relevant state properties. */
13
+ properties?: Record<string, string | number | boolean>;
14
+ /** Child nodes in the accessibility tree. */
15
+ children?: AXTreeNode[];
16
+ };
17
+ /**
18
+ * Request payload for POST /snapshot.
19
+ */
20
+ export type SnapshotRequest = {
21
+ /** CSS selector to scope the snapshot to a DOM subtree. */
22
+ selector?: string;
23
+ /** Max depth to traverse. */
24
+ depth?: number;
25
+ /** If true, only return interactive elements (buttons, links, inputs, etc.). */
26
+ interactive?: boolean;
27
+ };
28
+ /**
29
+ * Response payload for POST /snapshot.
30
+ */
31
+ export type SnapshotResponse = {
32
+ ok: true;
33
+ /** Root nodes of the accessibility tree. */
34
+ roots: AXTreeNode[];
35
+ /** Total number of nodes before filtering. */
36
+ totalNodes: number;
37
+ /** Number of nodes after filtering. */
38
+ returnedNodes: number;
39
+ };
40
+ //# sourceMappingURL=snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACxB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAA;IACtD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAA;CACvB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI,CAAA;IACR,4CAA4C;IAC5C,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAA;IAClB,uCAAuC;IACvC,aAAa,EAAE,MAAM,CAAA;CACrB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/protocol/http/snapshot.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import type { WatcherRecord } from '../../registry/types.js';
2
+ import type { ArgusProtocolVersion } from '../version.js';
3
+ /** Response payload for GET /status. */
4
+ export type StatusResponse = {
5
+ ok: true;
6
+ id: string;
7
+ pid: number;
8
+ attached: boolean;
9
+ target: {
10
+ title: string | null;
11
+ url: string | null;
12
+ } | null;
13
+ buffer: {
14
+ size: number;
15
+ count: number;
16
+ minId: number | null;
17
+ maxId: number | null;
18
+ };
19
+ watcher: WatcherRecord;
20
+ /** Protocol version advertised by the watcher. */
21
+ protocolVersion?: ArgusProtocolVersion;
22
+ /** Watcher package version (e.g. "0.1.2"). */
23
+ watcherVersion?: string;
24
+ };
25
+ /** Response payload for POST /shutdown. */
26
+ export type ShutdownResponse = {
27
+ ok: true;
28
+ };
29
+ /** Request payload for POST /reload. */
30
+ export type ReloadRequest = {
31
+ /** If true, bypass browser cache. Default: false. */
32
+ ignoreCache?: boolean;
33
+ };
34
+ /** Response payload for POST /reload. */
35
+ export type ReloadResponse = {
36
+ ok: true;
37
+ };
38
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,IAAI,CAAA;IACR,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACpB,CAAA;IACD,OAAO,EAAE,aAAa,CAAA;IACtB,kDAAkD;IAClD,eAAe,CAAC,EAAE,oBAAoB,CAAA;IACtC,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG;IAC9B,EAAE,EAAE,IAAI,CAAA;CACR,CAAA;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC3B,qDAAqD;IACrD,WAAW,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,yCAAyC;AACzC,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,IAAI,CAAA;CACR,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/protocol/http/status.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ /** Request payload for POST /storage/local. */
2
+ export type StorageLocalRequest = {
3
+ /** The operation to perform. */
4
+ action: 'get' | 'set' | 'remove' | 'list' | 'clear';
5
+ /** Key for get/set/remove operations. */
6
+ key?: string;
7
+ /** Value for set operation. */
8
+ value?: string;
9
+ /** Optional origin to validate against page's current origin. */
10
+ origin?: string;
11
+ };
12
+ /** Response payload for POST /storage/local (get). */
13
+ export type StorageLocalGetResponse = {
14
+ ok: true;
15
+ origin: string;
16
+ key: string;
17
+ exists: boolean;
18
+ value: string | null;
19
+ };
20
+ /** Response payload for POST /storage/local (set). */
21
+ export type StorageLocalSetResponse = {
22
+ ok: true;
23
+ origin: string;
24
+ key: string;
25
+ };
26
+ /** Response payload for POST /storage/local (remove). */
27
+ export type StorageLocalRemoveResponse = {
28
+ ok: true;
29
+ origin: string;
30
+ key: string;
31
+ };
32
+ /** Response payload for POST /storage/local (list). */
33
+ export type StorageLocalListResponse = {
34
+ ok: true;
35
+ origin: string;
36
+ keys: string[];
37
+ };
38
+ /** Response payload for POST /storage/local (clear). */
39
+ export type StorageLocalClearResponse = {
40
+ ok: true;
41
+ origin: string;
42
+ cleared: number;
43
+ };
44
+ /** Union of all storage local responses. */
45
+ export type StorageLocalResponse = StorageLocalGetResponse | StorageLocalSetResponse | StorageLocalRemoveResponse | StorageLocalListResponse | StorageLocalClearResponse;
46
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,MAAM,MAAM,mBAAmB,GAAG;IACjC,gCAAgC;IAChC,MAAM,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;IACnD,yCAAyC;IACzC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,sDAAsD;AACtD,MAAM,MAAM,uBAAuB,GAAG;IACrC,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,sDAAsD;AACtD,MAAM,MAAM,uBAAuB,GAAG;IACrC,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,0BAA0B,GAAG;IACxC,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACX,CAAA;AAED,uDAAuD;AACvD,MAAM,MAAM,wBAAwB,GAAG;IACtC,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,EAAE,CAAA;CACd,CAAA;AAED,wDAAwD;AACxD,MAAM,MAAM,yBAAyB,GAAG;IACvC,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,oBAAoB,GAC7B,uBAAuB,GACvB,uBAAuB,GACvB,0BAA0B,GAC1B,wBAAwB,GACxB,yBAAyB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/protocol/http/storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * CPU throttle state.
3
+ * Rate 1 = no throttle, 4 = 4x slowdown. Must be >= 1.
4
+ */
5
+ export type ThrottleState = {
6
+ rate: number;
7
+ };
8
+ /** POST /throttle request payload. */
9
+ export type ThrottleRequest = {
10
+ action: 'set';
11
+ rate: number;
12
+ } | {
13
+ action: 'clear';
14
+ };
15
+ /** POST /throttle response for the `set` action. */
16
+ export type ThrottleSetResponse = {
17
+ ok: true;
18
+ attached: boolean;
19
+ applied: boolean;
20
+ state: ThrottleState | null;
21
+ error?: {
22
+ message: string;
23
+ code?: string;
24
+ } | null;
25
+ };
26
+ /** POST /throttle response for the `clear` action. */
27
+ export type ThrottleClearResponse = {
28
+ ok: true;
29
+ attached: boolean;
30
+ applied: boolean;
31
+ state: null;
32
+ error?: {
33
+ message: string;
34
+ code?: string;
35
+ } | null;
36
+ };
37
+ /** GET /throttle response. */
38
+ export type ThrottleStatusResponse = {
39
+ ok: true;
40
+ attached: boolean;
41
+ applied: boolean;
42
+ state: ThrottleState | null;
43
+ lastError?: {
44
+ message: string;
45
+ code?: string;
46
+ } | null;
47
+ };
48
+ //# sourceMappingURL=throttle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/throttle.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAA;AAEnF,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG;IACjC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,sDAAsD;AACtD,MAAM,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,IAAI,CAAA;IACX,KAAK,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACjD,CAAA;AAED,8BAA8B;AAC9B,MAAM,MAAM,sBAAsB,GAAG;IACpC,EAAE,EAAE,IAAI,CAAA;IACR,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,aAAa,GAAG,IAAI,CAAA;IAC3B,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACrD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=throttle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/protocol/http/throttle.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /** Request payload for POST /trace/start. */
2
+ export type TraceStartRequest = {
3
+ outFile?: string;
4
+ categories?: string;
5
+ options?: string;
6
+ };
7
+ /** Response payload for POST /trace/start. */
8
+ export type TraceStartResponse = {
9
+ ok: true;
10
+ traceId: string;
11
+ sessionName: string;
12
+ outFile: string;
13
+ };
14
+ /** Request payload for POST /trace/stop. */
15
+ export type TraceStopRequest = {
16
+ traceId?: string;
17
+ outFile?: string;
18
+ };
19
+ /** Response payload for POST /trace/stop. */
20
+ export type TraceStopResponse = {
21
+ ok: true;
22
+ sessionName: string;
23
+ outFile: string;
24
+ eventCount: number;
25
+ durationMs: number;
26
+ };
27
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../../src/protocol/http/trace.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,IAAI,CAAA;IACR,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;CACf,CAAA;AAED,4CAA4C;AAC5C,MAAM,MAAM,gBAAgB,GAAG;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,EAAE,EAAE,IAAI,CAAA;IACR,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CAClB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/protocol/http/trace.ts"],"names":[],"mappings":""}
@@ -1,42 +1,15 @@
1
- import type { LogEvent } from './logs.js';
2
- import type { WatcherRecord } from '../registry/types.js';
3
- /** Response payload for GET /status. */
4
- export type StatusResponse = {
5
- ok: true;
6
- id: string;
7
- pid: number;
8
- attached: boolean;
9
- target: {
10
- title: string | null;
11
- url: string | null;
12
- } | null;
13
- buffer: {
14
- size: number;
15
- count: number;
16
- minId: number | null;
17
- maxId: number | null;
18
- };
19
- watcher: WatcherRecord;
20
- };
21
- /** Response payload for GET /logs. */
22
- export type LogsResponse = {
23
- ok: true;
24
- events: LogEvent[];
25
- nextAfter: number;
26
- };
27
- /** Response payload for GET /tail. */
28
- export type TailResponse = {
29
- ok: true;
30
- events: LogEvent[];
31
- nextAfter: number;
32
- timedOut: boolean;
33
- };
34
- /** Standard error payload for API failures. */
35
- export type ErrorResponse = {
36
- ok: false;
37
- error: {
38
- message: string;
39
- code?: string;
40
- };
41
- };
1
+ export type * from './http/status.js';
2
+ export type * from './http/logs.js';
3
+ export type * from './http/net.js';
4
+ export type * from './http/eval.js';
5
+ export type * from './http/trace.js';
6
+ export type * from './http/screenshot.js';
7
+ export type * from './http/snapshot.js';
8
+ export type * from './http/code.js';
9
+ export type * from './http/dom.js';
10
+ export type * from './http/storage.js';
11
+ export type * from './http/auth.js';
12
+ export type * from './http/emulation.js';
13
+ export type * from './http/throttle.js';
14
+ export type * from './http/errors.js';
42
15
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/protocol/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEzD,wCAAwC;AACxC,MAAM,MAAM,cAAc,GAAG;IAC5B,EAAE,EAAE,IAAI,CAAA;IACR,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE;QACP,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAClB,GAAG,IAAI,CAAA;IACR,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KACpB,CAAA;IACD,OAAO,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,sCAAsC;AACtC,MAAM,MAAM,YAAY,GAAG;IAC1B,EAAE,EAAE,IAAI,CAAA;IACR,MAAM,EAAE,QAAQ,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,+CAA+C;AAC/C,MAAM,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACb,CAAA;CACD,CAAA"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/protocol/http.ts"],"names":[],"mappings":"AACA,mBAAmB,kBAAkB,CAAA;AACrC,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,eAAe,CAAA;AAClC,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,iBAAiB,CAAA;AACpC,mBAAmB,sBAAsB,CAAA;AACzC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,eAAe,CAAA;AAClC,mBAAmB,mBAAmB,CAAA;AACtC,mBAAmB,gBAAgB,CAAA;AACnC,mBAAmB,qBAAqB,CAAA;AACxC,mBAAmB,oBAAoB,CAAA;AACvC,mBAAmB,kBAAkB,CAAA"}
@@ -0,0 +1,5 @@
1
+ /** Current protocol version exchanged between CLI and watcher. */
2
+ export declare const ARGUS_PROTOCOL_VERSION: 1;
3
+ /** Type-level alias for the current protocol version. */
4
+ export type ArgusProtocolVersion = typeof ARGUS_PROTOCOL_VERSION;
5
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/protocol/version.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,sBAAsB,EAAG,CAAU,CAAA;AAEhD,yDAAyD;AACzD,MAAM,MAAM,oBAAoB,GAAG,OAAO,sBAAsB,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Current protocol version exchanged between CLI and watcher. */
2
+ export const ARGUS_PROTOCOL_VERSION = 1;
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/protocol/version.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAU,CAAA"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Execute `fn` while holding an exclusive lockfile on the registry.
3
+ * Uses `fs.open(path, 'wx')` for atomic creation; retries with jitter
4
+ * if the lock is held; auto-removes stale locks older than 10 s.
5
+ */
6
+ export declare function withRegistryLock<T>(fn: () => Promise<T>, registryPath?: string): Promise<T>;
7
+ //# sourceMappingURL=lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.d.ts","sourceRoot":"","sources":["../../src/registry/lock.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,SAAoB,GAAG,OAAO,CAAC,CAAC,CAAC,CAS5G"}
@@ -0,0 +1,87 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { getRegistryPath } from './paths.js';
4
+ /** Max time to wait for lock acquisition. */
5
+ const LOCK_TIMEOUT_MS = 2_000;
6
+ /** Lock considered stale if mtime is older than this. */
7
+ const STALE_LOCK_MS = 10_000;
8
+ /** Base delay between retries (ms). Actual delay is randomized. */
9
+ const BASE_RETRY_MS = 25;
10
+ /**
11
+ * Execute `fn` while holding an exclusive lockfile on the registry.
12
+ * Uses `fs.open(path, 'wx')` for atomic creation; retries with jitter
13
+ * if the lock is held; auto-removes stale locks older than 10 s.
14
+ */
15
+ export async function withRegistryLock(fn, registryPath = getRegistryPath()) {
16
+ const lockPath = `${registryPath}.lock`;
17
+ await fs.mkdir(path.dirname(lockPath), { recursive: true });
18
+ await acquireLock(lockPath);
19
+ try {
20
+ return await fn();
21
+ }
22
+ finally {
23
+ await releaseLock(lockPath);
24
+ }
25
+ }
26
+ const acquireLock = async (lockPath) => {
27
+ const deadline = Date.now() + LOCK_TIMEOUT_MS;
28
+ let attempt = 0;
29
+ while (Date.now() < deadline) {
30
+ try {
31
+ const handle = await fs.open(lockPath, 'wx');
32
+ await handle.close();
33
+ return;
34
+ }
35
+ catch (error) {
36
+ if (!isExistError(error)) {
37
+ throw error;
38
+ }
39
+ }
40
+ // Lock exists — check for staleness
41
+ if (await removeStaleLock(lockPath)) {
42
+ continue;
43
+ }
44
+ attempt += 1;
45
+ const jitter = Math.random() * BASE_RETRY_MS;
46
+ const delay = Math.min(BASE_RETRY_MS * attempt, 200) + jitter;
47
+ await sleep(delay);
48
+ }
49
+ // Last-resort: remove potentially stale lock and try once more
50
+ await removeStaleLock(lockPath);
51
+ try {
52
+ const handle = await fs.open(lockPath, 'wx');
53
+ await handle.close();
54
+ return;
55
+ }
56
+ catch {
57
+ throw new Error(`Failed to acquire registry lock after ${LOCK_TIMEOUT_MS}ms: ${lockPath}`);
58
+ }
59
+ };
60
+ const releaseLock = async (lockPath) => {
61
+ try {
62
+ await fs.unlink(lockPath);
63
+ }
64
+ catch {
65
+ // Lock already removed (e.g. stale cleanup by another process) — safe to ignore
66
+ }
67
+ };
68
+ /** Remove lock file if its mtime is older than the staleness threshold. Returns true if removed. */
69
+ const removeStaleLock = async (lockPath) => {
70
+ try {
71
+ const stat = await fs.stat(lockPath);
72
+ if (Date.now() - stat.mtimeMs > STALE_LOCK_MS) {
73
+ await fs.unlink(lockPath);
74
+ return true;
75
+ }
76
+ }
77
+ catch {
78
+ // Lock gone or inaccessible — either way, retry will handle it
79
+ return true;
80
+ }
81
+ return false;
82
+ };
83
+ const isExistError = (error) => {
84
+ return !!error && typeof error === 'object' && 'code' in error && error.code === 'EEXIST';
85
+ };
86
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
87
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/registry/lock.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,12 @@ export declare const createEmptyRegistry: (now?: number) => RegistryV1;
9
9
  export declare const readRegistry: (registryPath?: string) => Promise<RegistryReadResult>;
10
10
  /** Write registry to disk using atomic replacement. */
11
11
  export declare const writeRegistry: (registry: RegistryV1, registryPath?: string) => Promise<void>;
12
+ /**
13
+ * Atomically read-modify-write the registry under an exclusive lock.
14
+ * The `updater` receives the current registry and must return the next state.
15
+ * Returns the registry after the update has been persisted.
16
+ */
17
+ export declare const updateRegistry: (updater: (registry: RegistryV1) => RegistryV1, registryPath?: string) => Promise<RegistryV1>;
12
18
  /** Return registry watchers as a list. */
13
19
  export declare const listWatchers: (registry: RegistryV1) => WatcherRecord[];
14
20
  /** Add or update a watcher entry. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/E,uCAAuC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,yCAAyC;AACzC,eAAO,MAAM,cAAc,QAAS,CAAA;AAEpC,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,GAAI,YAAgB,KAAG,UAIrD,CAAA;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,GAAU,qBAAgC,KAAG,OAAO,CAAC,kBAAkB,CA4B/F,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,aAAa,GAAU,UAAU,UAAU,EAAE,qBAAgC,KAAG,OAAO,CAAC,IAAI,CAIxG,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,UAAU,UAAU,KAAG,aAAa,EAAsC,CAAA;AAEvG,qCAAqC;AACrC,eAAO,MAAM,eAAe,GAAI,UAAU,UAAU,EAAE,SAAS,aAAa,EAAE,YAAgB,KAAG,UAUhG,CAAA;AAED,oCAAoC;AACpC,eAAO,MAAM,kBAAkB,GAAI,UAAU,UAAU,EAAE,IAAI,MAAM,EAAE,YAAgB,KAAG,UAavF,CAAA;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,GAC9B,UAAU,UAAU,EACpB,YAAgB,EAChB,cAAsB,KACpB;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAwB9C,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/E,uCAAuC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAA;AAEjC,yCAAyC;AACzC,eAAO,MAAM,cAAc,QAAS,CAAA;AAEpC,4CAA4C;AAC5C,eAAO,MAAM,mBAAmB,GAAI,YAAgB,KAAG,UAIrD,CAAA;AAEF,kEAAkE;AAClE,eAAO,MAAM,YAAY,GAAU,qBAAgC,KAAG,OAAO,CAAC,kBAAkB,CA4B/F,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,aAAa,GAAU,UAAU,UAAU,EAAE,qBAAgC,KAAG,OAAO,CAAC,IAAI,CAIxG,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS,CAAC,QAAQ,EAAE,UAAU,KAAK,UAAU,EAAE,qBAAgC,KAAG,OAAO,CAAC,UAAU,CASxI,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,YAAY,GAAI,UAAU,UAAU,KAAG,aAAa,EAAsC,CAAA;AAEvG,qCAAqC;AACrC,eAAO,MAAM,eAAe,GAAI,UAAU,UAAU,EAAE,SAAS,aAAa,EAAE,YAAgB,KAAG,UAUhG,CAAA;AAED,oCAAoC;AACpC,eAAO,MAAM,kBAAkB,GAAI,UAAU,UAAU,EAAE,IAAI,MAAM,EAAE,YAAgB,KAAG,UAavF,CAAA;AAED,mDAAmD;AACnD,eAAO,MAAM,kBAAkB,GAC9B,UAAU,UAAU,EACpB,YAAgB,EAChB,cAAsB,KACpB;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAwB9C,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
+ import { withRegistryLock } from './lock.js';
3
4
  import { getRegistryPath } from './paths.js';
4
5
  /** Current registry schema version. */
5
6
  export const REGISTRY_VERSION = 1;
@@ -45,6 +46,21 @@ export const writeRegistry = async (registry, registryPath = getRegistryPath())
45
46
  await fs.mkdir(dir, { recursive: true });
46
47
  await atomicWrite(registryPath, JSON.stringify(registry, null, 2));
47
48
  };
49
+ /**
50
+ * Atomically read-modify-write the registry under an exclusive lock.
51
+ * The `updater` receives the current registry and must return the next state.
52
+ * Returns the registry after the update has been persisted.
53
+ */
54
+ export const updateRegistry = async (updater, registryPath = getRegistryPath()) => {
55
+ return withRegistryLock(async () => {
56
+ const { registry } = await readRegistry(registryPath);
57
+ const next = updater(registry);
58
+ if (next !== registry) {
59
+ await writeRegistry(next, registryPath);
60
+ }
61
+ return next;
62
+ }, registryPath);
63
+ };
48
64
  /** Return registry watchers as a list. */
49
65
  export const listWatchers = (registry) => Object.values(registry.watchers);
50
66
  /** Add or update a watcher entry. */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAG5C,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAEjC,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAA;AAEpC,4CAA4C;AAC5C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAc,EAAE,CAAC,CAAC;IACrE,OAAO,EAAE,gBAAgB;IACzB,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,EAAE;CACZ,CAAC,CAAA;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,YAAY,GAAG,eAAe,EAAE,EAA+B,EAAE;IACnG,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,GAAG,GAAkB,IAAI,CAAA;IAE7B,IAAI,CAAC;QACJ,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;YACnE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAA;QACrD,CAAC;QACD,MAAM,KAAK,CAAA;IACZ,CAAC;IAED,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACR,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAA;QACpE,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAA;IACrD,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;QAC3E,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE,QAAQ,EAAE,CAAA;IACrD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AACtC,CAAC,CAAA;AAED,uDAAuD;AACvD,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,QAAoB,EAAE,YAAY,GAAG,eAAe,EAAE,EAAiB,EAAE;IAC5G,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IACtC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAoB,EAAmB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAEvG,qCAAqC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAoB,EAAE,OAAsB,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAc,EAAE;IAC7G,MAAM,IAAI,GAAe;QACxB,GAAG,QAAQ;QACX,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE;YACT,GAAG,QAAQ,CAAC,QAAQ;YACpB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,OAAO;SACrB;KACD,CAAA;IACD,OAAO,IAAI,CAAA;AACZ,CAAC,CAAA;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAoB,EAAE,EAAU,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAc,EAAE;IACpG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAA;IAChB,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;IACzC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAA;IAEnB,OAAO;QACN,GAAG,QAAQ;QACX,SAAS,EAAE,GAAG;QACd,QAAQ;KACR,CAAA;AACF,CAAC,CAAA;AAED,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CACjC,QAAoB,EACpB,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAChB,KAAK,GAAG,cAAc,EAC2B,EAAE;IACnD,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAkC,EAAE,CAAA;IAElD,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,IAAI,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACnB,SAAQ;QACT,CAAC;QACD,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAA;IACvB,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;IAChC,CAAC;IAED,OAAO;QACN,QAAQ,EAAE;YACT,GAAG,QAAQ;YACX,SAAS,EAAE,GAAG;YACd,QAAQ;SACR;QACD,UAAU;KACV,CAAA;AACF,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,KAAK,EAAE,QAAgB,EAAE,QAAgB,EAAiB,EAAE;IAC/E,MAAM,OAAO,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IAC9D,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE7C,IAAI,CAAC;QACJ,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAA;QACZ,CAAC;QACD,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACtC,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACnC,CAAC;AACF,CAAC,CAAA;AAED,MAAM,cAAc,GAAG,CAAC,KAAc,EAAkC,EAAE;IACzE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,KAA8B,CAAA;IAC1C,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAA;AACrD,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAAkC,EAAE;IAC7E,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,GAAG,GAAG,KAA8B,CAAA;IAC1C,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC7B,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAc,EAAuB,EAAE;IAC5D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,KAAmB,CAAA;IAClC,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;QACzC,OAAO,KAAK,CAAA;IACb,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAA;IACb,CAAC;IAED,OAAO,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAA;AAC5C,CAAC,CAAA"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"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"}