@lightdash/common 0.1790.0 → 0.1792.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 (83) hide show
  1. package/dist/cjs/authorization/index.d.ts +1 -0
  2. package/dist/cjs/authorization/index.d.ts.map +1 -1
  3. package/dist/cjs/authorization/index.js +1 -0
  4. package/dist/cjs/authorization/index.js.map +1 -1
  5. package/dist/cjs/authorization/scopeAbility.d.ts +5 -0
  6. package/dist/cjs/authorization/scopeAbility.d.ts.map +1 -0
  7. package/dist/cjs/authorization/scopeAbility.js +49 -0
  8. package/dist/cjs/authorization/scopeAbility.js.map +1 -0
  9. package/dist/cjs/authorization/scopeAbility.test.d.ts +2 -0
  10. package/dist/cjs/authorization/scopeAbility.test.d.ts.map +1 -0
  11. package/dist/cjs/authorization/scopeAbility.test.js +259 -0
  12. package/dist/cjs/authorization/scopeAbility.test.js.map +1 -0
  13. package/dist/cjs/authorization/types.d.ts +2 -2
  14. package/dist/cjs/authorization/types.d.ts.map +1 -1
  15. package/dist/cjs/ee/embed/index.d.ts +3 -3
  16. package/dist/cjs/ee/embed/index.d.ts.map +1 -1
  17. package/dist/cjs/ee/embed/index.js.map +1 -1
  18. package/dist/cjs/index.d.ts +1 -1
  19. package/dist/cjs/types/auth.d.ts +41 -8
  20. package/dist/cjs/types/auth.d.ts.map +1 -1
  21. package/dist/cjs/types/auth.js +11 -5
  22. package/dist/cjs/types/auth.js.map +1 -1
  23. package/dist/cjs/types/slack.d.ts +5 -8
  24. package/dist/cjs/types/slack.d.ts.map +1 -1
  25. package/dist/cjs/types/slackSettings.d.ts +1 -1
  26. package/dist/cjs/types/slackSettings.d.ts.map +1 -1
  27. package/dist/cjs/types/slackSettings.js +0 -14
  28. package/dist/cjs/types/slackSettings.js.map +1 -1
  29. package/dist/cjs/types/user.d.ts +29 -9
  30. package/dist/cjs/types/user.d.ts.map +1 -1
  31. package/dist/cjs/types/user.js.map +1 -1
  32. package/dist/esm/authorization/index.d.ts +1 -0
  33. package/dist/esm/authorization/index.d.ts.map +1 -1
  34. package/dist/esm/authorization/index.js +1 -0
  35. package/dist/esm/authorization/index.js.map +1 -1
  36. package/dist/esm/authorization/scopeAbility.d.ts +5 -0
  37. package/dist/esm/authorization/scopeAbility.d.ts.map +1 -0
  38. package/dist/esm/authorization/scopeAbility.js +46 -0
  39. package/dist/esm/authorization/scopeAbility.js.map +1 -0
  40. package/dist/esm/authorization/scopeAbility.test.d.ts +2 -0
  41. package/dist/esm/authorization/scopeAbility.test.d.ts.map +1 -0
  42. package/dist/esm/authorization/scopeAbility.test.js +257 -0
  43. package/dist/esm/authorization/scopeAbility.test.js.map +1 -0
  44. package/dist/esm/authorization/types.d.ts +2 -2
  45. package/dist/esm/authorization/types.d.ts.map +1 -1
  46. package/dist/esm/ee/embed/index.d.ts +3 -3
  47. package/dist/esm/ee/embed/index.d.ts.map +1 -1
  48. package/dist/esm/ee/embed/index.js.map +1 -1
  49. package/dist/esm/index.d.ts +1 -1
  50. package/dist/esm/types/auth.d.ts +41 -8
  51. package/dist/esm/types/auth.d.ts.map +1 -1
  52. package/dist/esm/types/auth.js +9 -4
  53. package/dist/esm/types/auth.js.map +1 -1
  54. package/dist/esm/types/slack.d.ts +5 -8
  55. package/dist/esm/types/slack.d.ts.map +1 -1
  56. package/dist/esm/types/slackSettings.d.ts +1 -1
  57. package/dist/esm/types/slackSettings.d.ts.map +1 -1
  58. package/dist/esm/types/slackSettings.js +1 -13
  59. package/dist/esm/types/slackSettings.js.map +1 -1
  60. package/dist/esm/types/user.d.ts +29 -9
  61. package/dist/esm/types/user.d.ts.map +1 -1
  62. package/dist/esm/types/user.js.map +1 -1
  63. package/dist/tsconfig.types.tsbuildinfo +1 -1
  64. package/dist/types/authorization/index.d.ts +1 -0
  65. package/dist/types/authorization/index.d.ts.map +1 -1
  66. package/dist/types/authorization/scopeAbility.d.ts +5 -0
  67. package/dist/types/authorization/scopeAbility.d.ts.map +1 -0
  68. package/dist/types/authorization/scopeAbility.test.d.ts +2 -0
  69. package/dist/types/authorization/scopeAbility.test.d.ts.map +1 -0
  70. package/dist/types/authorization/types.d.ts +2 -2
  71. package/dist/types/authorization/types.d.ts.map +1 -1
  72. package/dist/types/ee/embed/index.d.ts +3 -3
  73. package/dist/types/ee/embed/index.d.ts.map +1 -1
  74. package/dist/types/index.d.ts +1 -1
  75. package/dist/types/types/auth.d.ts +41 -8
  76. package/dist/types/types/auth.d.ts.map +1 -1
  77. package/dist/types/types/slack.d.ts +5 -8
  78. package/dist/types/types/slack.d.ts.map +1 -1
  79. package/dist/types/types/slackSettings.d.ts +1 -1
  80. package/dist/types/types/slackSettings.d.ts.map +1 -1
  81. package/dist/types/types/user.d.ts +29 -9
  82. package/dist/types/types/user.d.ts.map +1 -1
  83. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
