@genesislcap/foundation-user 14.137.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 (118) hide show
  1. package/README.md +43 -0
  2. package/dist/dts/config.d.ts +53 -0
  3. package/dist/dts/config.d.ts.map +1 -0
  4. package/dist/dts/index.d.ts +5 -0
  5. package/dist/dts/index.d.ts.map +1 -0
  6. package/dist/dts/index.federated.d.ts +1 -0
  7. package/dist/dts/index.federated.d.ts.map +1 -0
  8. package/dist/dts/logger.d.ts +5 -0
  9. package/dist/dts/logger.d.ts.map +1 -0
  10. package/dist/dts/tsdoc-metadata.json +11 -0
  11. package/dist/dts/types.d.ts +134 -0
  12. package/dist/dts/types.d.ts.map +1 -0
  13. package/dist/dts/user.d.ts +167 -0
  14. package/dist/dts/user.d.ts.map +1 -0
  15. package/dist/esm/config.js +57 -0
  16. package/dist/esm/index.federated.js +1 -0
  17. package/dist/esm/index.js +4 -0
  18. package/dist/esm/logger.js +5 -0
  19. package/dist/esm/types.js +5 -0
  20. package/dist/esm/user.js +182 -0
  21. package/dist/foundation-user.api.json +3350 -0
  22. package/dist/foundation-user.d.ts +374 -0
  23. package/docs/.gitattributes +2 -0
  24. package/docs/api/foundation-user.defaultuser.actionhistory.md +13 -0
  25. package/docs/api/foundation-user.defaultuser.addauthenticationchangelistener.md +22 -0
  26. package/docs/api/foundation-user.defaultuser.clearactions.md +17 -0
  27. package/docs/api/foundation-user.defaultuser.clearpaths.md +17 -0
  28. package/docs/api/foundation-user.defaultuser.cleartrackinghistory.md +16 -0
  29. package/docs/api/foundation-user.defaultuser.details.md +12 -0
  30. package/docs/api/foundation-user.defaultuser.haspermission.md +22 -0
  31. package/docs/api/foundation-user.defaultuser.hasprofile.md +22 -0
  32. package/docs/api/foundation-user.defaultuser.isadmin.md +16 -0
  33. package/docs/api/foundation-user.defaultuser.isanonymous.md +12 -0
  34. package/docs/api/foundation-user.defaultuser.isauthenticated.md +12 -0
  35. package/docs/api/foundation-user.defaultuser.isbanned.md +16 -0
  36. package/docs/api/foundation-user.defaultuser.lastaction.md +17 -0
  37. package/docs/api/foundation-user.defaultuser.lastpath.md +19 -0
  38. package/docs/api/foundation-user.defaultuser.md +51 -0
  39. package/docs/api/foundation-user.defaultuser.pathhistory.md +13 -0
  40. package/docs/api/foundation-user.defaultuser.permission.md +12 -0
  41. package/docs/api/foundation-user.defaultuser.profile.md +12 -0
  42. package/docs/api/foundation-user.defaultuser.rawproperties.md +18 -0
  43. package/docs/api/foundation-user.defaultuser.set.md +22 -0
  44. package/docs/api/foundation-user.defaultuser.sourceref.md +12 -0
  45. package/docs/api/foundation-user.defaultuser.trackaction.md +24 -0
  46. package/docs/api/foundation-user.defaultuser.trackpath.md +17 -0
  47. package/docs/api/foundation-user.defaultuser.unset.md +16 -0
  48. package/docs/api/foundation-user.defaultuser.userkvs.md +14 -0
  49. package/docs/api/foundation-user.defaultuser.username.md +12 -0
  50. package/docs/api/foundation-user.defaultuserconfig.md +13 -0
  51. package/docs/api/foundation-user.getuser.md +30 -0
  52. package/docs/api/foundation-user.logger.md +12 -0
  53. package/docs/api/foundation-user.md +47 -0
  54. package/docs/api/foundation-user.setuserproperties.details.md +11 -0
  55. package/docs/api/foundation-user.setuserproperties.md +26 -0
  56. package/docs/api/foundation-user.setuserproperties.permission.md +11 -0
  57. package/docs/api/foundation-user.setuserproperties.profile.md +11 -0
  58. package/docs/api/foundation-user.setuserproperties.sourceref.md +11 -0
  59. package/docs/api/foundation-user.setuserproperties.userkvs.md +11 -0
  60. package/docs/api/foundation-user.setuserproperties.username.md +11 -0
  61. package/docs/api/foundation-user.user.addauthenticationchangelistener.md +33 -0
  62. package/docs/api/foundation-user.user.cleartrackinghistory.md +15 -0
  63. package/docs/api/foundation-user.user.details.md +11 -0
  64. package/docs/api/foundation-user.user.haspermission.md +22 -0
  65. package/docs/api/foundation-user.user.hasprofile.md +22 -0
  66. package/docs/api/foundation-user.user.isadmin.md +15 -0
  67. package/docs/api/foundation-user.user.isanonymous.md +11 -0
  68. package/docs/api/foundation-user.user.isauthenticated.md +11 -0
  69. package/docs/api/foundation-user.user.isbanned.md +15 -0
  70. package/docs/api/foundation-user.user.md +56 -0
  71. package/docs/api/foundation-user.user.permission.md +11 -0
  72. package/docs/api/foundation-user.user.profile.md +11 -0
  73. package/docs/api/foundation-user.user.rawproperties.md +18 -0
  74. package/docs/api/foundation-user.user.set.md +22 -0
  75. package/docs/api/foundation-user.user.sourceref.md +11 -0
  76. package/docs/api/foundation-user.user.unset.md +15 -0
  77. package/docs/api/foundation-user.user.userkvs.md +13 -0
  78. package/docs/api/foundation-user.user.username.md +11 -0
  79. package/docs/api/foundation-user.useractionhistory.actionhistory.md +13 -0
  80. package/docs/api/foundation-user.useractionhistory.clearactions.md +17 -0
  81. package/docs/api/foundation-user.useractionhistory.lastaction.md +17 -0
  82. package/docs/api/foundation-user.useractionhistory.md +32 -0
  83. package/docs/api/foundation-user.useractionhistory.trackaction.md +24 -0
  84. package/docs/api/foundation-user.userauthenticationchangeevent.md +18 -0
  85. package/docs/api/foundation-user.userauthenticationchangetype.md +13 -0
  86. package/docs/api/foundation-user.userconfig.md +28 -0
  87. package/docs/api/foundation-user.userconfig.setuser.md +29 -0
  88. package/docs/api/foundation-user.userconfig.trackactionexclusions.md +15 -0
  89. package/docs/api/foundation-user.userconfig.trackpathexclusions.md +15 -0
  90. package/docs/api/foundation-user.userconfig.unsetuser.md +24 -0
  91. package/docs/api/foundation-user.userdetailsproductproperty.md +20 -0
  92. package/docs/api/foundation-user.userdetailsproductproperty.name.md +11 -0
  93. package/docs/api/foundation-user.userdetailsproductproperty.version.md +11 -0
  94. package/docs/api/foundation-user.userdetailsproperty.daystopasswordexpiry.md +11 -0
  95. package/docs/api/foundation-user.userdetailsproperty.failedloginattempts.md +11 -0
  96. package/docs/api/foundation-user.userdetailsproperty.heartbeatintervalsecs.md +11 -0
  97. package/docs/api/foundation-user.userdetailsproperty.lastlogindatetime.md +11 -0
  98. package/docs/api/foundation-user.userdetailsproperty.md +25 -0
  99. package/docs/api/foundation-user.userdetailsproperty.product.md +11 -0
  100. package/docs/api/foundation-user.userdetailsproperty.rejectedloginattempts.md +11 -0
  101. package/docs/api/foundation-user.userdetailsproperty.system.md +11 -0
  102. package/docs/api/foundation-user.userdetailssystemproperty.date.md +11 -0
  103. package/docs/api/foundation-user.userdetailssystemproperty.md +19 -0
  104. package/docs/api/foundation-user.userkvsproperty.md +12 -0
  105. package/docs/api/foundation-user.userpathhistory.clearpaths.md +17 -0
  106. package/docs/api/foundation-user.userpathhistory.lastpath.md +19 -0
  107. package/docs/api/foundation-user.userpathhistory.md +32 -0
  108. package/docs/api/foundation-user.userpathhistory.pathhistory.md +13 -0
  109. package/docs/api/foundation-user.userpathhistory.trackpath.md +17 -0
  110. package/docs/api/foundation-user.userqueueproperties.md +22 -0
  111. package/docs/api/foundation-user.userqueueproperties.updatequeue.md +11 -0
  112. package/docs/api/foundation-user.userqueueproperties.zeromqproxyinboundport.md +11 -0
  113. package/docs/api/foundation-user.userqueueproperties.zeromqproxymodeenabled.md +11 -0
  114. package/docs/api/foundation-user.userqueueproperties.zeromqproxyoutboundport.md +11 -0
  115. package/docs/api/index.md +12 -0
  116. package/docs/api-report.md +277 -0
  117. package/license.txt +46 -0
  118. package/package.json +48 -0
