@ledgerhq/device-mockserver-client 1.1.0 → 1.3.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 (154) hide show
  1. package/lib/cjs/package.json +34 -24
  2. package/lib/cjs/src/DmkNetworkClient.stub.js +2 -0
  3. package/lib/cjs/src/DmkNetworkClient.stub.js.map +7 -0
  4. package/lib/cjs/src/MockClient.js +1 -1
  5. package/lib/cjs/src/MockClient.js.map +3 -3
  6. package/lib/cjs/src/MockClient.test.js +2 -0
  7. package/lib/cjs/src/MockClient.test.js.map +7 -0
  8. package/lib/cjs/src/index.js +1 -1
  9. package/lib/cjs/src/index.js.map +3 -3
  10. package/lib/cjs/src/model/Auth.js +2 -0
  11. package/lib/cjs/src/model/Auth.js.map +7 -0
  12. package/lib/cjs/src/model/CommandResponse.js +1 -1
  13. package/lib/cjs/src/model/CommandResponse.js.map +3 -3
  14. package/lib/cjs/src/model/Device.js +1 -1
  15. package/lib/cjs/src/model/Device.js.map +3 -3
  16. package/lib/cjs/src/model/Mock.js +1 -1
  17. package/lib/cjs/src/model/Mock.js.map +3 -3
  18. package/lib/cjs/src/model/Session.js +1 -1
  19. package/lib/cjs/src/model/Session.js.map +3 -3
  20. package/lib/cjs/src/model/SessionExport.js +2 -0
  21. package/lib/cjs/src/model/SessionExport.js.map +7 -0
  22. package/lib/cjs/src/model/Speculos.js +2 -0
  23. package/lib/cjs/src/model/Speculos.js.map +7 -0
  24. package/lib/esm/package.json +34 -24
  25. package/lib/esm/src/DmkNetworkClient.stub.js +2 -0
  26. package/lib/esm/src/DmkNetworkClient.stub.js.map +7 -0
  27. package/lib/esm/src/MockClient.js +1 -1
  28. package/lib/esm/src/MockClient.js.map +3 -3
  29. package/lib/esm/src/MockClient.test.js +2 -0
  30. package/lib/esm/src/MockClient.test.js.map +7 -0
  31. package/lib/esm/src/index.js +1 -1
  32. package/lib/esm/src/index.js.map +3 -3
  33. package/lib/esm/src/model/Auth.js +2 -0
  34. package/lib/esm/src/model/Auth.js.map +7 -0
  35. package/lib/esm/src/model/CommandResponse.js +1 -1
  36. package/lib/esm/src/model/CommandResponse.js.map +3 -3
  37. package/lib/esm/src/model/Device.js +1 -1
  38. package/lib/esm/src/model/Device.js.map +3 -3
  39. package/lib/esm/src/model/Mock.js +1 -1
  40. package/lib/esm/src/model/Mock.js.map +3 -3
  41. package/lib/esm/src/model/Session.js +1 -1
  42. package/lib/esm/src/model/Session.js.map +3 -3
  43. package/lib/esm/src/model/SessionExport.js +2 -0
  44. package/lib/esm/src/model/SessionExport.js.map +7 -0
  45. package/lib/esm/src/model/Speculos.js +2 -0
  46. package/lib/esm/src/model/Speculos.js.map +7 -0
  47. package/lib/types/src/DmkNetworkClient.stub.d.ts +24 -0
  48. package/lib/types/src/DmkNetworkClient.stub.d.ts.map +1 -0
  49. package/lib/types/src/MockClient.d.ts +74 -21
  50. package/lib/types/src/MockClient.d.ts.map +1 -1
  51. package/lib/types/src/MockClient.test.d.ts +2 -0
  52. package/lib/types/src/MockClient.test.d.ts.map +1 -0
  53. package/lib/types/src/index.d.ts +8 -4
  54. package/lib/types/src/index.d.ts.map +1 -1
  55. package/lib/types/src/model/Auth.d.ts +41 -0
  56. package/lib/types/src/model/Auth.d.ts.map +1 -0
  57. package/lib/types/src/model/CommandResponse.d.ts +11 -5
  58. package/lib/types/src/model/CommandResponse.d.ts.map +1 -1
  59. package/lib/types/src/model/Device.d.ts +115 -7
  60. package/lib/types/src/model/Device.d.ts.map +1 -1
  61. package/lib/types/src/model/Mock.d.ts +32 -6
  62. package/lib/types/src/model/Mock.d.ts.map +1 -1
  63. package/lib/types/src/model/Session.d.ts +30 -10
  64. package/lib/types/src/model/Session.d.ts.map +1 -1
  65. package/lib/types/src/model/SessionExport.d.ts +40 -0
  66. package/lib/types/src/model/SessionExport.d.ts.map +1 -0
  67. package/lib/types/src/model/Speculos.d.ts +27 -0
  68. package/lib/types/src/model/Speculos.d.ts.map +1 -0
  69. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  70. package/package.json +33 -23
  71. package/lib/cjs/src/DefaultHttpClient.js +0 -2
  72. package/lib/cjs/src/DefaultHttpClient.js.map +0 -7
  73. package/lib/cjs/src/DefaultHttpClient.stub.js +0 -2
  74. package/lib/cjs/src/DefaultHttpClient.stub.js.map +0 -7
  75. package/lib/cjs/src/HttpClient.js +0 -2
  76. package/lib/cjs/src/HttpClient.js.map +0 -7
  77. package/lib/cjs/src/model/ComandResponse.test.js +0 -2
  78. package/lib/cjs/src/model/ComandResponse.test.js.map +0 -7
  79. package/lib/cjs/src/model/CommandResponse.stub.js +0 -2
  80. package/lib/cjs/src/model/CommandResponse.stub.js.map +0 -7
  81. package/lib/cjs/src/model/Device.stub.js +0 -2
  82. package/lib/cjs/src/model/Device.stub.js.map +0 -7
  83. package/lib/cjs/src/model/Mock.stub.js +0 -2
  84. package/lib/cjs/src/model/Mock.stub.js.map +0 -7
  85. package/lib/cjs/src/model/Session.stub.js +0 -2
  86. package/lib/cjs/src/model/Session.stub.js.map +0 -7
  87. package/lib/cjs/src/service/ConnectivityService.js +0 -2
  88. package/lib/cjs/src/service/ConnectivityService.js.map +0 -7
  89. package/lib/cjs/src/service/ConnectivityService.test.js +0 -2
  90. package/lib/cjs/src/service/ConnectivityService.test.js.map +0 -7
  91. package/lib/cjs/src/service/DiscoveryService.js +0 -2
  92. package/lib/cjs/src/service/DiscoveryService.js.map +0 -7
  93. package/lib/cjs/src/service/DiscoveryService.test.js +0 -2
  94. package/lib/cjs/src/service/DiscoveryService.test.js.map +0 -7
  95. package/lib/cjs/src/service/MockService.js +0 -2
  96. package/lib/cjs/src/service/MockService.js.map +0 -7
  97. package/lib/cjs/src/service/SendService.js +0 -2
  98. package/lib/cjs/src/service/SendService.js.map +0 -7
  99. package/lib/esm/src/DefaultHttpClient.js +0 -2
  100. package/lib/esm/src/DefaultHttpClient.js.map +0 -7
  101. package/lib/esm/src/DefaultHttpClient.stub.js +0 -2
  102. package/lib/esm/src/DefaultHttpClient.stub.js.map +0 -7
  103. package/lib/esm/src/HttpClient.js +0 -1
  104. package/lib/esm/src/HttpClient.js.map +0 -7
  105. package/lib/esm/src/model/ComandResponse.test.js +0 -2
  106. package/lib/esm/src/model/ComandResponse.test.js.map +0 -7
  107. package/lib/esm/src/model/CommandResponse.stub.js +0 -2
  108. package/lib/esm/src/model/CommandResponse.stub.js.map +0 -7
  109. package/lib/esm/src/model/Device.stub.js +0 -2
  110. package/lib/esm/src/model/Device.stub.js.map +0 -7
  111. package/lib/esm/src/model/Mock.stub.js +0 -2
  112. package/lib/esm/src/model/Mock.stub.js.map +0 -7
  113. package/lib/esm/src/model/Session.stub.js +0 -2
  114. package/lib/esm/src/model/Session.stub.js.map +0 -7
  115. package/lib/esm/src/service/ConnectivityService.js +0 -2
  116. package/lib/esm/src/service/ConnectivityService.js.map +0 -7
  117. package/lib/esm/src/service/ConnectivityService.test.js +0 -2
  118. package/lib/esm/src/service/ConnectivityService.test.js.map +0 -7
  119. package/lib/esm/src/service/DiscoveryService.js +0 -2
  120. package/lib/esm/src/service/DiscoveryService.js.map +0 -7
  121. package/lib/esm/src/service/DiscoveryService.test.js +0 -2
  122. package/lib/esm/src/service/DiscoveryService.test.js.map +0 -7
  123. package/lib/esm/src/service/MockService.js +0 -2
  124. package/lib/esm/src/service/MockService.js.map +0 -7
  125. package/lib/esm/src/service/SendService.js +0 -2
  126. package/lib/esm/src/service/SendService.js.map +0 -7
  127. package/lib/types/src/DefaultHttpClient.d.ts +0 -14
  128. package/lib/types/src/DefaultHttpClient.d.ts.map +0 -1
  129. package/lib/types/src/DefaultHttpClient.stub.d.ts +0 -16
  130. package/lib/types/src/DefaultHttpClient.stub.d.ts.map +0 -1
  131. package/lib/types/src/HttpClient.d.ts +0 -6
  132. package/lib/types/src/HttpClient.d.ts.map +0 -1
  133. package/lib/types/src/model/ComandResponse.test.d.ts +0 -2
  134. package/lib/types/src/model/ComandResponse.test.d.ts.map +0 -1
  135. package/lib/types/src/model/CommandResponse.stub.d.ts +0 -3
  136. package/lib/types/src/model/CommandResponse.stub.d.ts.map +0 -1
  137. package/lib/types/src/model/Device.stub.d.ts +0 -3
  138. package/lib/types/src/model/Device.stub.d.ts.map +0 -1
  139. package/lib/types/src/model/Mock.stub.d.ts +0 -3
  140. package/lib/types/src/model/Mock.stub.d.ts.map +0 -1
  141. package/lib/types/src/model/Session.stub.d.ts +0 -3
  142. package/lib/types/src/model/Session.stub.d.ts.map +0 -1
  143. package/lib/types/src/service/ConnectivityService.d.ts +0 -15
  144. package/lib/types/src/service/ConnectivityService.d.ts.map +0 -1
  145. package/lib/types/src/service/ConnectivityService.test.d.ts +0 -2
  146. package/lib/types/src/service/ConnectivityService.test.d.ts.map +0 -1
  147. package/lib/types/src/service/DiscoveryService.d.ts +0 -11
  148. package/lib/types/src/service/DiscoveryService.d.ts.map +0 -1
  149. package/lib/types/src/service/DiscoveryService.test.d.ts +0 -2
  150. package/lib/types/src/service/DiscoveryService.test.d.ts.map +0 -1
  151. package/lib/types/src/service/MockService.d.ts +0 -10
  152. package/lib/types/src/service/MockService.d.ts.map +0 -1
  153. package/lib/types/src/service/SendService.d.ts +0 -8
  154. package/lib/types/src/service/SendService.d.ts.map +0 -1