- import { type CreateEmbedJwt } from '../ee';
1
+ import { type CreateEmbedJwt, type DashboardFilterInteractivityOptions } from '../ee';
2
2
  import { type Organization } from './organization';
3
- import { type SessionUser } from './user';
3
+ import { type AccountUser, type ExternalUser, type IntrinsicUserAttributes, type LightdashSessionUser } from './user';
4
+ import { type UserAttributeValueMap } from './userAttributes';
4
5
  type AccountAuthType = 'session' | 'pat' | 'service-account' | 'jwt' | 'browserless' | 'scim';
5
6
  type IAccountAuth = {
6
7
  type: AccountAuthType;
@@ -30,15 +31,47 @@ type ServiceAccountAuth = LightdashAuth<{
30
31
  source: string;
31
32
  }>;
32
33
  type LightdashAccountAuth = EmbeddedAccountAuth | LightdashUserAccountAuth | ServiceAccountAuth;
34
+ export type AccountAccessControls = {
35
+ userAttributes: UserAttributeValueMap;
36
+ intrinsicUserAttributes: IntrinsicUserAttributes;
37
+ };
33
38
  /**
34
- * The account object is used to store the account information for the user.
35
- * It's meant to be agnostic of the authentication method.
39
+ * The dynamic access permissions the account has
36
40
  */
37
- export type Account = {
38
- organization: Pick<Organization, 'organizationUuid'>;
41
+ export type AccountAccess = {
42
+ /**
43
+ * The dashboard ID the account has access to.
44
+ * This is for backwards compatibility with the current JWT Embed API.
45
+ * */
46
+ dashboardId: string;
47
+ filtering?: DashboardFilterInteractivityOptions;
48
+ controls?: AccountAccessControls;
49
+ };
50
+ type AccountOrganization = Pick<Organization, 'organizationUuid' | 'name'>;
51
+ type ILightdashAccount = {
52
+ organization: AccountOrganization;
39
53
  authentication: LightdashAccountAuth;
40
- user: SessionUser;
54
+ user: AccountUser;
41
55
  };
42
- export declare function getEmbeddedAuth(account: Account): EmbeddedAccountAuth;
56
+ type LightdashAccount<T extends ILightdashAccount> = {} & T;
57
+ export type ExternalAccount = LightdashAccount<{
58
+ organization: AccountOrganization;
59
+ authentication: EmbeddedAccountAuth;
60
+ user: ExternalUser;
61
+ /** The access permissions the account has */
62
+ access: AccountAccess;
63
+ }>;
64
+ export type SessionAccount = LightdashAccount<{
65
+ organization: AccountOrganization;
66
+ authentication: LightdashUserAccountAuth;
67
+ user: LightdashSessionUser;
68
+ }>;
69
+ /**
70
+ * The account object is used to store the account information for the user.
71
+ * It's meant to be agnostic of the authentication method.
72
+ */
73
+ export type Account = SessionAccount | ExternalAccount;
74
+ export declare function assertEmbeddedAuth(account: Account | undefined): asserts account is ExternalAccount;
75
+ export declare function assertSessionAuth(account: Account | undefined): asserts account is SessionAccount;
43
76
  export {};
44
77
  //# sourceMappingURL=auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/types/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,KAAK,eAAe,GACd,SAAS,GACT,KAAK,GACL,iBAAiB,GACjB,KAAK,GACL,aAAa,GACb,MAAM,CAAC;AAEb,KAAK,YAAY,GAAG;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,aAAa,CAAC,CAAC,SAAS,YAAY,IAAI,CAAC,CAAC;AAE/C;;GAEG;AACH,oBAAY,eAAe;IACvB,IAAI,UAAU;IACd,eAAe,WAAW;IAC1B,qBAAqB,WAAW;CACnC;AAED,KAAK,mBAAmB,GAAG,aAAa,CAAC;IACrC,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,KAAK,wBAAwB,GAAG,aAAa,CAAC;IAC1C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,KAAK,kBAAkB,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAEH,KAAK,oBAAoB,GACnB,mBAAmB,GACnB,wBAAwB,GACxB,kBAAkB,CAAC;AAEzB;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG;IAClB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACrD,cAAc,EAAE,oBAAoB,CAAC;IACrC,IAAI,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAKrE"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/types/auth.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ForbiddenError } from './errors';
1
2
  /**
2
3
  * Prefixes for the authorization tokens we store in the database
3
4
  */
@@ -7,10 +8,14 @@ export var AuthTokenPrefix;
7
8
  AuthTokenPrefix["SERVICE_ACCOUNT"] = "ldsvc_";
8
9
  AuthTokenPrefix["PERSONAL_ACCESS_TOKEN"] = "ldpat_";
9
10
  })(AuthTokenPrefix || (AuthTokenPrefix = {}));
