pryv 2.1.8 → 2.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 (46) hide show
  1. package/package.json +12 -45
  2. package/src/Auth/AuthController.js +43 -50
  3. package/src/Auth/AuthStates.js +12 -12
  4. package/src/Auth/LoginMessages.js +17 -14
  5. package/src/Auth/index.js +18 -15
  6. package/src/Browser/CookieUtils.js +37 -27
  7. package/src/Browser/LoginButton.js +42 -37
  8. package/src/Browser/index.js +16 -42
  9. package/src/Connection.js +102 -95
  10. package/src/Service.js +47 -45
  11. package/src/ServiceAssets.js +42 -34
  12. package/src/browser-index-bundle.js +8 -0
  13. package/src/browser-index.js +7 -0
  14. package/src/index.d.ts +833 -0
  15. package/src/index.js +20 -3
  16. package/src/lib/browser-getEventStreamed.js +21 -19
  17. package/src/lib/json-parser.js +23 -24
  18. package/src/utils.js +55 -43
  19. package/test/Browser.AuthController.test.js +19 -21
  20. package/test/Browser.test.js +23 -26
  21. package/test/Connection.test.js +164 -162
  22. package/test/Service.test.js +30 -44
  23. package/test/ServiceAssets.test.js +16 -22
  24. package/test/browser-index.html +26 -0
  25. package/test/utils.test.js +30 -35
  26. package/.jsdoc-conf.json +0 -29
  27. package/.mocharc.js +0 -13
  28. package/LICENSE.md +0 -27
  29. package/README.md +0 -723
  30. package/scripts/setup-environment-dev.sh +0 -28
  31. package/scripts/upload.sh +0 -15
  32. package/src/Pryv.js +0 -19
  33. package/src/index-socket.io-monitor.js +0 -4
  34. package/src/index.html +0 -17
  35. package/test/browser-index.js +0 -11
  36. package/test/browser-tests.html +0 -31
  37. package/test/helpers.js +0 -8
  38. package/test/load-test-account.js +0 -108
  39. package/test/test-data.js +0 -92
  40. package/web-demos/auth-with-redirection.html +0 -72
  41. package/web-demos/auth.html +0 -77
  42. package/web-demos/custom-login-button.html +0 -158
  43. package/web-demos/index.html +0 -186
  44. package/web-demos/service-info.json +0 -13
  45. package/web-demos/stream-examples.html +0 -80
  46. package/webpack.config.js +0 -71
