@incodetech/core 2.0.0-alpha.1 → 2.0.0-alpha.10

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 (106) hide show
  1. package/dist/Manager-BGfxEmyv.d.ts +19 -0
  2. package/dist/OpenViduLogger-BdPfiZO6.esm.js +3 -0
  3. package/dist/OpenViduLogger-CQyDxBvM.esm.js +803 -0
  4. package/dist/StateMachine-DRE1oH2B.d.ts +2 -0
  5. package/dist/addEvent-W0ORK0jT.esm.js +16 -0
  6. package/dist/chunk-C_Yo44FK.esm.js +49 -0
  7. package/dist/email.d.ts +264 -0
  8. package/dist/email.esm.js +479 -0
  9. package/dist/endpoints-BSTFaHYo.esm.js +1706 -0
  10. package/dist/flow.d.ts +578 -0
  11. package/dist/flow.esm.js +628 -0
  12. package/dist/index.d.ts +226 -0
  13. package/dist/index.esm.js +155 -0
  14. package/dist/lib-Bu9XGMBW.esm.js +11700 -0
  15. package/dist/permissionServices-I6vX6DBy.esm.js +72 -0
  16. package/dist/phone.d.ts +292 -0
  17. package/dist/phone.esm.js +550 -0
  18. package/dist/selfie.d.ts +759 -0
  19. package/dist/selfie.esm.js +995 -0
  20. package/dist/types-iZi2rawo.d.ts +5 -0
  21. package/dist/warmup-CEJTfxQr.d.ts +55 -0
  22. package/dist/xstate.esm-B_rda9yU.esm.js +3261 -0
  23. package/package.json +14 -11
  24. package/src/camera/cameraActor.ts +0 -21
  25. package/src/camera/cameraService.test.ts +0 -437
  26. package/src/camera/cameraService.ts +0 -165
  27. package/src/camera/cameraServices.test.ts +0 -66
  28. package/src/camera/cameraServices.ts +0 -26
  29. package/src/camera/cameraStateMachine.test.ts +0 -602
  30. package/src/camera/cameraStateMachine.ts +0 -264
  31. package/src/camera/index.ts +0 -5
  32. package/src/camera/types.ts +0 -17
  33. package/src/device/getBrowser.ts +0 -31
  34. package/src/device/getDeviceClass.ts +0 -29
  35. package/src/device/index.ts +0 -2
  36. package/src/email/__mocks__/emailMocks.ts +0 -59
  37. package/src/email/emailActor.ts +0 -15
  38. package/src/email/emailManager.test.ts +0 -573
  39. package/src/email/emailManager.ts +0 -427
  40. package/src/email/emailServices.ts +0 -66
  41. package/src/email/emailStateMachine.test.ts +0 -741
  42. package/src/email/emailStateMachine.ts +0 -367
  43. package/src/email/index.ts +0 -39
  44. package/src/email/types.ts +0 -60
  45. package/src/events/addEvent.ts +0 -20
  46. package/src/events/types.ts +0 -7
  47. package/src/flow/__mocks__/flowMocks.ts +0 -84
  48. package/src/flow/flowActor.ts +0 -13
  49. package/src/flow/flowAnalyzer.test.ts +0 -266
  50. package/src/flow/flowAnalyzer.ts +0 -37
  51. package/src/flow/flowCompletionService.ts +0 -21
  52. package/src/flow/flowManager.test.ts +0 -560
  53. package/src/flow/flowManager.ts +0 -235
  54. package/src/flow/flowServices.test.ts +0 -109
  55. package/src/flow/flowServices.ts +0 -13
  56. package/src/flow/flowStateMachine.test.ts +0 -334
  57. package/src/flow/flowStateMachine.ts +0 -182
  58. package/src/flow/index.ts +0 -21
  59. package/src/flow/moduleLoader.test.ts +0 -136
  60. package/src/flow/moduleLoader.ts +0 -73
  61. package/src/flow/orchestratedFlowManager.test.ts +0 -240
  62. package/src/flow/orchestratedFlowManager.ts +0 -231
  63. package/src/flow/orchestratedFlowStateMachine.test.ts +0 -199
  64. package/src/flow/orchestratedFlowStateMachine.ts +0 -325
  65. package/src/flow/types.ts +0 -434
  66. package/src/http/__mocks__/api.ts +0 -88
  67. package/src/http/api.test.ts +0 -231
  68. package/src/http/api.ts +0 -90
  69. package/src/http/endpoints.ts +0 -17
  70. package/src/index.ts +0 -33
  71. package/src/permissions/index.ts +0 -2
  72. package/src/permissions/permissionServices.ts +0 -31
  73. package/src/permissions/types.ts +0 -3
  74. package/src/phone/__mocks__/phoneMocks.ts +0 -71
  75. package/src/phone/index.ts +0 -39
  76. package/src/phone/phoneActor.ts +0 -15
  77. package/src/phone/phoneManager.test.ts +0 -393
  78. package/src/phone/phoneManager.ts +0 -458
  79. package/src/phone/phoneServices.ts +0 -98
  80. package/src/phone/phoneStateMachine.test.ts +0 -918
  81. package/src/phone/phoneStateMachine.ts +0 -422
  82. package/src/phone/types.ts +0 -83
  83. package/src/recordings/recordingsRepository.test.ts +0 -87
  84. package/src/recordings/recordingsRepository.ts +0 -48
  85. package/src/recordings/streamingEvents.ts +0 -10
  86. package/src/selfie/__mocks__/selfieMocks.ts +0 -26
  87. package/src/selfie/index.ts +0 -14
  88. package/src/selfie/selfieActor.ts +0 -17
  89. package/src/selfie/selfieErrorUtils.test.ts +0 -116
  90. package/src/selfie/selfieErrorUtils.ts +0 -66
  91. package/src/selfie/selfieManager.test.ts +0 -297
  92. package/src/selfie/selfieManager.ts +0 -301
  93. package/src/selfie/selfieServices.ts +0 -362
  94. package/src/selfie/selfieStateMachine.test.ts +0 -283
  95. package/src/selfie/selfieStateMachine.ts +0 -804
  96. package/src/selfie/selfieUploadService.test.ts +0 -90
  97. package/src/selfie/selfieUploadService.ts +0 -81
  98. package/src/selfie/types.ts +0 -103
  99. package/src/session/index.ts +0 -5
  100. package/src/session/sessionService.ts +0 -78
  101. package/src/setup.test.ts +0 -61
  102. package/src/setup.ts +0 -171
  103. package/tsconfig.json +0 -13
  104. package/tsdown.config.ts +0 -22
  105. package/vitest.config.ts +0 -37
  106. package/vitest.setup.ts +0 -135