10
- export function getEmbeddedAuth(account) {
11
- if (account.authentication.type !== 'jwt') {
12
- throw new Error('Account is not an embedded account');
11
+ export function assertEmbeddedAuth(account) {
12
+ if (account?.authentication.type !== 'jwt') {
13
+ throw new ForbiddenError('Account is not an embedded account');
14
+ }
15
+ }
16
+ export function assertSessionAuth(account) {
17
+ if (account?.authentication.type !== 'session') {
18
+ throw new ForbiddenError('Account is not a session account');
13
19
  }
14
- return account.authentication;
15
20
  }
16
21
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/types/auth.ts"],"names":[],"mappings":"AAoBA;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,iCAAc,CAAA;IACd,6CAA0B,CAAA;IAC1B,mDAAgC,CAAA;AACpC,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AAiCD,MAAM,UAAU,eAAe,CAAC,OAAgB;IAC5C,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC,cAAc,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/types/auth.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA0B1C;;GAEG;AACH,MAAM,CAAN,IAAY,eAIX;AAJD,WAAY,eAAe;IACvB,iCAAc,CAAA;IACd,6CAA0B,CAAA;IAC1B,mDAAgC,CAAA;AACpC,CAAC,EAJW,eAAe,KAAf,eAAe,QAI1B;AA0ED,MAAM,UAAU,kBAAkB,CAC9B,OAA4B;IAE5B,IAAI,OAAO,EAAE,cAAc,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzC,MAAM,IAAI,cAAc,CAAC,oCAAoC,CAAC,CAAC;IACnE,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC7B,OAA4B;IAE5B,IAAI,OAAO,EAAE,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,cAAc,CAAC,kCAAkC,CAAC,CAAC;IACjE,CAAC;AACL,CAAC"}
@@ -1,15 +1,11 @@
1
+ import { type ApiSuccess, type ApiSuccessEmpty } from './api/success';
2
+ import { type SlackSettings } from './slackSettings';
1
3
  export type SlackChannel = {
2
4
  id: string;
3
5
  name: string;
4
6
  };
5
- export type ApiSlackChannelsResponse = {
6
- status: 'ok';
7
- results: SlackChannel[] | undefined;
8
- };
9
- export type ApiSlackCustomSettingsResponse = {
10
- status: 'ok';
11
- results: void;
12
- };
7
+ export type ApiSlackChannelsResponse = ApiSuccess<SlackChannel[] | undefined>;
8
+ export type ApiSlackCustomSettingsResponse = ApiSuccessEmpty;
13
9
  export type SlackChannelProjectMapping = {
14
10
  projectUuid: string;
15
11
  slackChannelId: string;
@@ -21,4 +17,5 @@ export type SlackAppCustomSettings = {
21
17
  slackChannelProjectMappings?: SlackChannelProjectMapping[];
22
18
  aiThreadAccessConsent?: boolean;
23
19
  };
20
+ export type ApiSlackGetInstallationResponse = ApiSuccess<SlackSettings | undefined>;
24
21
  //# sourceMappingURL=slack.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/types/slack.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACnC,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IACzC,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3D,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/types/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,MAAM,YAAY,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC;AAE9E,MAAM,MAAM,8BAA8B,GAAG,eAAe,CAAC;AAE7D,MAAM,MAAM,0BAA0B,GAAG;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3D,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,UAAU,CACpD,aAAa,GAAG,SAAS,CAC5B,CAAC"}
@@ -10,6 +10,6 @@ export type SlackSettings = {
10
10
  appProfilePhotoUrl: string | undefined;
11
11
  slackChannelProjectMappings?: SlackChannelProjectMapping[];
12
12
  aiThreadAccessConsent?: boolean;
13
+ hasRequiredScopes: boolean;
13
14
  };
14
- export declare const slackRequiredScopes: string[];
15
15
  //# sourceMappingURL=slackSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slackSettings.d.ts","sourceRoot":"","sources":["../../../src/types/slackSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3D,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,UAY/B,CAAC"}
1
+ {"version":3,"file":"slackSettings.d.ts","sourceRoot":"","sources":["../../../src/types/slackSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,MAAM,aAAa,GAAG;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,2BAA2B,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAC3D,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;CAC9B,CAAC"}
@@ -1,14 +1,2 @@
1
- export const slackRequiredScopes = [
2
- 'links:read',
3
- 'links:write',
4
- 'chat:write',
5
- 'chat:write.customize',
6
- 'channels:read',
7
- 'channels:join',
8
- 'groups:read',
9
- 'users:read',
10
- 'app_mentions:read',
11
- 'files:write',
12
- 'files:read',
13
- ];
1
+ export {};
14
2
  //# sourceMappingURL=slackSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slackSettings.js","sourceRoot":"","sources":["../../../src/types/slackSettings.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,sBAAsB;IACtB,eAAe;IACf,eAAe;IACf,aAAa;IACb,YAAY;IACZ,mBAAmB;IACnB,aAAa;IACb,YAAY;CACf,CAAC"}
1
+ {"version":3,"file":"slackSettings.js","sourceRoot":"","sources":["../../../src/types/slackSettings.ts"],"names":[],"mappings":""}
@@ -2,21 +2,42 @@ import { type AbilityBuilder } from '@casl/ability';
2
2
  import { type MemberAbility } from '../authorization/types';
3
3
  import { type AnyType } from './any';
4
4
  import { type OpenIdIdentityIssuerType } from './openIdIdentity';
5
+ import { type Organization } from './organization';
5
6
  import { type OrganizationMemberRole } from './organizationMemberProfile';
6
- export type BaseUser = {
7
+ export type AccountUser = {
8
+ id: string;
9
+ email: string | undefined;
10
+ isActive: boolean;
11
+ abilityRules: AbilityBuilder<MemberAbility>['rules'];
12
+ ability: MemberAbility;
13
+ type: 'lightdash' | 'external';
14
+ };
15
+ export interface LightdashUser {
16
+ userUuid: string;
17
+ firstName: string;
18
+ lastName: string;
7
19
  organizationUuid?: string;
8
20
  organizationName?: string;
9
21
  organizationCreatedAt?: Date;
22
+ userId: number;
10
23
  role?: OrganizationMemberRole;
24
+ isTrackingAnonymized: boolean;
25
+ isMarketingOptedIn: boolean;
26
+ isSetupComplete: boolean;
27
+ email: string | undefined;
11
28
  isActive: boolean;
12
- };
13
- export interface LightdashUser extends BaseUser {
29
+ createdAt: Date;
30
+ updatedAt: Date;
31
+ isPending?: boolean;
32
+ }
33
+ export interface LightdashSessionUser extends AccountUser {
34
+ type: 'lightdash';
14
35
  userUuid: string;
15
36
  userId: number;
16
- type?: 'lightdash';
17
- email: string | undefined;
18
37
  firstName: string;
19
38
  lastName: string;
39
+ organization: Pick<Organization, 'organizationUuid' | 'name'>;
40
+ role?: OrganizationMemberRole;
20
41
  isTrackingAnonymized: boolean;
21
42
  isMarketingOptedIn: boolean;
22
43
  isSetupComplete: boolean;
@@ -24,11 +45,10 @@ export interface LightdashUser extends BaseUser {
24
45
  updatedAt: Date;
25
46
  isPending?: boolean;
26
47
  }
27
- export type ExternalUser = BaseUser & Partial<LightdashUser> & {
28
- externalId: string;
48
+ export interface ExternalUser extends AccountUser {
29
49
  type: 'external';
30
- };
31
- export type LightdashUserWithOrg = Required<LightdashUser | ExternalUser>;
50
+ }
51
+ export type LightdashUserWithOrg = Required<LightdashUser>;
32
52
  export declare const isUserWithOrg: (user: LightdashUser) => user is LightdashUserWithOrg;
33
53
  export interface LightdashUserWithAbilityRules extends LightdashUser {
34
54
  abilityRules: AbilityBuilder<MemberAbility>['rules'];
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/types/user.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/types/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE1E,MAAM,MAAM,WAAW,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,EAAE,aAAa,CAAC;IACvB,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;CAClC,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qBAAqB,CAAC,EAAE,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAE1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACrD,IAAI,EAAE,WAAW,CAAC;IAElB,QAAQ,EAAE,MAAM,CAAC;IAEjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,GAAG,MAAM,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAEhB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,IAAI,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE3D,eAAO,MAAM,aAAa,SAChB,aAAa,KACpB,IAAI,IAAI,oBAIsB,CAAC;AAElC,MAAM,WAAW,6BAA8B,SAAQ,aAAa;IAChE,YAAY,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,WAAY,SAAQ,6BAA6B;IAC9D,OAAO,EAAE,aAAa,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,wBAAwB,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;KAC/B,CAAC;CACL;AAED,eAAO,MAAM,YAAY,SAAU,OAAO,KAAG,IAAI,IAAI,UAUP,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAC9C,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,uBAAuB,EAAE,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC1C,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,oBAAY,gBAAgB;IACxB,KAAK,UAAU;IACf,SAAS,aAAa;CACzB;AAED,MAAM,MAAM,gBAAgB,GAAG,wBAAwB,GAAG,gBAAgB,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG;IACvB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACrC,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,0BAA0B,SAC7B,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,KACnC,uBAED,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/types/user.ts"],"names":[],"mappings":"AAuCA,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,IAAmB,EACS,EAAE,CAC9B,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;IACzC,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;IACzC,IAAI,CAAC,qBAAqB,YAAY,IAAI;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AA6BlC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAsB,EAAE,CAC9D,OAAO,IAAI,KAAK,QAAQ;IACxB,IAAI,KAAK,IAAI;IACb,IAAI,CAAC,QAAQ,KAAK,SAAS;IAC3B,IAAI,CAAC,MAAM,KAAK,SAAS;IACzB,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;IAC/B,IAAI,CAAC,MAAM,KAAK,IAAI;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;IACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;IACrC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC;AA0B/C,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,mCAAe,CAAA;IACf,0CAAsB,CAAA;AAC1B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAmBD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACtC,IAAkC,EACX,EAAE,CAAC,CAAC;IAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;CACpB,CAAC,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/types/user.ts"],"names":[],"mappings":"AA+DA,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,IAAmB,EACS,EAAE,CAC9B,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;IACzC,OAAO,IAAI,CAAC,gBAAgB,KAAK,QAAQ;IACzC,IAAI,CAAC,qBAAqB,YAAY,IAAI;IAC1C,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AA6BlC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAsB,EAAE,CAC9D,OAAO,IAAI,KAAK,QAAQ;IACxB,IAAI,KAAK,IAAI;IACb,IAAI,CAAC,QAAQ,KAAK,SAAS;IAC3B,IAAI,CAAC,MAAM,KAAK,SAAS;IACzB,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;IAC/B,IAAI,CAAC,MAAM,KAAK,IAAI;IACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ;IACvC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ;IACtC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ;IACrC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC;AA0B/C,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,mCAAe,CAAA;IACf,0CAAsB,CAAA;AAC1B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAmBD,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACtC,IAAkC,EACX,EAAE,CAAC,CAAC;IAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;CACpB,CAAC,CAAC"}