package/src/index.d.ts ADDED
@@ -0,0 +1,833 @@
1
+ declare module 'pryv' {
2
+ type Timestamp = number;
3
+ type Identifier = string;
4
+ type Level = 'read' | 'contribute' | 'manage' | 'create-only';
5
+ type KeyValue = { [key: string]: string | number };
6
+
7
+ type Attachment = {
8
+ id: Identifier;
9
+ fileName: string;
10
+ type: string;
11
+ size: number;
12
+ readToken: string;
13
+ };
14
+
15
+ type Stream = {
16
+ id: Identifier;
17
+ name: string;
18
+ parentId?: Identifier;
19
+ clientData?: KeyValue;
20
+ children: Identifier[];
21
+ trashed?: boolean;
22
+ created: Timestamp;
23
+ createdBy: Identifier;
24
+ modified: Timestamp;
25
+ modifiedBy: Identifier;
26
+ };
27
+
28
+ type Event = {
29
+ id: Identifier;
30
+ streamIds: Identifier[];
31
+ streamId: Identifier;
32
+ time: Timestamp;
33
+ duration?: Timestamp;
34
+ type: string;
35
+ content?: any;
36
+ tags?: string[];
37
+ description?: string;
38
+ attachments?: Attachment[];
39
+ clientData?: KeyValue;
40
+ trashed?: boolean;
41
+ created: Timestamp;
42
+ createdBy: Identifier;
43
+ modified: Timestamp;
44
+ modifiedBy: Identifier;
45
+ };
46
+
47
+ type Permission = {
48
+ streamId: Identifier;
49
+ level: Level;
50
+ feature?: 'selfRevoke';
51
+ setting?: 'forbidden';
52
+ };
53
+
54
+ type Access = {
55
+ id: Identifier;
56
+ token: string;
57
+ type?: 'personal' | 'app' | 'shared';
58
+ name: string;
59
+ deviceName?: string;
60
+ permissions: Permission[];
61
+ lastUsed?: Timestamp;
62
+ expireAfter?: number;
63
+ expires?: Timestamp;
64
+ deleted?: Timestamp;
65
+ clientData?: KeyValue;
66
+ created: Timestamp;
67
+ createdBy: Identifier;
68
+ modified: Timestamp;
69
+ modifiedBy: Identifier;
70
+ };
71
+
72
+ type FollowedSlice = {
73
+ id: Identifier;
74
+ name: string;
75
+ url: string;
76
+ accessToken: string;
77
+ };
78
+
79
+ type AccountInformation = {
80
+ username: string;
81
+ email: string;
82
+ language: string;
83
+ storageUsed: {
84
+ dbDocuments: number;
85
+ attachedFiles: number;
86
+ };
87
+ };
88
+
89
+ // HTTP only
90
+ type AuditLog = {
91
+ id: Identifier;
92
+ type: string;
93
+ time: Timestamp;
94
+ forwardedFor: string;
95
+ action: string;
96
+ query: string;
97
+ accessId: string;
98
+ status: number;
99
+ errorMessage?: string;
100
+ errorId?: string;
101
+ };
102
+
103
+ type HFSeries = {
104
+ format: 'flatJSON';
105
+ fields: string[];
106
+ points: Array<number | string>;
107
+ };
108
+
109
+ type Run = {
110
+ status: number;
111
+ timestamp: Timestamp;
112
+ };
113
+
114
+ type WebHook = {
115
+ id: Identifier;
116
+ accessId: Identifier;
117
+ url: string;
118
+ minIntervalMs: number;
119
+ maxRetries: number;
120
+ currentRetries: number;
121
+ state: 'active' | 'inactive';
122
+ runCount: number;
123
+ failCount: number;
124
+ lastRun: Run;
125
+ runs: Run[];
126
+ created: Timestamp;
127
+ createdBy: Identifier;
128
+ modified: Timestamp;
129
+ modifiedBy: Identifier;
130
+ };
131
+
132
+ type ItemDeletion = {
133
+ id: Identifier;
134
+ deleted?: Timestamp;
135
+ };
136
+
137
+ type Error = {
138
+ id: string;
139
+ message: string;
140
+ data?: any;
141
+ subErrors?: Error[];
142
+ };
143
+
144
+ type StreamsQuery = {
145
+ any?: Identifier[];
146
+ all?: Identifier[];
147
+ not?: Identifier[];
148
+ };
149
+
150
+ type EventQueryParams = {
151
+ fromTime: Timestamp;
152
+ toTime: Timestamp;
153
+ streams: string[];
154
+ tags: string[];
155
+ types: string[];
156
+ running: boolean;
157
+ sortAscending: boolean;
158
+ skip: number;
159
+ limit: number;
160
+ state: 'default' | 'trashed' | 'all';
161
+ modifiedSince: Timestamp;
162
+ includeDeletion: boolean;
163
+ };
164
+
165
+ type EventQueryParamsStreamQuery = Omit<EventQueryParams, 'streams'> & {
166
+ streams: string[] | StreamsQuery;
167
+ };
168
+
169
+ type EditMetadata = 'created' | 'createdBy' | 'modified' | 'modifiedBy';
170
+
171
+ export type APICallMethods = {
172
+ // mfa
173
+ 'mfa.challenge': {
174
+ params: null;
175
+ res: {
176
+ message: string;
177
+ };
178
+ };
179
+ 'mfa.recover': {
180
+ params: {
181
+ recoveryCode: string;
182
+ username: string;
183
+ password: string;
184
+ appId: string;
185
+ };
186
+ res: {
187
+ message: string;
188
+ };
189
+ };
190
+
191
+ // events
192
+ 'events.get': {
193
+ params: Partial<EventQueryParamsStreamQuery>;
194
+ res: {
195
+ eventDeletions?: ItemDeletion[];
196
+ events: Event[];
197
+ };
198
+ };
199
+ 'events.getOne': {
200
+ params: {
201
+ id: Identifier;
202
+ includeHistory?: boolean;
203
+ };
204
+ res: {
205
+ event: Event;
206
+ history?: Event[];
207
+ };
208
+ };
209
+ 'events.create': {
210
+ params: Partial<Omit<Event, 'attachments' | EditMetadata>>;
211
+ res: {
212
+ event: Event;
213
+ };
214
+ };
215
+ 'events.update': {
216
+ params: {
217
+ id: Identifier;
218
+ update: Partial<Omit<Event, 'id' | 'attachments' | EditMetadata>>;
219
+ };
220
+ res: {
221
+ event: Event;
222
+ };
223
+ };
224
+ 'events.deleteAttachment': {
225
+ params: {
226
+ id: Identifier;
227
+ fileId: Identifier;
228
+ };
229
+ res: {
230
+ event: Event;
231
+ };
232
+ };
233
+ 'events.delete': {
234
+ params: {
235
+ id: Identifier;
236
+ };
237
+ res: {
238
+ event: Event;
239
+ };
240
+ };
241
+
242
+ // HFS
243
+ 'hfs.create': {
244
+ params: Partial<Omit<Event, 'attachments' | EditMetadata>>;
245
+ res: {
246
+ event: Event;
247
+ };
248
+ };
249
+ 'hfs.update': {
250
+ params: {
251
+ id: Identifier;
252
+ update: Partial<Omit<Event, 'id' | 'attachments' | EditMetadata>>;
253
+ };
254
+ res: {
255
+ event: Event;
256
+ };
257
+ };
258
+ 'hfs.delete': {
259
+ params: {
260
+ id: Identifier;
261
+ };
262
+ res: {
263
+ event: Event;
264
+ };
265
+ };
266
+
267
+ // Streams
268
+ 'streams.get': {
269
+ params: {
270
+ parentId?: Identifier;
271
+ state?: 'default' | 'all';
272
+ includeDeletionsSince?: Timestamp;
273
+ };
274
+ res: {
275
+ streams: Stream[];
276
+ streamDeletions?: ItemDeletion[];
277
+ };
278
+ };
279
+ 'streams.create': {
280
+ params: Partial<Omit<Stream, 'children' | EditMetadata>>;
281
+ res: {
282
+ stream: Stream;
283
+ };
284
+ };
285
+ 'streams.update': {
286
+ params: {
287
+ id: Identifier;
288
+ update: Partial<Stream>;
289
+ };
290
+ res: {
291
+ stream: Stream;
292
+ };
293
+ };
294
+ 'streams.delete': {
295
+ params: {
296
+ id: Identifier;
297
+ mergeEventsWithParents: 'true' | 'false';
298
+ };
299
+ res: {
300
+ stream: Stream;
301
+ };
302
+ };
303
+
304
+ // Accesses
305
+ 'accesses.get': {
306
+ params: {
307
+ includeExpired?: boolean;
308
+ includeDeletions?: boolean;
309
+ };
310
+ res: {
311
+ accesses: Access[];
312
+ accessDeletions?: Access[];
313
+ };
314
+ };
315
+ 'accesses.create': {
316
+ params: Partial<
317
+ Omit<Access, 'id' | 'lastUsed' | 'expires' | 'deleted' | EditMetadata>
318
+ >;
319
+ res: {
320
+ access: Access;
321
+ };
322
+ };
323
+ 'accesses.delete': {
324
+ params: {
325
+ id: Identifier;
326
+ };
327
+ res: {
328
+ accessDeletion: ItemDeletion;
329
+ relatedDeletions?: ItemDeletion[];
330
+ };
331
+ };
332
+ 'accesses.checkApp': {
333
+ params: {
334
+ requestingAppId: string;
335
+ deviceName?: string;
336
+ requestedPermissions: Array<Permission & { defaultName: string }>;
337
+ };
338
+ res: {
339
+ checkedPermissions?: Permission[];
340
+ mismatchingAccess?: Access;
341
+ matchingAccess?: Access;
342
+ };
343
+ };
344
+ getAccessInfo: {
345
+ params: null;
346
+ res: {
347
+ calls: KeyValue;
348
+ user: KeyValue;
349
+ };
350
+ };
351
+
352
+ // Webhooks
353
+ 'webhooks.get': {
354
+ params: null;
355
+ res: {
356
+ webhooks: WebHook[];
357
+ };
358
+ };
359
+ 'webhooks.getOne': {
360
+ params: {
361
+ id: Identifier;
362
+ };
363
+ res: {
364
+ webhook: WebHook;
365
+ };
366
+ };
367
+ 'webhooks.create': {
368
+ params: {
369
+ webhook: Partial<Pick<WebHook, 'url' | 'state'>>;
370
+ };
371
+ res: {
372
+ webhook: WebHook;
373
+ };
374
+ };
375
+ 'webhooks.update': {
376
+ params: {
377
+ id: Identifier;
378
+ update: Partial<Pick<WebHook, 'state'>>;
379
+ };
380
+ res: {
381
+ webhook: WebHook;
382
+ };
383
+ };
384
+ 'webhooks.delete': {
385
+ params: {
386
+ id: Identifier;
387
+ };
388
+ res: {
389
+ webhookDeletion: ItemDeletion;
390
+ };
391
+ };
392
+ 'webhooks.test': {
393
+ params: {
394
+ id: Identifier;
395
+ };
396
+ res: {
397
+ webhook: WebHook;
398
+ };
399
+ };
400
+
401
+ // Followed Slices
402
+ 'followedSlices.get': {
403
+ params: null;
404
+ res: {
405
+ followedSlices: FollowedSlice[];
406
+ };
407
+ };
408
+ 'followedSlices.create': {
409
+ params: Partial<Pick<FollowedSlice, 'name' | 'url' | 'accessToken'>>;
410
+ res: {
411
+ followedSlice: FollowedSlice;
412
+ };
413
+ };
414
+ 'followedSlices.update': {
415
+ params: {
416
+ id: Identifier;
417
+ update: Partial<Pick<FollowedSlice, 'name' | 'url' | 'accessToken'>>;
418
+ };
419
+ res: {
420
+ followedSlice: FollowedSlice;
421
+ };
422
+ };
423
+ 'followedSlices.delete': {
424
+ params: {
425
+ id: Identifier;
426
+ };
427
+ res: {
428
+ followedSliceDeletion: ItemDeletion;
429
+ };
430
+ };
431
+
432
+ // Profile sets
433
+ 'profile.getApp': {
434
+ params: null;
435
+ res: {
436
+ profile: KeyValue;
437
+ };
438
+ };
439
+ 'profile.updateApp': {
440
+ params: {
441
+ update: KeyValue;
442
+ };
443
+ res: {
444
+ profile: KeyValue;
445
+ };
446
+ };
447
+ 'profile.getPublic': {
448
+ params: null;
449
+ res: {
450
+ profile: KeyValue;
451
+ };
452
+ };
453
+ 'profile.updatePublic': {
454
+ params: {
455
+ update: KeyValue;
456
+ };
457
+ res: {
458
+ profile: KeyValue;
459
+ };
460
+ };
461
+ 'profile.getPrivate': {
462
+ params: null;
463
+ res: {
464
+ profile: KeyValue;
465
+ };
466
+ };
467
+ 'profile.updatePrivate': {
468
+ params: {
469
+ update: KeyValue;
470
+ };
471
+ res: {
472
+ profile: KeyValue;
473
+ };
474
+ };
475
+
476
+ // Account management
477
+ 'account.get': {
478
+ params: null;
479
+ res: {
480
+ account: AccountInformation;
481
+ };
482
+ };
483
+ 'account.update': {
484
+ params: {
485
+ update: Partial<Omit<AccountInformation, 'username'>>;
486
+ };
487
+ res: {
488
+ account: AccountInformation;
489
+ };
490
+ };
491
+ 'account.changePassword': {
492
+ params: {
493
+ oldPassword: string;
494
+ newPassword: string;
495
+ };
496
+ res: null;
497
+ };
498
+ 'account.requestPasswordReset': {
499
+ params: {
500
+ appId: string;
501
+ };
502
+ res: null;
503
+ };
504
+ 'account.resetPassword': {
505
+ params: {
506
+ resetToken: string;
507
+ newPassword: string;
508
+ appId: string;
509
+ };
510
+ res: null;
511
+ };
512
+ };
513
+
514
+ type UnionToIntersection<U> = (
515
+ U extends any ? (k: U) => any : never
516
+ ) extends (k: infer I) => any
517
+ ? I
518
+ : never;
519
+ type APICallResultUnion = APICallMethods[keyof APICallMethods]['res'];
520
+ type APICallResultTypes = UnionToIntersection<
521
+ NonNullable<APICallResultUnion>
522
+ >;
523
+
524
+ type PossibleError = {
525
+ error?: Error;
526
+ };
527
+
528
+ type APICallResult<K extends keyof APICallMethods> =
529
+ APICallMethods[K]['res'] & PossibleError;
530
+
531
+ export type APICallResultHandler<K extends keyof APICallMethods> = (
532
+ result: APICallResult<K>,
533
+ ) => Promise<any>;
534
+ export type StreamedEventsHandler = (event: Event) => void;
535
+
536
+ type StreamedEventsResult = {
537
+ eventsCount?: number;
538
+ eventsDeletionsCount?: number;
539
+ meta: {
540
+ apiVersion: string;
541
+ serverTime: number;
542
+ serial: string;
543
+ };
544
+ };
545
+
546
+ export type EventFileCreationParams = Partial<
547
+ Omit<Event, 'attachments' | EditMetadata>
548
+ >;
549
+ export type APICall<K extends keyof APICallMethods = keyof APICallMethods> =
550
+ K extends keyof APICallMethods
551
+ ? {
552
+ method: K;
553
+ params: APICallMethods[K]['params'];
554
+ handleResult?: APICallResultHandler<K>;
555
+ }
556
+ : never;
557
+
558
+ export type TypedAPICallResult = APICallResultTypes & PossibleError;
559
+
560
+ export type APICallProgressHandler = (percentage: number) => void;
561
+
562
+ interface AccessInfo extends Access {
563
+ calls: KeyValue;
564
+ user: KeyValue;
565
+ }
566
+
567
+ type EventAPICallRes = {
568
+ event?: Event;
569
+ } & PossibleError;
570
+
571
+ export interface Connection {
572
+ new (apiEndpoint: string, service?: Service): Connection;
573
+ get service(): Service;
574
+ username(): Promise<string>;
575
+ api<Calls extends APICall[] = APICall[]>(
576
+ apiCalls: Calls,
577
+ res?: APICallProgressHandler[],
578
+ ): Promise<Array<TypedAPICallResult>>;
579
+ getEventsStreamed(
580
+ queryParams: Partial<EventQueryParamsStreamQuery>,
581
+ forEachEvent: StreamedEventsHandler,
582
+ ): Promise<StreamedEventsResult>;
583
+ createEventWithFile(
584
+ params: EventFileCreationParams,
585
+ filePath: string | Buffer | Blob,
586
+ ): Promise<EventAPICallRes>;
587
+ createEventWithFormData(
588
+ params: EventFileCreationParams,
589
+ formData: FormData,
590
+ ): Promise<EventAPICallRes>;
591
+ createEventWithFileFromBuffer(
592
+ params: EventFileCreationParams,
593
+ bufferData: string | Buffer | Blob,
594
+ filename: string,
595
+ ): Promise<EventAPICallRes>;
596
+ addPointsToHFEvent(
597
+ id: Identifier,
598
+ fields: string[],
599
+ values: Array<string | number>,
600
+ ): Promise<void>;
601
+ accessInfo(): Promise<AccessInfo>;
602
+
603
+ post(
604
+ path: string,
605
+ data: Object | any[],
606
+ queryParams: Object,
607
+ ): Promise<Object | Object[]>;
608
+ get(path: string, queryParams: Object): Promise<Object | Object[]>;
609
+ }
610
+
611
+ export type serviceCustomizations = {
612
+ name?: string;
613
+ assets?: {
614
+ definitions?: string;
615
+ };
616
+ };
617
+
618
+ export type ServiceInfo = {
619
+ register: string;
620
+ access: string;
621
+ api: string;
622
+ name: string;
623
+ home: string;
624
+ support: string;
625
+ terms: string;
626
+ eventTypes: string;
627
+ version: string;
628
+ assets: {
629
+ definitions: string;
630
+ };
631
+ serial: string;
632
+ };
633
+
634
+ export type AssetsConfig = {
635
+ baseUrl: string;
636
+ href: string;
637
+ favicon: {
638
+ [key: string]: string;
639
+ default: string;
640
+ };
641
+ css: {
642
+ [key: string]: string;
643
+ default: string;
644
+ };
645
+ 'lib-js': {
646
+ [key: string]: KeyValue | any;
647
+ };
648
+
649
+ [key: string]: any;
650
+ };
651
+
652
+ export interface Service {
653
+ new (
654
+ serviceInfoUrl: string,
655
+ serviceCustomizations?: serviceCustomizations,
656
+ ): Service;
657
+ info(forceFetch?: boolean): Promise<ServiceInfo>;
658
+ setServiceInfo(serviceInfo: Partial<ServiceInfo>): Promise<void>;
659
+ assets(forceFetch?: boolean): Promise<AssetsConfig>;
660
+ infoSync(): ServiceInfo | null;
661
+ apiEndpointFor(username: string, token: string): Promise<string>;
662
+ login(
663
+ username: string,
664
+ password: string,
665
+ appId: string,
666
+ originHeader?: string,
667
+ ): Promise<Connection>;
668
+ }
669
+
670
+ export type AuthRequestedPermission = {
671
+ streamId: Identifier;
672
+ defaultName: string;
673
+ level: Level;
674
+ };
675
+
676
+ export type States =
677
+ | 'LOADING'
678
+ | 'INITIALIZED'
679
+ | 'NEED_SIGNIN'
680
+ | 'ACCEPTED'
681
+ | 'SIGNOUT';
682
+
683
+ type StateChangeTypes = {
684
+ LOADING: {};
685
+ INITIALIZED: {
686
+ serviceInfo: ServiceInfo;
687
+ };
688
+ NEED_SIGNIN: {
689
+ authUrl: string;
690
+ clientData: any;
691
+ code: number;
692
+ key: string;
693
+ lang: string;
694
+ oauthState: any;
695
+ poll: string;
696
+ poll_rate_ms: number;
697
+ requestedPermissions: Array<{
698
+ streamId: string;
699
+ level: Level;
700
+ defaultName: string;
701
+ }>;
702
+ requestingAppId: string;
703
+ returnUrl: any;
704
+ serviceInfo: ServiceInfo;
705
+ };
706
+ ACCEPTED: {
707
+ serviceInfo: ServiceInfo;
708
+ apiEndpoint: string;
709
+ username: string;
710
+ token: string;
711
+ };
712
+ SIGNOUT: {};
713
+ };
714
+
715
+ export type StateChange<K extends States> = StateChangeTypes[K] & {
716
+ id: K;
717
+ status: K;
718
+ };
719
+
720
+ export type AuthSettings = {
721
+ spanButtonID?: string;
722
+ onStateChange?: (state: StateChange<States>) => void;
723
+ returnURL?: string;
724
+ authRequest: {
725
+ requestingAppId: string;
726
+ languageCode?: string;
727
+ requestedPermissions: AuthRequestedPermission[];
728
+ returnUrl?: string | boolean;
729
+ referer?: string;
730
+ clientData?: Object;
731
+ };
732
+ };
733
+
734
+ type SetupAuth = (
735
+ settings: AuthSettings,
736
+ serviceInfoUrl: string,
737
+ serviceCustomizations?: serviceCustomizations,
738
+ humanInteraction?: any,
739
+ ) => Promise<Service>;
740
+
741
+ export type AuthStates = {
742
+ ERROR: 'ERROR';
743
+ LOADING: 'LOADING';
744
+ INITIALIZED: 'INITIALIZED';
745
+ NEED_SIGNIN: 'NEED_SIGNIN';
746
+ AUTHORIZED: 'ACCEPTED';
747
+ SIGNOUT: 'SIGNOUT';
748
+ REFUSED: 'REFUSED';
749
+ };
750
+
751
+ type AuthStatePayload = {
752
+ status: AuthStates[keyof AuthStates];
753
+ message?: string;
754
+ };
755
+
756
+ export interface CustomLoginButton {
757
+ init?: () => Promise<void>;
758
+ getAuthorizationData(): string;
759
+ onStateChange(state: AuthStatePayload): Promise<void>;
760
+ onClick(): void;
761
+ saveAuthorizationData?: (authData: string) => void;
762
+ deleteAuthorizationData?: () => Promise<void>;
763
+ }
764
+
765
+ export interface AuthController {
766
+ new (
767
+ authSettings: AuthSettings,
768
+ service: Service,
769
+ loginButton: CustomLoginButton,
770
+ ): AuthController;
771
+ init(): Promise<void>;
772
+ stopAuthRequest(msg: string): void;
773
+ handleClick(): Promise<void>;
774
+ getReturnURL(
775
+ returnURL: string,
776
+ windowLocationForTest: string,
777
+ navigatorForTests: string,
778
+ ): string | boolean;
779
+ startAuthRequest(): Promise<any>;
780
+ doPolling(): Promise<void>;
781
+ set state(newState: AuthStatePayload);
782
+ get state(): AuthStatePayload;
783
+ }
784
+
785
+ export interface Auth {
786
+ setupAuth: SetupAuth;
787
+ AuthStates: AuthStates;
788
+ AuthController: AuthController;
789
+ }
790
+
791
+ export interface CookieUtils {
792
+ set(cookieKey: string, value: any, expireInDays: number): void;
793
+ get(cookieKey: string): any;
794
+ del(cookieKey: string): void;
795
+ }
796
+
797
+ type getServiceInfoFromURL = (url: string) => string;
798
+
799
+ export interface Browser {
800
+ LoginButton: CustomLoginButton;
801
+ CookieUtils: CookieUtils;
802
+ AuthStates: AuthStates;
803
+ setupAuth: SetupAuth;
804
+ serviceInfoFromUrl: getServiceInfoFromURL;
805
+ }
806
+
807
+ type TokenAndAPIEndpoint = {
808
+ endpoint: string;
809
+ token: string;
810
+ };
811
+
812
+ export interface utils {
813
+ isBrowser(): boolean;
814
+ extractTokenAndAPIEndpoint(apiEndpoint: string): TokenAndAPIEndpoint;
815
+ buildAPIEndpoint(tokenAndAPI: TokenAndAPIEndpoint): string;
816
+ browserIsMobileOrTablet(navigator: string): boolean;
817
+ cleanURLFromPrYvParams(url: string): string;
818
+ getQueryParamsFromURL(url: string): KeyValue;
819
+ }
820
+
821
+ type version = string;
822
+
823
+ let pryv: {
824
+ Service: Service;
825
+ Connection: Connection;
826
+ Auth: Auth;
827
+ Browser: Browser;
828
+ utils: utils;
829
+ version: version;
830
+ };
831
+
832
+ export default pryv;
833
+ }