@@ -1,283 +0,0 @@
1
- import {
2
- createActor,
3
- type FaceDetectionProvider,
4
- IncodeCanvas,
5
- } from '@incodetech/infra';
6
- import { beforeEach, describe, expect, it, vi } from 'vitest';
7
- import {
8
- mockSelfieConfig,
9
- mockSelfieConfigWithOneAttempt,
10
- } from './__mocks__/selfieMocks';
11
- import { selfieMachine } from './selfieStateMachine';
12
-
13
- vi.mock('../events/addEvent', () => ({
14
- addEvent: vi.fn().mockResolvedValue(undefined),
15
- }));
16
-
17
- vi.mock('../permissions/permissionServices', () => ({
18
- checkPermission: vi.fn().mockResolvedValue('granted'),
19
- requestPermission: vi.fn().mockResolvedValue('granted'),
20
- }));
21
-
22
- vi.mock('./selfieServices', () => ({
23
- encryptSelfieImage: vi.fn().mockResolvedValue('encrypted'),
24
- initializeCamera: vi.fn().mockResolvedValue({
25
- stream: new MediaStream(),
26
- provider: { dispose: vi.fn().mockResolvedValue(undefined), reset: vi.fn() },
27
- }),
28
- startDetection: vi.fn().mockImplementation(() => ({
29
- cleanup: vi.fn(),
30
- reset: vi.fn(),
31
- })),
32
- startRecordingSession: vi.fn().mockResolvedValue(undefined),
33
- stopRecording: vi.fn(),
34
- stopStream: vi.fn(),
35
- uploadSelfie: vi.fn().mockResolvedValue({
36
- age: 0,
37
- confidence: 0,
38
- hasClosedEyes: false,
39
- hasFaceMask: false,
40
- hasHeadCover: false,
41
- hasLenses: false,
42
- isBright: true,
43
- liveness: true,
44
- imageBase64: '',
45
- sessionStatus: 'ok',
46
- }),
47
- }));
48
-
49
- type SelfieActor = ReturnType<typeof createTestActor>;
50
-
51
- function createTestActor(config = mockSelfieConfig) {
52
- return createActor(selfieMachine, { input: { config } }).start();
53
- }
54
-
55
- function createCanvas(): IncodeCanvas {
56
- const raw = document.createElement('canvas');
57
- raw.width = 10;
58
- raw.height = 10;
59
- return new IncodeCanvas(raw);
60
- }
61
-
62
- async function waitForCaptureDetecting(actor: SelfieActor): Promise<void> {
63
- await vi.waitFor(
64
- () => {
65
- if (!actor.getSnapshot().matches({ capture: 'detecting' })) {
66
- throw new Error('Not detecting yet');
67
- }
68
- },
69
- { timeout: 2000 },
70
- );
71
- }
72
-
73
- describe('selfieMachine', () => {
74
- beforeEach(async () => {
75
- vi.clearAllMocks();
76
- const permissionServices = await import(
77
- '../permissions/permissionServices'
78
- );
79
- vi.mocked(permissionServices.checkPermission).mockResolvedValue('granted');
80
- vi.mocked(permissionServices.requestPermission).mockResolvedValue(
81
- 'granted',
82
- );
83
-
84
- const selfieServices = await import('./selfieServices');
85
- const provider = {
86
- dispose: vi.fn().mockResolvedValue(undefined),
87
- reset: vi.fn(),
88
- } as unknown as FaceDetectionProvider;
89
- vi.mocked(selfieServices.initializeCamera).mockResolvedValue({
90
- stream: new MediaStream(),
91
- provider,
92
- });
93
- vi.mocked(selfieServices.startDetection).mockReturnValue({
94
- cleanup: vi.fn(),
95
- reset: vi.fn(),
96
- });
97
- vi.mocked(selfieServices.uploadSelfie).mockResolvedValue({
98
- age: 0,
99
- confidence: 0,
100
- hasClosedEyes: false,
101
- hasFaceMask: false,
102
- hasHeadCover: false,
103
- hasLenses: false,
104
- isBright: true,
105
- liveness: true,
106
- imageBase64: '',
107
- sessionStatus: 'ok',
108
- });
109
- });
110
-
111
- it('starts in idle', () => {
112
- const actor = createTestActor();
113
- expect(actor.getSnapshot().value).toBe('idle');
114
- actor.stop();
115
- });
116
-
117
- it('goes to permissions when permission is not granted', async () => {
118
- const { checkPermission } = await import(
119
- '../permissions/permissionServices'
120
- );
121
- vi.mocked(checkPermission).mockResolvedValue('prompt');
122
-
123
- const actor = createTestActor();
124
- actor.send({ type: 'LOAD' });
125
-
126
- await vi.waitFor(() => {
127
- expect(actor.getSnapshot().matches('permissions')).toBe(true);
128
- });
129
-
130
- actor.stop();
131
- });
132
-
133
- it('goes to capture.detecting when permission is granted and camera initializes', async () => {
134
- const actor = createTestActor();
135
- actor.send({ type: 'LOAD' });
136
-
137
- await waitForCaptureDetecting(actor);
138
-
139
- actor.stop();
140
- });
141
-
142
- it('invokes startRecordingSession when enableFaceRecording is true', async () => {
143
- const selfieServices = await import('./selfieServices');
144
- const startRecordingSession = vi.mocked(
145
- selfieServices.startRecordingSession,
146
- );
147
- startRecordingSession.mockResolvedValueOnce(undefined);
148
-
149
- const actor = createTestActor({
150
- ...mockSelfieConfig,
151
- enableFaceRecording: true,
152
- });
153
- actor.send({ type: 'LOAD' });
154
- await waitForCaptureDetecting(actor);
155
-
156
- expect(startRecordingSession).toHaveBeenCalledTimes(1);
157
-
158
- actor.stop();
159
- });
160
-
161
- it('reaches finished after detection success and upload success', async () => {
162
- const actor = createTestActor();
163
- actor.send({ type: 'LOAD' });
164
- await waitForCaptureDetecting(actor);
165
-
166
- actor.send({
167
- type: 'DETECTION_SUCCESS',
168
- canvas: createCanvas(),
169
- });
170
-
171
- await vi.waitFor(
172
- () => {
173
- if (!actor.getSnapshot().matches('finished')) {
174
- throw new Error('Not finished yet');
175
- }
176
- },
177
- { timeout: 4000 },
178
- );
179
-
180
- actor.stop();
181
- });
182
-
183
- it('goes to uploadError on upload failure and decrements attemptsRemaining', async () => {
184
- const { uploadSelfie } = await import('./selfieServices');
185
- vi.mocked(uploadSelfie).mockRejectedValueOnce(new Error('UPLOAD_FAILED'));
186
-
187
- const actor = createTestActor();
188
- actor.send({ type: 'LOAD' });
189
- await waitForCaptureDetecting(actor);
190
-
191
- actor.send({
192
- type: 'DETECTION_SUCCESS',
193
- canvas: createCanvas(),
194
- });
195
-
196
- await vi.waitFor(() => {
197
- expect(actor.getSnapshot().matches({ capture: 'uploadError' })).toBe(
198
- true,
199
- );
200
- });
201
-
202
- expect(actor.getSnapshot().context.attemptsRemaining).toBe(
203
- mockSelfieConfig.captureAttempts - 1,
204
- );
205
- expect(actor.getSnapshot().context.uploadError).toBe('SERVER_ERROR');
206
-
207
- actor.stop();
208
- });
209
-
210
- it('retries capture when attempts remain', async () => {
211
- const { uploadSelfie } = await import('./selfieServices');
212
- vi.mocked(uploadSelfie).mockRejectedValueOnce(new Error('UPLOAD_FAILED'));
213
-
214
- const actor = createTestActor();
215
- actor.send({ type: 'LOAD' });
216
- await waitForCaptureDetecting(actor);
217
-
218
- actor.send({
219
- type: 'DETECTION_SUCCESS',
220
- canvas: createCanvas(),
221
- });
222
-
223
- await vi.waitFor(() => {
224
- expect(actor.getSnapshot().matches({ capture: 'uploadError' })).toBe(
225
- true,
226
- );
227
- });
228
-
229
- actor.send({ type: 'RETRY_CAPTURE' });
230
-
231
- await waitForCaptureDetecting(actor);
232
-
233
- expect(actor.getSnapshot().context.uploadError).toBeUndefined();
234
- expect(actor.getSnapshot().context.capturedImage).toBeUndefined();
235
-
236
- actor.stop();
237
- });
238
-
239
- it('blocks retry when no attempts remain', async () => {
240
- const { uploadSelfie } = await import('./selfieServices');
241
- vi.mocked(uploadSelfie).mockRejectedValueOnce(new Error('UPLOAD_FAILED'));
242
-
243
- const actor = createTestActor(mockSelfieConfigWithOneAttempt);
244
- actor.send({ type: 'LOAD' });
245
- await waitForCaptureDetecting(actor);
246
-
247
- actor.send({
248
- type: 'DETECTION_SUCCESS',
249
- canvas: createCanvas(),
250
- });
251
-
252
- await vi.waitFor(() => {
253
- expect(actor.getSnapshot().matches({ capture: 'uploadError' })).toBe(
254
- true,
255
- );
256
- });
257
-
258
- expect(actor.getSnapshot().context.attemptsRemaining).toBe(0);
259
-
260
- actor.send({ type: 'RETRY_CAPTURE' });
261
- expect(actor.getSnapshot().matches({ capture: 'uploadError' })).toBe(true);
262
-
263
- actor.stop();
264
- });
265
-
266
- it('goes to uploadError with SERVER_ERROR on manual capture when no frame exists', async () => {
267
- const actor = createTestActor();
268
- actor.send({ type: 'LOAD' });
269
- await waitForCaptureDetecting(actor);
270
-
271
- actor.send({ type: 'MANUAL_CAPTURE' });
272
-
273
- await vi.waitFor(() => {
274
- expect(actor.getSnapshot().matches({ capture: 'uploadError' })).toBe(
275
- true,
276
- );
277
- });
278
-
279
- expect(actor.getSnapshot().context.uploadError).toBe('SERVER_ERROR');
280
-
281
- actor.stop();
282
- });
283
- });