@@ -1,27 +1,80 @@
1
+ import { DmkNetworkClient } from "@ledgerhq/device-management-kit";
2
+ import { type ConnectionState } from "./model/Auth";
1
3
  import { type CommandResponse } from "./model/CommandResponse";
2
- import { type Device } from "./model/Device";
3
- import { type Mock } from "./model/Mock";
4
+ import { type Device, type DeviceConfig } from "./model/Device";
5
+ import { type Mock, type MockConfig } from "./model/Mock";
4
6
  import { type Session } from "./model/Session";
5
- import { ConnectivityService } from "./service/ConnectivityService";
6
- import { DiscoveryService } from "./service/DiscoveryService";
7
- import { MockService } from "./service/MockService";
8
- import { SendService } from "./service/SendService";
7
+ import { type SessionExport } from "./model/SessionExport";
8
+ import { type SpeculosAction, type SpeculosButton, type SpeculosInstance } from "./model/Speculos";
9
+ export interface MockClientOptions {
10
+ /**
11
+ * An existing mock server session token. When provided the client operates
12
+ * within that session; when omitted the client lazily creates its own session
13
+ * through POST /auth.
14
+ */
15
+ readonly token?: string;
16
+ /** Inject a custom network client (mainly for testing). */
17
+ readonly httpClient?: DmkNetworkClient;
18
+ }
19
+ /**
20
+ * HTTP client for the device mock server.
21
+ *
22
+ * Implements the bearer-token contract: the session is
23
+ * resolved from an `Authorization: Bearer <token>` header rather than a
24
+ * `session_id` header, and sessions, devices and mocks are exposed as REST
25
+ * resources. The token can be injected or self-provisioned via /auth.
26
+ */
9
27
  export declare class MockClient {
10
- connectivityService: ConnectivityService;
11
- sendService: SendService;
12
- discoveryService: DiscoveryService;
13
- mockService: MockService;
14
- constructor(baseUrl: string);
15
- connect(sessionId: string): Promise<Session>;
16
- disconnect(sessionId: string): Promise<boolean>;
28
+ private readonly client;
29
+ private token?;
30
+ private authPromise?;
31
+ constructor(baseUrl: string, options?: MockClientOptions);
32
+ /** Create a session and store the returned bearer token. */
33
+ authenticate(): Promise<string>;
34
+ /** The current bearer token, if a session has been established. */
35
+ getToken(): string | undefined;
36
+ listDevices(): Promise<Device[]>;
37
+ addDevice(config?: DeviceConfig): Promise<Device>;
38
+ getDevice(deviceId: string): Promise<Device>;
39
+ editDevice(deviceId: string, config: DeviceConfig): Promise<Device>;
40
+ deleteDevice(deviceId: string): Promise<boolean>;
41
+ connect(deviceId: string): Promise<ConnectionState>;
42
+ disconnect(deviceId: string): Promise<boolean>;
43
+ /** Disconnect every device attached to the session. */
17
44
  disconnectAll(): Promise<boolean>;
18
- getConnected(): Promise<Session[]>;
19
- send(sessionId: string, binaryCommand: Uint8Array): Promise<CommandResponse>;
20
- scan(nbDevices?: number): Promise<Device[]>;
21
- addMock(sessionId: string, prefix: string, response: string): Promise<boolean>;
22
- getMocks(sessionId: string): Promise<Mock[]>;
23
- deleteMocks(sessionId: string): Promise<boolean>;
24
- toHexString(arr: Uint8Array): string;
25
- fromHexString(hexString: string): Uint8Array;
45
+ sendApdu(deviceId: string, apdu: Uint8Array | string): Promise<CommandResponse>;
46
+ listMocks(deviceId: string): Promise<Mock[]>;
47
+ addMock(deviceId: string, config: MockConfig): Promise<Mock>;
48
+ editMock(deviceId: string, mockId: string, config: MockConfig): Promise<Mock>;
49
+ deleteMock(deviceId: string, mockId: string): Promise<boolean>;
50
+ clearMocks(deviceId: string): Promise<boolean>;
51
+ /**
52
+ * Resolve the live Speculos instance backing a device (the one currently
53
+ * proxying its APDUs). Throws if the device has no active instance.
54
+ */
55
+ getSpeculos(deviceId: string): Promise<SpeculosInstance>;
56
+ /**
57
+ * Capture the device's current screen as a PNG. Throws with status 409 when
58
+ * the device has no active instance, which is the case whenever no app is
59
+ * running.
60
+ */
61
+ getScreenshot(deviceId: string): Promise<Blob>;
62
+ /** Actuate a physical button on a button-driven device. */
63
+ pressButton(deviceId: string, button: SpeculosButton, action?: SpeculosAction): Promise<void>;
64
+ /** Tap a touchscreen device, in device screen pixels. */
65
+ touchScreen(deviceId: string, x: number, y: number, action?: SpeculosAction): Promise<void>;
66
+ getSession(): Promise<Session>;
67
+ disposeSession(): Promise<boolean>;
68
+ /** Export the session's devices and mocks as a portable snapshot. */
69
+ exportSession(): Promise<SessionExport>;
70
+ /**
71
+ * Replace the session's devices and mocks with a previously exported
72
+ * snapshot, returning the resulting (normalized) state.
73
+ */
74
+ importSession(snapshot: SessionExport): Promise<SessionExport>;
75
+ private decode;
76
+ private authHeaders;
77
+ private ensureToken;
78
+ private normalizeUrl;
26
79
  }