package/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # Genesis User
2
+
3
+ [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)
4
+ [![TypeScript](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg)](https://www.typescriptlang.org/)
5
+
6
+ `foundation-user` provides the [User](./docs/api/foundation-user.user.md) singleton, which always exists in either an
7
+ anonymous or authenticated mode.
8
+
9
+ ### Get User reference
10
+ User is a singleton. You can access it via the DI container.
11
+ ```ts
12
+ import { User } from '@genesislcap/foundation-user';
13
+ ...
14
+ @User private user: User
15
+ ```
16
+
17
+ ...or via a utility if your app is not using decorators or the DI container.
18
+ ```ts
19
+ import { getUser } from '@genesislcap/foundation-user';
20
+ ...
21
+ private user = getUser();
22
+ ```
23
+
24
+ User properties are decorated with `@observable`, meaning in FAST terms it's reactive, and you can bind to properties
25
+ directly. For example, `this.user.isAuthenticated`. However, you can also monitor the user's authentication status using
26
+ an event listener.
27
+
28
+ ```ts
29
+ import type { UserAuthenticationChangeEvent } from '@genesislcap/foundation-user';
30
+ ...
31
+ const unsubscribeUser = this.user.addAuthenticationChangeListener((event: UserAuthenticationChangeEvent) => {
32
+ console.log('User authenticated?', event.detail); // < boolean === this.user.isAuthenticated
33
+ });
34
+ ```
35
+
36
+ See the [User API Docs](./docs/api/foundation-user.user.md) for more information.
37
+
38
+ ## License
39
+
40
+ Note: this project provides front-end dependencies and uses licensed components listed in the next section; thus, licenses for those components are required during development. Contact [Genesis Global](https://genesis.global/contact-us/) for more details.
41
+
42
+ ### Licensed components
43
+ Genesis low-code platform
@@ -0,0 +1,53 @@
1
+ import { SetUserProperties } from './types';
2
+ import type { User } from './user';
3
+ /**
4
+ * @internal
5
+ */
6
+ type WriteableUser = {
7
+ -readonly [P in keyof User]: User[P];
8
+ };
9
+ /**
10
+ * UserConfig DI interface.
11
+ *
12
+ * @public
13
+ */
14
+ export interface UserConfig {
15
+ /**
16
+ * Exclude certain actions from tracking.
17
+ *
18
+ * See {@link UserPathHistory}
19
+ */
20
+ trackActionExclusions: unknown[];
21
+ /**
22
+ * Exclude certain paths from tracking.
23
+ *
24
+ * See {@link UserActionHistory}
25
+ */
26
+ trackPathExclusions: string[];
27
+ /**
28
+ * User property setter.
29
+ *
30
+ * @remarks
31
+ * The user is typically set from the result of a LoginAck.
32
+ */
33
+ setUser(user: WriteableUser, properties: Partial<SetUserProperties>): User;
34
+ /**
35
+ * User property un-setter.
36
+ */
37
+ unsetUser(user: WriteableUser): User;
38
+ }
39
+ /**
40
+ * Default UserConfig DI implementation.
41
+ * @public
42
+ */
43
+ export declare const defaultUserConfig: UserConfig;
44
+ /**
45
+ * UserConfig DI key.
46
+ *
47
+ * @internal
48
+ * @privateRemarks
49
+ * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.
50
+ */
51
+ export declare const UserConfig: import("@microsoft/fast-foundation").InterfaceSymbol<UserConfig>;
52
+ export {};
53
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEnC;;GAEG;AACH,KAAK,aAAa,GAAG;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,qBAAqB,EAAE,OAAO,EAAE,CAAC;IAEjC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAE9B;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IAE3E;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,UA0C/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,kEAAuE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './types';
3
+ export * from './user';
4
+ export * from './logger';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.federated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.federated.d.ts","sourceRoot":"","sources":["../../src/index.federated.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @public
3
+ */
4
+ export declare const logger: import("@genesislcap/foundation-logger").Logger;
5
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,MAAM,iDAAkC,CAAC"}
@@ -0,0 +1,11 @@
1
+ // This file is read by tools that parse documentation comments conforming to the TSDoc standard.
2
+ // It should be published with your NPM package. It should not be tracked by Git.
3
+ {
4
+ "tsdocVersion": "0.12",
5
+ "toolPackages": [
6
+ {
7
+ "packageName": "@microsoft/api-extractor",
8
+ "packageVersion": "7.34.9"
9
+ }
10
+ ]
11
+ }
@@ -0,0 +1,134 @@
1
+ /**
2
+ * UserAuthenticationChangeType.
3
+ * @public
4
+ */
5
+ export declare const UserAuthenticationChangeType = "user-authentication-change";
6
+ /**
7
+ * UserAuthenticationChangeEvent.
8
+ *
9
+ * @remarks
10
+ * Detail will either be `true` or `false` to indicate authentication status.
11
+ *
12
+ * @public
13
+ */
14
+ export type UserAuthenticationChangeEvent = CustomEvent<boolean>;
15
+ /**
16
+ * UserPathHistory.
17
+ *
18
+ * @remarks
19
+ * APIs to track a user's path history. Includes the pathname, search and hash only.
20
+ * This is not intended proxy or replace the History API.
21
+ *
22
+ * @privateRemarks
23
+ * Integrate with foundation analytics? Users could then simply call `user.trackPath` and we could engage analytics.
24
+ * We should move analytics out of comms first.
25
+ *
26
+ * @public
27
+ */
28
+ export interface UserPathHistory {
29
+ /**
30
+ * Array of paths that have been tracked.
31
+ */
32
+ readonly pathHistory: string[];
33
+ /**
34
+ * Track current path.
35
+ */
36
+ trackPath(): string;
37
+ /**
38
+ * Clears path history.
39
+ */
40
+ clearPaths(): void;
41
+ /**
42
+ * May be used to return to a target path after authentication.
43
+ * @returns The last stored path.
44
+ */
45
+ lastPath(): string | undefined;
46
+ }
47
+ /**
48
+ * UserActionHistory.
49
+ *
50
+ * @remarks
51
+ * APIs to track a user's action history.
52
+ *
53
+ * @privateRemarks
54
+ * Integrate with foundation analytics? Users could then simply call `user.trackAction` and we could engage analytics.
55
+ * We should move analytics out of comms first.
56
+ *
57
+ * @public
58
+ */
59
+ export interface UserActionHistory {
60
+ /**
61
+ * Array of actions that have been tracked.
62
+ */
63
+ readonly actionHistory: unknown[];
64
+ /**
65
+ * Track an action.
66
+ */
67
+ trackAction<TDetails = unknown>(details: TDetails): void;
68
+ /**
69
+ * Clears action history.
70
+ */
71
+ clearActions(): void;
72
+ /**
73
+ * @returns The last stored action.
74
+ */
75
+ lastAction(): unknown;
76
+ }
77
+ /**
78
+ * @public
79
+ */
80
+ export interface UserKVsProperty {
81
+ readonly [key: string]: any;
82
+ }
83
+ /**
84
+ * @public
85
+ */
86
+ export interface UserDetailsSystemProperty {
87
+ readonly date: string;
88
+ readonly [key: string]: any;
89
+ }
90
+ /**
91
+ * @public
92
+ */
93
+ export interface UserDetailsProductProperty {
94
+ readonly name: string;
95
+ readonly version: string;
96
+ readonly [key: string]: any;
97
+ }
98
+ /**
99
+ * @public
100
+ */
101
+ export interface UserQueueProperties {
102
+ readonly updateQueue: string;
103
+ readonly zeroMqProxyModeEnabled: boolean;
104
+ readonly zeroMqProxyInboundPort: number;
105
+ readonly zeroMqProxyOutboundPort: number;
106
+ }
107
+ /**
108
+ * @public
109
+ */
110
+ export interface UserDetailsProperty {
111
+ readonly system: UserDetailsSystemProperty;
112
+ readonly product: UserDetailsProductProperty[];
113
+ readonly heartbeatIntervalSecs: number;
114
+ readonly failedLoginAttempts: number;
115
+ readonly rejectedLoginAttempts: number;
116
+ readonly lastLoginDatetime: number;
117
+ readonly daysToPasswordExpiry: number;
118
+ readonly [key: string]: any;
119
+ }
120
+ /**
121
+ * SetUserProperties is a partial match of `LoginAck` from `@genesislcap/foundation-auth`.
122
+ *
123
+ * @public
124
+ */
125
+ export interface SetUserProperties extends Partial<UserQueueProperties> {
126
+ readonly sourceRef: string;
127
+ readonly userName: string;
128
+ readonly userKVs: UserKVsProperty;
129
+ readonly details: UserDetailsProperty;
130
+ readonly permission: string[];
131
+ readonly profile: string[];
132
+ readonly [key: string]: any;
133
+ }
134
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,4BAA4B,+BAA+B,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAE/B;;OAEG;IACH,SAAS,IAAI,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IAEnB;;;OAGG;IACH,QAAQ,IAAI,MAAM,GAAG,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;IAElC;;OAEG;IACH,WAAW,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEzD;;OAEG;IACH,YAAY,IAAI,IAAI,CAAC;IAErB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACzC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,0BAA0B,EAAE,CAAC;IAC/C,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAkB,SAAQ,OAAO,CAAC,mBAAmB,CAAC;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CAC7B"}
@@ -0,0 +1,167 @@
1
+ import { Listener } from '@genesislcap/foundation-utils';
2
+ import { UserConfig } from './config';
3
+ import type { SetUserProperties, UserActionHistory, UserAuthenticationChangeEvent, UserPathHistory } from './types';
4
+ /**
5
+ * User interface.
6
+ *
7
+ * @remarks
8
+ * The user singleton, which always exists in either an anonymous or authenticated mode.
9
+ *
10
+ * @privateRemarks
11
+ * Provides `username` and `userName` for backwards compatability.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * import { User } from '@genesislcap/foundation-user';
16
+ * ...
17
+ * @User private user: User
18
+ * ```
19
+ *
20
+ * @public
21
+ */
22
+ export interface User extends UserPathHistory, UserActionHistory {
23
+ readonly isAuthenticated: boolean;
24
+ readonly isAnonymous: boolean;
25
+ readonly userKVs: {
26
+ [key: string]: any;
27
+ };
28
+ readonly details: SetUserProperties['details'];
29
+ readonly permission: string[];
30
+ readonly profile: string[];
31
+ readonly sourceRef: string;
32
+ readonly userName: string;
33
+ readonly username: string;
34
+ /**
35
+ * A structuredClone of the raw unmanaged properties used to set the user.
36
+ *
37
+ * @remarks
38
+ * This offers developers an escape hatch to the raw properties. If you feel there's a gap in the User interface based
39
+ * on your application requirements, please raise a request for such properties to be moved onto the interface.
40
+ */
41
+ readonly rawProperties: Partial<SetUserProperties>;
42
+ /**
43
+ * @param properties - The UserProperties used to populate the User.
44
+ */
45
+ set(properties: Partial<SetUserProperties>): User;
46
+ unset(): User;
47
+ isAdmin(): boolean;
48
+ isBanned(): boolean;
49
+ /**
50
+ * @param permission - A permission string or an array of permission strings to check.
51
+ */
52
+ hasPermission(permission: string | string[]): boolean;
53
+ /**
54
+ * @param profile - A profile string or an array of profile strings to check.
55
+ */
56
+ hasProfile(profile: string | string[]): boolean;
57
+ /**
58
+ * @example
59
+ * ```ts
60
+ * import type { UserAuthenticationChangeEvent } from '@genesislcap/foundation-user';
61
+ * ...
62
+ * const unsubscribe = this.user.addAuthenticationChangeListener((event: UserAuthenticationChangeEvent) => {
63
+ * console.log('User authenticated?', event.detail);
64
+ * });
65
+ * ```
66
+ *
67
+ * @param listener - A listener function.
68
+ */
69
+ addAuthenticationChangeListener(listener: Listener<UserAuthenticationChangeEvent>): () => void;
70
+ clearTrackingHistory(): void;
71
+ }
72
+ /**
73
+ * Default User implementation.
74
+ * @public
75
+ */
76
+ export declare class DefaultUser implements User {
77
+ /** @internal */
78
+ protected config: UserConfig;
79
+ /** {@inheritDoc UserPathHistory.pathHistory} */
80
+ pathHistory: string[];
81
+ /** {@inheritDoc UserActionHistory.actionHistory} */
82
+ actionHistory: unknown[];
83
+ /** {@inheritDoc User.isAuthenticated} */
84
+ isAuthenticated: boolean;
85
+ /** {@inheritDoc User.userKVs} */
86
+ userKVs: {
87
+ [key: string]: any;
88
+ };
89
+ /** {@inheritDoc User.details} */
90
+ details: SetUserProperties['details'];
91
+ /** {@inheritDoc User.permission} */
92
+ permission: string[];
93
+ /** {@inheritDoc User.profile} */
94
+ profile: string[];
95
+ /** {@inheritDoc User.sourceRef} */
96
+ sourceRef: string;
97
+ /** {@inheritDoc User.userName} */
98
+ userName: string;
99
+ /** {@inheritDoc User.rawProperties} */
100
+ rawProperties: Partial<SetUserProperties>;
101
+ /** {@inheritDoc User.set} */
102
+ set(properties: Partial<SetUserProperties>): User;
103
+ /** {@inheritDoc User.unset} */
104
+ unset(): User;
105
+ /** @internal */
106
+ protected userNameChanged(): void;
107
+ /** {@inheritDoc User.username} */
108
+ get username(): string;
109
+ /** {@inheritDoc User.isAnonymous} */
110
+ get isAnonymous(): boolean;
111
+ /** {@inheritDoc User.isAdmin} */
112
+ isAdmin(): boolean;
113
+ /** {@inheritDoc User.isBanned} */
114
+ isBanned(): boolean;
115
+ /** {@inheritDoc User.hasPermission} */
116
+ hasPermission(permission: string | string[]): boolean;
117
+ /** {@inheritDoc User.hasProfile} */
118
+ hasProfile(profile: string | string[]): boolean;
119
+ /** {@inheritDoc UserPathHistory.trackPath} */
120
+ trackPath(): string;
121
+ /** {@inheritDoc UserPathHistory.clearPaths} */
122
+ clearPaths(): void;
123
+ /** {@inheritDoc UserPathHistory.lastPath} */
124
+ lastPath(): string;
125
+ /** {@inheritDoc UserActionHistory.trackAction} */
126
+ trackAction<TDetails = unknown>(details: TDetails): void;
127
+ /** {@inheritDoc UserActionHistory.clearActions} */
128
+ clearActions(): void;
129
+ /** {@inheritDoc UserActionHistory.lastAction} */
130
+ lastAction(): unknown;
131
+ /** {@inheritDoc User.clearTrackingHistory} */
132
+ clearTrackingHistory(): void;
133
+ /** @internal */
134
+ protected hasKey(keys: string[], key: string | string[]): boolean;
135
+ /** @internal */
136
+ protected authenticationChangeListeners: import("@genesislcap/foundation-utils").Observer<UserAuthenticationChangeEvent>;
137
+ /** {@inheritDoc User.addAuthenticationChangeListener} */
138
+ addAuthenticationChangeListener(listener: Listener<UserAuthenticationChangeEvent>): () => void;
139
+ /** @internal */
140
+ protected isAuthenticatedChanged(): void;
141
+ }
142
+ /**
143
+ * User DI key.
144
+ *
145
+ * @privateRemarks
146
+ * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.
147
+ *
148
+ * @internal
149
+ */
150
+ export declare const User: import("@microsoft/fast-foundation").InterfaceSymbol<User>;
151
+ /**
152
+ * Gets User from the DI container.
153
+ *
154
+ * @remarks
155
+ * A utility method for host applications that are not using decorators or the DI container.
156
+ *
157
+ * @example
158
+ * ```ts
159
+ * import { getUser, User } from '@genesislcap/foundation-user';
160
+ * ...
161
+ * private user: User = getUser();
162
+ * ```
163
+ *
164
+ * @public
165
+ */
166
+ export declare function getUser(): User;
167
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/user.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { DI } from '@microsoft/fast-foundation';
2
+ import { logger } from './logger';
3
+ /**
4
+ * Default UserConfig DI implementation.
5
+ * @public
6
+ */
7
+ export const defaultUserConfig = {
8
+ trackActionExclusions: [],
9
+ trackPathExclusions: [''],
10
+ setUser(user, properties) {
11
+ if (user.isAuthenticated) {
12
+ throw new Error(`User already set. If this is intentional, please call User.unset first.`);
13
+ }
14
+ logger.debug('setUser', properties);
15
+ /**
16
+ * Create a clone of the raw properties.
17
+ */
18
+ user.rawProperties = structuredClone(properties);
19
+ /**
20
+ * Set managed properties
21
+ */
22
+ user.userKVs = properties.userKVs;
23
+ user.details = properties.details;
24
+ user.permission = properties.permission;
25
+ user.profile = properties.profile;
26
+ user.sourceRef = properties.sourceRef;
27
+ user.userName = properties.userName;
28
+ user.isAuthenticated = true;
29
+ return user;
30
+ },
31
+ unsetUser(user) {
32
+ logger.debug('unsetUser');
33
+ /**
34
+ * Unset raw properties ref
35
+ */
36
+ user.rawProperties = undefined;
37
+ /**
38
+ * Unset managed properties
39
+ */
40
+ user.userKVs = undefined;
41
+ user.details = undefined;
42
+ user.permission = undefined;
43
+ user.profile = undefined;
44
+ user.sourceRef = undefined;
45
+ user.userName = undefined;
46
+ user.isAuthenticated = false;
47
+ return user;
48
+ },
49
+ };
50
+ /**
51
+ * UserConfig DI key.
52
+ *
53
+ * @internal
54
+ * @privateRemarks
55
+ * Marked as internal to stop api-extractor becoming confused cross-linking tokens with the same name.
56
+ */
57
+ export const UserConfig = DI.createInterface((x) => x.instance(defaultUserConfig));
@@ -0,0 +1 @@
1
+ import('./index');
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './types';
3
+ export * from './user';
4
+ export * from './logger';
@@ -0,0 +1,5 @@
1
+ import { createLogger } from '@genesislcap/foundation-logger';
2
+ /**
3
+ * @public
4
+ */
5
+ export const logger = createLogger('foundation-user');
@@ -0,0 +1,5 @@
1
+ /**
2
+ * UserAuthenticationChangeType.
3
+ * @public
4
+ */
5
+ export const UserAuthenticationChangeType = 'user-authentication-change';