27
80
  //# sourceMappingURL=MockClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MockClient.d.ts","sourceRoot":"","sources":["../../../src/MockClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,qBAAa,UAAU;IAErB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;gBAEb,OAAO,EAAE,MAAM;IAQrB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI5C,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIjC,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIlC,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,UAAU,GACxB,OAAO,CAAC,eAAe,CAAC;IAKrB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAI3C,OAAO,CACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,OAAO,CAAC;IAIb,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAI5C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtD,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM;IAIpC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU;CAQ7C"}
1
+ {"version":3,"file":"MockClient.d.ts","sourceRoot":"","sources":["../../../src/MockClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MockClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockClient.test.d.ts","sourceRoot":"","sources":["../../../src/MockClient.test.ts"],"names":[],"mappings":""}
@@ -1,6 +1,10 @@
1
+ export type { MockClientOptions } from "./MockClient";
1
2
  export { MockClient } from "./MockClient";
2
- export { CommandResponse } from "./model/CommandResponse";
3
- export { Device } from "./model/Device";
4
- export { Mock } from "./model/Mock";
5
- export { Session } from "./model/Session";
3
+ export type { AuthResponse, ConnectionState } from "./model/Auth";
4
+ export type { CommandResponse } from "./model/CommandResponse";
5
+ export { type CatalogApp, catalogAppCodec, type Device, type DeviceApp, type DeviceConfig, deviceConfigCodec, type DeviceConnectivityType, } from "./model/Device";
6
+ export { type Mock, type MockConfig, mockConfigCodec } from "./model/Mock";
7
+ export type { Session } from "./model/Session";
8
+ export { type SessionExport, sessionExportCodec } from "./model/SessionExport";
9
+ export type { SpeculosAction, SpeculosButton, SpeculosInstance, } from "./model/Speculos";
6
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,iBAAiB,EACjB,KAAK,sBAAsB,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,aAAa,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { Codec } from "purify-ts";
2
+ import { type Device } from "./Device";
3
+ /**
4
+ * Response of POST /auth: an opaque bearer token identifying a session and its
5
+ * expiry timestamp (epoch ms).
6
+ */
7
+ export interface AuthResponse {
8
+ readonly token: string;
9
+ readonly expires_at: number;
10
+ }
11
+ export declare const authResponseCodec: Codec<{
12
+ token: string;
13
+ expires_at: number;
14
+ }>;
15
+ /**
16
+ * State returned when connecting a device (POST /devices/:id/connect).
17
+ */
18
+ export interface ConnectionState {
19
+ readonly device: Device;
20
+ readonly connected: boolean;
21
+ }
22
+ export declare const connectionStateCodec: Codec<{
23
+ device: {
24
+ id: string;
25
+ name: string;
26
+ device_type: string;
27
+ connectivity_type: string;
28
+ firmware_version: string | undefined;
29
+ apps: {
30
+ name: string;
31
+ version: string;
32
+ hash: string | undefined;
33
+ }[] | undefined;
34
+ masks: number[] | undefined;
35
+ connected: boolean | undefined;
36
+ onboarded: boolean | undefined;
37
+ language: string | undefined;
38
+ };
39
+ connected: boolean;
40
+ }>;
41
+ //# sourceMappingURL=Auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../../../../src/model/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,EAAkB,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,iBAAiB;;;EAG5B,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAG/B,CAAC"}
@@ -1,8 +1,14 @@
1
- export type CommandResponseArgs = {
1
+ import { Codec } from "purify-ts";
2
+ /**
3
+ * The result of simulating an APDU exchange (POST /devices/:id/apdu).
4
+ *
5
+ * {@link CommandResponse.response} is the full response hex, data followed by the
6
+ * two-byte status word.
7
+ */
8
+ export interface CommandResponse {
2
9
  readonly response: string;
3
- };
4
- export declare class CommandResponse {
5
- readonly response: string;
6
- constructor({ response }: CommandResponseArgs);
7
10
  }
11
+ export declare const commandResponseCodec: Codec<{
12
+ response: string;
13
+ }>;
8
14
  //# sourceMappingURL=CommandResponse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandResponse.d.ts","sourceRoot":"","sources":["../../../../src/model/CommandResponse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,qBAAa,eAAe;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,EAAE,QAAQ,EAAE,EAAE,mBAAmB;CAG9C"}
1
+ {"version":3,"file":"CommandResponse.d.ts","sourceRoot":"","sources":["../../../../src/model/CommandResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,MAAM,WAAW,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB;;EAE/B,CAAC"}
@@ -1,14 +1,122 @@
1
- export type DeviceArgs = {
2
- readonly id: string;
1
+ import { Codec } from "purify-ts";
2
+ import { type MockConfig } from "./Mock";
3
+ export type DeviceConnectivityType = "USB" | "BLE";
4
+ export interface DeviceApp {
3
5
  readonly name: string;
4
- readonly device_type: string;
5
- readonly connectivity_type: string;
6
- };
7
- export declare class Device {
6
+ readonly version: string;
7
+ readonly hash?: string;
8
+ }
9
+ export declare const deviceAppCodec: Codec<{
10
+ name: string;
11
+ version: string;
12
+ hash: string | undefined;
13
+ }>;
14
+ /**
15
+ * An installable app known to the mock "app store", keyed by its install
16
+ * `hash`. The secure-channel install flow resolves the hash sent by DMK to one
17
+ * of these entries to learn which app is being installed.
18
+ */
19
+ export interface CatalogApp {
20
+ readonly hash: string;
21
+ readonly name: string;
22
+ readonly version: string;
23
+ }
24
+ export declare const catalogAppCodec: Codec<{
25
+ hash: string;
26
+ name: string;
27
+ version: string;
28
+ }>;
29
+ /**
30
+ * A mocked device attached to a session.
31
+ *
32
+ * The device exposes rich metadata (firmware
33
+ * version, installed applications, memory masks) so DMK can build a realistic
34
+ * device session.
35
+ */
36
+ export interface Device {
8
37
  readonly id: string;
9
38
  readonly name: string;
39
+ /** DeviceModelId enum value, e.g. "nanoX", "stax", "flex". */
10
40
  readonly device_type: string;
11
41
  readonly connectivity_type: string;
12
- constructor({ id, name, device_type, connectivity_type }: DeviceArgs);
42
+ readonly firmware_version?: string;
43
+ readonly apps?: DeviceApp[];
44
+ readonly masks?: number[];
45
+ readonly connected?: boolean;
46
+ /**
47
+ * Whether the device is onboarded. Omitted/`true` reports a normal onboarded
48
+ * device; `false` starts the onboarding simulation (the device reports itself
49
+ * as not onboarded and auto-advances through the onboarding steps as it is
50
+ * polled).
51
+ */
52
+ readonly onboarded?: boolean;
53
+ /**
54
+ * The installed language pack, by name (`"french"`, `"german"`, …). Omitted
55
+ * means the device runs on its built-in English, as one with no pack
56
+ * installed does. Installing a pack over the wire sets it.
57
+ */
58
+ readonly language?: string;
59
+ }
60
+ export declare const deviceCodec: Codec<{
61
+ id: string;
62
+ name: string;
63
+ device_type: string;
64
+ connectivity_type: string;
65
+ firmware_version: string | undefined;
66
+ apps: {
67
+ name: string;
68
+ version: string;
69
+ hash: string | undefined;
70
+ }[] | undefined;
71
+ masks: number[] | undefined;
72
+ connected: boolean | undefined;
73
+ onboarded: boolean | undefined;
74
+ language: string | undefined;
75
+ }>;
76
+ /**
77
+ * Payload used to attach (POST /devices) or edit (PATCH /devices/:id) a device.
78
+ */
79
+ export interface DeviceConfig {
80
+ readonly name?: string;
81
+ readonly device_type?: string;
82
+ readonly connectivity_type?: string;
83
+ readonly firmware_version?: string;
84
+ readonly apps?: DeviceApp[];
85
+ readonly masks?: number[];
86
+ /** Device-scoped APDU mocks, used when attaching (POST) or importing a device. */
87
+ readonly mocks?: MockConfig[];
88
+ /** Installable apps the mock "app store" can resolve from an install hash. */
89
+ readonly catalog?: CatalogApp[];
90
+ /**
91
+ * Whether the device is onboarded. Omitted/`true` reports a normal onboarded
92
+ * device; `false` starts the onboarding simulation.
93
+ */
94
+ readonly onboarded?: boolean;
95
+ /** The installed language pack, by name (`"french"`, `"german"`, …). */
96
+ readonly language?: string;
13
97
  }
98
+ export declare const deviceConfigCodec: Codec<{
99
+ name: string | undefined;
100
+ device_type: string | undefined;
101
+ connectivity_type: string | undefined;
102
+ firmware_version: string | undefined;
103
+ apps: {
104
+ name: string;
105
+ version: string;
106
+ hash: string | undefined;
107
+ }[] | undefined;
108
+ masks: number[] | undefined;
109
+ mocks: {
110
+ prefix: string;
111
+ response: string | undefined;
112
+ responses: string[] | undefined;
113
+ }[] | undefined;
114
+ catalog: {
115
+ hash: string;
116
+ name: string;
117
+ version: string;
118
+ }[] | undefined;
119
+ onboarded: boolean | undefined;
120
+ language: string | undefined;
121
+ }>;
14
122
  //# sourceMappingURL=Device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../../src/model/Device.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,qBAAa,MAAM;IACjB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAEvB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,EAAE,UAAU;CAMrE"}
1
+ {"version":3,"file":"Device.d.ts","sourceRoot":"","sources":["../../../../src/model/Device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAA4B,MAAM,WAAW,CAAC;AAE5E,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,QAAQ,CAAC;AAE1D,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,KAAK,CAAC;AAEnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,cAAc;;;;EAIzB,CAAC;AAEH;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,eAAe;;;;EAI1B,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAWtB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC"}
@@ -1,10 +1,36 @@
1
- export type MockArgs = {
1
+ import { Codec } from "purify-ts";
2
+ /**
3
+ * A canned APDU response registered against a device.
4
+ *
5
+ * Whenever an incoming APDU starts with {@link Mock.prefix} (hex), the mock
6
+ * server returns the next entry of {@link Mock.responses}, advancing one entry
7
+ * per matching APDU and looping back to the start once the list is exhausted.
8
+ * Mocks are device-scoped: each device owns its own independent mock table.
9
+ */
10
+ export interface Mock {
11
+ readonly id: string;
2
12
  readonly prefix: string;
3
- readonly response: string;
4
- };
5
- export declare class Mock {
13
+ readonly responses: string[];
14
+ }
15
+ export declare const mockCodec: Codec<{
16
+ id: string;
17
+ prefix: string;
18
+ responses: string[];
19
+ }>;
20
+ /**
21
+ * Payload used to create (POST /mocks) or edit (PATCH /mocks/:id) a mock.
22
+ *
23
+ * Provide either an ordered {@link MockConfig.responses} list or a single
24
+ * {@link MockConfig.response} (shorthand for `responses: [response]`).
25
+ */
26
+ export interface MockConfig {
6
27
  readonly prefix: string;
7
- readonly response: string;
8
- constructor({ prefix, response }: MockArgs);
28
+ readonly response?: string;
29
+ readonly responses?: string[];
9
30
  }
31
+ export declare const mockConfigCodec: Codec<{
32
+ prefix: string;
33
+ response: string | undefined;
34
+ responses: string[] | undefined;
35
+ }>;
10
36
  //# sourceMappingURL=Mock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Mock.d.ts","sourceRoot":"","sources":["../../../../src/model/Mock.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,qBAAa,IAAI;IACf,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAEd,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,QAAQ;CAI3C"}
1
+ {"version":3,"file":"Mock.d.ts","sourceRoot":"","sources":["../../../../src/model/Mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAoB,MAAM,WAAW,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,SAAS;;;;EAIpB,CAAC;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,eAAe;;;;EAI1B,CAAC"}
@@ -1,15 +1,35 @@
1
+ import { Codec } from "purify-ts";
1
2
  import { type Device } from "./Device";
2
- export type SessionArgs = {
3
+ /**
4
+ * A mock server session, resolved from a bearer token.
5
+ *
6
+ * All devices and mocks are scoped to the session that owns the token.
7
+ */
8
+ export interface Session {
3
9
  readonly id: string;
4
- readonly device: Device;
5
- readonly current_app: string;
6
10
  readonly created_at: number;
7
- };
8
- export declare class Session {
9
- readonly id: string;
10
- readonly device: Device;
11
- readonly currentApp: string;
12
- readonly created_at: number;
13
- constructor({ id, device, current_app, created_at }: SessionArgs);
11
+ readonly expires_at: number;
12
+ readonly devices: Device[];
14
13
  }
14
+ export declare const sessionCodec: Codec<{
15
+ id: string;
16
+ created_at: number;
17
+ expires_at: number;
18
+ devices: {
19
+ id: string;
20
+ name: string;
21
+ device_type: string;
22
+ connectivity_type: string;
23
+ firmware_version: string | undefined;
24
+ apps: {
25
+ name: string;
26
+ version: string;
27
+ hash: string | undefined;
28
+ }[] | undefined;
29
+ masks: number[] | undefined;
30
+ connected: boolean | undefined;
31
+ onboarded: boolean | undefined;
32
+ language: string | undefined;
33
+ }[];
34
+ }>;
15
35
  //# sourceMappingURL=Session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/model/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,WAAW;CAMjE"}
1
+ {"version":3,"file":"Session.d.ts","sourceRoot":"","sources":["../../../../src/model/Session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAkB,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,UAAU,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;EAKvB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { Codec } from "purify-ts";
2
+ import { type DeviceConfig } from "./Device";
3
+ /**
4
+ * A portable snapshot of a session's devices (and their mocks).
5
+ *
6
+ * Produced by `GET /export` and consumed by `POST /import` to save and restore
7
+ * complex scenarios. Only configuration is captured (no ids, connection state
8
+ * or response cursors), so importing recreates a fresh, deterministic session
9
+ * state. Mocks are nested under each device (`DeviceConfig.mocks`).
10
+ */
11
+ export interface SessionExport {
12
+ readonly devices: DeviceConfig[];
13
+ }
14
+ export declare const sessionExportCodec: Codec<{
15
+ devices: {
16
+ name: string | undefined;
17
+ device_type: string | undefined;
18
+ connectivity_type: string | undefined;
19
+ firmware_version: string | undefined;
20
+ apps: {
21
+ name: string;
22
+ version: string;
23
+ hash: string | undefined;
24
+ }[] | undefined;
25
+ masks: number[] | undefined;
26
+ mocks: {
27
+ prefix: string;
28
+ response: string | undefined;
29
+ responses: string[] | undefined;
30
+ }[] | undefined;
31
+ catalog: {
32
+ hash: string;
33
+ name: string;
34
+ version: string;
35
+ }[] | undefined;
36
+ onboarded: boolean | undefined;
37
+ language: string | undefined;
38
+ }[];
39
+ }>;
40
+ //# sourceMappingURL=SessionExport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionExport.d.ts","sourceRoot":"","sources":["../../../../src/model/SessionExport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,UAAU,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;CAClC;AAED,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;EAE7B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Codec } from "purify-ts";
2
+ /**
3
+ * The live Speculos emulator instance backing a device, returned by
4
+ * `GET /devices/:id/speculos`. Control calls are proxied through
5
+ * `/devices/:id/speculos/*`.
6
+ */
7
+ export interface SpeculosInstance {
8
+ /** Speculinho run id owning the emulator pod. */
9
+ readonly run_id: string;
10
+ /** Per-pod emulator URL (reachable from the mock server). */
11
+ readonly speculos_url: string;
12
+ /** Device model (e.g. "nanoX", "stax", "flex"). */
13
+ readonly model: string;
14
+ }
15
+ export declare const speculosInstanceCodec: Codec<{
16
+ run_id: string;
17
+ speculos_url: string;
18
+ model: string;
19
+ }>;
20
+ /** A physical button on a button-driven device. */
21
+ export type SpeculosButton = "left" | "right" | "both";
22
+ /**
23
+ * How an input is delivered. `press-and-release` covers a normal click or tap;
24
+ * the split variants exist for flows that require a held input.
25
+ */
26
+ export type SpeculosAction = "press" | "release" | "press-and-release";
27
+ //# sourceMappingURL=Speculos.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Speculos.d.ts","sourceRoot":"","sources":["../../../../src/model/Speculos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,MAAM,WAAW,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,qBAAqB;;;;EAIhC,CAAC;AAEH,mDAAmD;AACnD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,mBAAmB,CAAC"}