@fonoster/identity 0.8.24 → 0.8.26

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 (141) hide show
  1. package/dist/apikeys/{createApiKey.d.ts → createCreateApiKey.d.ts} +2 -2
  2. package/dist/apikeys/{createApiKey.js → createCreateApiKey.js} +5 -6
  3. package/dist/apikeys/createDeleteApiKey.d.ts +6 -0
  4. package/dist/apikeys/{deleteApiKey.js → createDeleteApiKey.js} +4 -4
  5. package/dist/apikeys/createListApiKeys.d.ts +6 -0
  6. package/dist/apikeys/{listApiKeys.js → createListApiKeys.js} +5 -6
  7. package/dist/apikeys/createRegenerateApiKey.d.ts +6 -0
  8. package/dist/apikeys/{regenerateApiKey.js → createRegenerateApiKey.js} +4 -4
  9. package/dist/apikeys/index.d.ts +4 -4
  10. package/dist/apikeys/index.js +4 -4
  11. package/dist/exchanges/{exchangeRefreshToken.d.ts → createExchangeApiKey.d.ts} +2 -2
  12. package/dist/exchanges/{exchangeApiKey.js → createExchangeApiKey.js} +6 -6
  13. package/dist/exchanges/{exchangeOauth2Code.d.ts → createExchangeCredentials.d.ts} +2 -2
  14. package/dist/exchanges/{exchangeCredentials.js → createExchangeCredentials.js} +6 -6
  15. package/dist/exchanges/{exchangeCredentials.d.ts → createExchangeOauth2Code.d.ts} +2 -2
  16. package/dist/exchanges/{exchangeOauth2Code.js → createExchangeOauth2Code.js} +6 -6
  17. package/dist/exchanges/{exchangeApiKey.d.ts → createExchangeRefreshToken.d.ts} +2 -2
  18. package/dist/exchanges/{exchangeRefreshToken.js → createExchangeRefreshToken.js} +4 -4
  19. package/dist/exchanges/exchangeTokens.js +5 -5
  20. package/dist/exchanges/index.d.ts +4 -5
  21. package/dist/exchanges/index.js +4 -5
  22. package/dist/exchanges/payloads/apikeys/createGetAccessTokenPayload.d.ts +5 -0
  23. package/dist/exchanges/payloads/apikeys/createGetAccessTokenPayload.js +46 -0
  24. package/dist/exchanges/payloads/apikeys/createGetRefreshTokenPayload.d.ts +5 -0
  25. package/dist/exchanges/payloads/apikeys/{getRefreshTokenPayload.js → createGetRefreshTokenPayload.js} +18 -16
  26. package/dist/exchanges/payloads/apikeys/index.d.ts +2 -2
  27. package/dist/exchanges/payloads/apikeys/index.js +2 -2
  28. package/dist/exchanges/payloads/buildRefreshTokenPayload.d.ts +2 -1
  29. package/dist/exchanges/payloads/buildRefreshTokenPayload.js +2 -2
  30. package/dist/exchanges/payloads/users/createGetAccessTokenPayload.d.ts +5 -0
  31. package/dist/exchanges/payloads/users/createGetAccessTokenPayload.js +75 -0
  32. package/dist/exchanges/payloads/users/createGetIdTokenPayload.d.ts +5 -0
  33. package/dist/exchanges/payloads/users/createGetIdTokenPayload.js +40 -0
  34. package/dist/exchanges/payloads/users/createGetRefreshTokenPayload.d.ts +5 -0
  35. package/dist/exchanges/payloads/users/{getRefreshTokenPayload.js → createGetRefreshTokenPayload.js} +22 -20
  36. package/dist/exchanges/payloads/users/index.d.ts +3 -3
  37. package/dist/exchanges/payloads/users/index.js +3 -3
  38. package/dist/exchanges/types.d.ts +1 -36
  39. package/dist/getPublicKey.d.ts +2 -2
  40. package/dist/getPublicKey.js +8 -6
  41. package/dist/index.d.ts +0 -2
  42. package/dist/index.js +0 -2
  43. package/dist/service.js +22 -22
  44. package/dist/{apikeys/listApiKeys.d.ts → users/createCreateUser.d.ts} +2 -2
  45. package/dist/users/{createUser.js → createCreateUser.js} +4 -4
  46. package/dist/users/{createUser.d.ts → createDeleteUser.d.ts} +2 -2
  47. package/dist/users/{deleteUser.js → createDeleteUser.js} +5 -6
  48. package/dist/{apikeys/deleteApiKey.d.ts → users/createGetUser.d.ts} +2 -2
  49. package/dist/users/{getUser.js → createGetUser.js} +5 -6
  50. package/dist/{apikeys/regenerateApiKey.d.ts → users/createUpdateUser.d.ts} +2 -2
  51. package/dist/users/{updateUser.js → createUpdateUser.js} +5 -6
  52. package/dist/users/index.d.ts +4 -4
  53. package/dist/users/index.js +4 -4
  54. package/dist/utils/createGenerateCallAccessToken.d.ts +6 -0
  55. package/dist/utils/{createCallAccessToken.js → createGenerateCallAccessToken.js} +29 -28
  56. package/dist/utils/{createWorkspaceInviteToken.d.ts → createGenerateWorkspaceInviteToken.d.ts} +2 -2
  57. package/dist/utils/{createWorkspaceInviteToken.js → createGenerateWorkspaceInviteToken.js} +21 -19
  58. package/dist/utils/createGetAccessKeyIdFromEmail.d.ts +3 -0
  59. package/dist/utils/{getAccessKeyIdFromEmail.js → createGetAccessKeyIdFromEmail.js} +8 -6
  60. package/dist/utils/{getApiKeyByAccessKeyId.d.ts → createGetApiKeyByAccessKeyId.d.ts} +5 -5
  61. package/dist/utils/{getApiKeyByAccessKeyId.js → createGetApiKeyByAccessKeyId.js} +13 -11
  62. package/dist/utils/{getUserByEmail.d.ts → createGetUserByEmail.d.ts} +2 -2
  63. package/dist/utils/{getUserByEmail.js → createGetUserByEmail.js} +10 -8
  64. package/dist/utils/createUpdateMembershipStatus.d.ts +3 -0
  65. package/dist/utils/{updateMembershipStatus.js → createUpdateMembershipStatus.js} +18 -16
  66. package/dist/utils/getAccessKeyIdFromToken.js +3 -4
  67. package/dist/utils/getUserRefFromToken.js +3 -4
  68. package/dist/utils/hasAccessToResource.js +3 -4
  69. package/dist/utils/index.d.ts +2 -8
  70. package/dist/utils/index.js +2 -8
  71. package/dist/verification/createVerifyCode.js +2 -2
  72. package/dist/workspaces/createCreateWorkspace.d.ts +6 -0
  73. package/dist/workspaces/{createWorkspace.js → createCreateWorkspace.js} +5 -6
  74. package/dist/workspaces/createDeleteWorkspace.d.ts +6 -0
  75. package/dist/workspaces/{deleteWorkspace.js → createDeleteWorkspace.js} +5 -6
  76. package/dist/workspaces/createGetWorkspace.d.ts +6 -0
  77. package/dist/workspaces/{getWorkspace.js → createGetWorkspace.js} +5 -6
  78. package/dist/workspaces/{inviteUserToWorkspace.d.ts → createInviteUserToWorkspace.d.ts} +2 -2
  79. package/dist/workspaces/{inviteUserToWorkspace.js → createInviteUserToWorkspace.js} +26 -25
  80. package/dist/workspaces/createIsAdminMember.d.ts +3 -0
  81. package/dist/workspaces/{isAdminMember.js → createIsAdminMember.js} +21 -19
  82. package/dist/workspaces/createIsWorkspaceMember.d.ts +3 -0
  83. package/dist/workspaces/createIsWorkspaceMember.js +33 -0
  84. package/dist/workspaces/createListWorkspaces.d.ts +6 -0
  85. package/dist/workspaces/{listWorkspaces.js → createListWorkspaces.js} +6 -8
  86. package/dist/workspaces/createRemoveUserFromWorkspace.d.ts +6 -0
  87. package/dist/workspaces/{removeUserFromWorkspace.js → createRemoveUserFromWorkspace.js} +8 -10
  88. package/dist/workspaces/{resendWorkspaceMembershipInvitation.d.ts → createResendWorkspaceMembershipInvitation.d.ts} +2 -2
  89. package/dist/workspaces/{resendWorkspaceMembershipInvitation.js → createResendWorkspaceMembershipInvitation.js} +10 -11
  90. package/dist/workspaces/createUpdateWorkspace.d.ts +6 -0
  91. package/dist/workspaces/{updateWorkspace.js → createUpdateWorkspace.js} +7 -8
  92. package/dist/workspaces/index.d.ts +8 -8
  93. package/dist/workspaces/index.js +8 -8
  94. package/package.json +5 -5
  95. package/dist/JsonWebErrorEnum.d.ts +0 -5
  96. package/dist/JsonWebErrorEnum.js +0 -26
  97. package/dist/createAuthInterceptor.d.ts +0 -15
  98. package/dist/createAuthInterceptor.js +0 -74
  99. package/dist/errors.d.ts +0 -4
  100. package/dist/errors.js +0 -35
  101. package/dist/exchanges/TokenUseEnum.d.ts +0 -6
  102. package/dist/exchanges/TokenUseEnum.js +0 -27
  103. package/dist/exchanges/payloads/apikeys/getAccessTokenPayload.d.ts +0 -4
  104. package/dist/exchanges/payloads/apikeys/getAccessTokenPayload.js +0 -44
  105. package/dist/exchanges/payloads/apikeys/getRefreshTokenPayload.d.ts +0 -4
  106. package/dist/exchanges/payloads/users/getAccessTokenPayload.d.ts +0 -4
  107. package/dist/exchanges/payloads/users/getAccessTokenPayload.js +0 -73
  108. package/dist/exchanges/payloads/users/getIdTokenPayload.d.ts +0 -4
  109. package/dist/exchanges/payloads/users/getIdTokenPayload.js +0 -38
  110. package/dist/exchanges/payloads/users/getRefreshTokenPayload.d.ts +0 -4
  111. package/dist/getPublicKeyClient.d.ts +0 -5
  112. package/dist/getPublicKeyClient.js +0 -71
  113. package/dist/roles.d.ts +0 -5
  114. package/dist/roles.js +0 -129
  115. package/dist/users/deleteUser.d.ts +0 -6
  116. package/dist/users/getUser.d.ts +0 -6
  117. package/dist/users/updateUser.d.ts +0 -6
  118. package/dist/utils/createCallAccessToken.d.ts +0 -6
  119. package/dist/utils/decodeToken.d.ts +0 -4
  120. package/dist/utils/decodeToken.js +0 -25
  121. package/dist/utils/getAccessKeyIdFromCall.d.ts +0 -3
  122. package/dist/utils/getAccessKeyIdFromCall.js +0 -8
  123. package/dist/utils/getAccessKeyIdFromEmail.d.ts +0 -3
  124. package/dist/utils/getTokenFromCall.d.ts +0 -3
  125. package/dist/utils/getTokenFromCall.js +0 -8
  126. package/dist/utils/hasAccess.d.ts +0 -3
  127. package/dist/utils/hasAccess.js +0 -9
  128. package/dist/utils/isValidToken.d.ts +0 -2
  129. package/dist/utils/isValidToken.js +0 -51
  130. package/dist/utils/tokenHasAccessKeyId.d.ts +0 -2
  131. package/dist/utils/tokenHasAccessKeyId.js +0 -28
  132. package/dist/utils/updateMembershipStatus.d.ts +0 -3
  133. package/dist/workspaces/createWorkspace.d.ts +0 -6
  134. package/dist/workspaces/deleteWorkspace.d.ts +0 -6
  135. package/dist/workspaces/getWorkspace.d.ts +0 -6
  136. package/dist/workspaces/isAdminMember.d.ts +0 -3
  137. package/dist/workspaces/isWorkspaceMember.d.ts +0 -3
  138. package/dist/workspaces/isWorkspaceMember.js +0 -31
  139. package/dist/workspaces/listWorkspaces.d.ts +0 -6
  140. package/dist/workspaces/removeUserFromWorkspace.d.ts +0 -6
  141. package/dist/workspaces/updateWorkspace.d.ts +0 -6
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.inviteUserToWorkspace = inviteUserToWorkspace;
12
+ exports.createInviteUserToWorkspace = createInviteUserToWorkspace;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -33,12 +33,11 @@ const logger_1 = require("@fonoster/logger");
33
33
  const types_1 = require("@fonoster/types");
34
34
  const grpc_js_1 = require("@grpc/grpc-js");
35
35
  const nanoid_1 = require("nanoid");
36
- const isAdminMember_1 = require("./isAdminMember");
37
- const isWorkspaceMember_1 = require("./isWorkspaceMember");
36
+ const createIsAdminMember_1 = require("./createIsAdminMember");
37
+ const createIsWorkspaceMember_1 = require("./createIsWorkspaceMember");
38
38
  const envs_1 = require("../envs");
39
39
  const utils_1 = require("../utils");
40
- const createWorkspaceInviteToken_1 = require("../utils/createWorkspaceInviteToken");
41
- const getTokenFromCall_1 = require("../utils/getTokenFromCall");
40
+ const createGenerateWorkspaceInviteToken_1 = require("../utils/createGenerateWorkspaceInviteToken");
42
41
  const getUserRefFromToken_1 = require("../utils/getUserRefFromToken");
43
42
  const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
44
43
  const userIsMemberError = {
@@ -56,24 +55,26 @@ const findUserByEmail = (prisma, email) => __awaiter(void 0, void 0, void 0, fun
56
55
  }
57
56
  });
58
57
  });
59
- const createUser = (prisma) => {
60
- return (request) => __awaiter(void 0, void 0, void 0, function* () {
61
- const { name, email, password } = request;
62
- return yield prisma.user.create({
63
- data: {
64
- name,
65
- email,
66
- accessKeyId: (0, utils_1.generateAccessKeyId)(utils_1.AccessKeyIdType.USER),
67
- password
68
- }
58
+ const createCreateUser = (prisma) => {
59
+ return function createUser(request) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ const { name, email, password } = request;
62
+ return yield prisma.user.create({
63
+ data: {
64
+ name,
65
+ email,
66
+ accessKeyId: (0, utils_1.generateAccessKeyId)(utils_1.AccessKeyIdType.USER),
67
+ password
68
+ }
69
+ });
69
70
  });
70
- });
71
+ };
71
72
  };
72
- function inviteUserToWorkspace(prisma, identityConfig, sendInvite) {
73
- const fn = (call, callback) => __awaiter(this, void 0, void 0, function* () {
74
- const token = (0, getTokenFromCall_1.getTokenFromCall)(call);
73
+ function createInviteUserToWorkspace(prisma, identityConfig, sendInvite) {
74
+ const inviteUserToWorkspace = (call, callback) => __awaiter(this, void 0, void 0, function* () {
75
+ const token = (0, common_1.getTokenFromCall)(call);
75
76
  const adminRef = (0, getUserRefFromToken_1.getUserRefFromToken)(token);
76
- const accessKeyId = (0, utils_1.getAccessKeyIdFromCall)(call);
77
+ const accessKeyId = (0, common_1.getAccessKeyIdFromCall)(call);
77
78
  const workspace = yield prisma.workspace.findUnique({
78
79
  where: {
79
80
  accessKeyId
@@ -87,12 +88,12 @@ function inviteUserToWorkspace(prisma, identityConfig, sendInvite) {
87
88
  email,
88
89
  role
89
90
  });
90
- const isAdmin = yield (0, isAdminMember_1.isAdminMember)(prisma)(workspaceRef, adminRef);
91
+ const isAdmin = yield (0, createIsAdminMember_1.createIsAdminMember)(prisma)(workspaceRef, adminRef);
91
92
  if (!isAdmin) {
92
93
  return callback(inviterIsNotAdminError);
93
94
  }
94
95
  let user = yield findUserByEmail(prisma, email);
95
- const isMember = yield (0, isWorkspaceMember_1.isWorkspaceMember)(prisma)(workspaceRef, user === null || user === void 0 ? void 0 : user.ref);
96
+ const isMember = yield (0, createIsWorkspaceMember_1.createIsWorkspaceMember)(prisma)(workspaceRef, user === null || user === void 0 ? void 0 : user.ref);
96
97
  if (isMember) {
97
98
  return callback(userIsMemberError);
98
99
  }
@@ -100,7 +101,7 @@ function inviteUserToWorkspace(prisma, identityConfig, sendInvite) {
100
101
  let isExistingUser = true;
101
102
  if (!user) {
102
103
  isExistingUser = false;
103
- user = yield createUser(prisma)({
104
+ user = yield createCreateUser(prisma)({
104
105
  name,
105
106
  email,
106
107
  password: oneTimePassword,
@@ -118,7 +119,7 @@ function inviteUserToWorkspace(prisma, identityConfig, sendInvite) {
118
119
  workspace: true
119
120
  }
120
121
  });
121
- const inviteeToken = yield (0, createWorkspaceInviteToken_1.createWorkspaceInviteToken)(identityConfig)({
122
+ const inviteeToken = yield (0, createGenerateWorkspaceInviteToken_1.createGenerateWorkspaceInviteToken)(identityConfig)({
122
123
  userRef: user.ref,
123
124
  memberRef: newMember.ref,
124
125
  accessKeyId: user.accessKeyId,
@@ -136,5 +137,5 @@ function inviteUserToWorkspace(prisma, identityConfig, sendInvite) {
136
137
  workspaceRef
137
138
  });
138
139
  });
139
- return (0, common_1.withErrorHandlingAndValidation)(fn, common_1.Validators.inviteUserToWorkspaceRequestSchema);
140
+ return (0, common_1.withErrorHandlingAndValidation)(inviteUserToWorkspace, common_1.Validators.inviteUserToWorkspaceRequestSchema);
140
141
  }
@@ -0,0 +1,3 @@
1
+ import { Prisma } from "../db";
2
+ declare function createIsAdminMember(prisma: Prisma): (workspaceRef: string, adminRef: string) => Promise<boolean>;
3
+ export { createIsAdminMember };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.isAdminMember = isAdminMember;
12
+ exports.createIsAdminMember = createIsAdminMember;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -29,24 +29,26 @@ exports.isAdminMember = isAdminMember;
29
29
  * limitations under the License.
30
30
  */
31
31
  const types_1 = require("@fonoster/types");
32
- function isAdminMember(prisma) {
33
- return (workspaceRef, adminRef) => __awaiter(this, void 0, void 0, function* () {
34
- var _a;
35
- if (!workspaceRef || !adminRef) {
36
- return false;
37
- }
38
- const workspace = yield prisma.workspace.findUnique({
39
- where: {
40
- ref: workspaceRef
41
- },
42
- include: {
43
- members: true
32
+ function createIsAdminMember(prisma) {
33
+ return function isAdminMember(workspaceRef, adminRef) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ var _a;
36
+ if (!workspaceRef || !adminRef) {
37
+ return false;
44
38
  }
39
+ const workspace = yield prisma.workspace.findUnique({
40
+ where: {
41
+ ref: workspaceRef
42
+ },
43
+ include: {
44
+ members: true
45
+ }
46
+ });
47
+ if ((workspace === null || workspace === void 0 ? void 0 : workspace.ownerRef) === adminRef) {
48
+ return true;
49
+ }
50
+ const role = (_a = workspace === null || workspace === void 0 ? void 0 : workspace.members.find((member) => member.ref === adminRef)) === null || _a === void 0 ? void 0 : _a.role;
51
+ return role === types_1.WorkspaceRoleEnum.ADMIN || role === types_1.WorkspaceRoleEnum.OWNER;
45
52
  });
46
- if ((workspace === null || workspace === void 0 ? void 0 : workspace.ownerRef) === adminRef) {
47
- return true;
48
- }
49
- const role = (_a = workspace === null || workspace === void 0 ? void 0 : workspace.members.find((member) => member.ref === adminRef)) === null || _a === void 0 ? void 0 : _a.role;
50
- return role === types_1.WorkspaceRoleEnum.ADMIN || role === types_1.WorkspaceRoleEnum.OWNER;
51
- });
53
+ };
52
54
  }
@@ -0,0 +1,3 @@
1
+ import { Prisma } from "../db";
2
+ declare function createIsWorkspaceMember(prisma: Prisma): (workspaceRef: string, userRef: string) => Promise<boolean>;
3
+ export { createIsWorkspaceMember };
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createIsWorkspaceMember = createIsWorkspaceMember;
13
+ function createIsWorkspaceMember(prisma) {
14
+ return function isWorkspaceMember(workspaceRef, userRef) {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const workspace = yield prisma.workspace.findUnique({
17
+ where: {
18
+ ref: workspaceRef
19
+ }
20
+ });
21
+ const isMember = yield prisma.workspaceMember.findFirst({
22
+ where: {
23
+ // Force userId to be an empty string to ensure that the query is not
24
+ // filter by workspaceRef only
25
+ userRef: userRef || "",
26
+ workspaceRef
27
+ }
28
+ });
29
+ const isOwner = (workspace === null || workspace === void 0 ? void 0 : workspace.ownerRef) === userRef;
30
+ return !!(isMember || isOwner);
31
+ });
32
+ };
33
+ }
@@ -0,0 +1,6 @@
1
+ import { GrpcErrorMessage } from "@fonoster/common";
2
+ import { Prisma } from "../db";
3
+ declare function createListWorkspaces(prisma: Prisma): (call: {
4
+ request: unknown;
5
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: unknown) => void) => Promise<void>;
6
+ export { createListWorkspaces };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.listWorkspaces = listWorkspaces;
12
+ exports.createListWorkspaces = createListWorkspaces;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -30,16 +30,14 @@ exports.listWorkspaces = listWorkspaces;
30
30
  */
31
31
  const common_1 = require("@fonoster/common");
32
32
  const logger_1 = require("@fonoster/logger");
33
- const utils_1 = require("../utils");
34
- const getTokenFromCall_1 = require("../utils/getTokenFromCall");
35
33
  const getUserRefFromToken_1 = require("../utils/getUserRefFromToken");
36
34
  const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
37
- function listWorkspaces(prisma) {
38
- const fn = (call, callback) => __awaiter(this, void 0, void 0, function* () {
35
+ function createListWorkspaces(prisma) {
36
+ const listWorkspaces = (call, callback) => __awaiter(this, void 0, void 0, function* () {
39
37
  var _a, _b;
40
- const token = (0, getTokenFromCall_1.getTokenFromCall)(call);
38
+ const token = (0, common_1.getTokenFromCall)(call);
41
39
  const userRef = (0, getUserRefFromToken_1.getUserRefFromToken)(token);
42
- const access = (0, utils_1.decodeToken)(token);
40
+ const access = (0, common_1.decodeToken)(token);
43
41
  const workspacesAccessKeyIds = (_a = access.access) === null || _a === void 0 ? void 0 : _a.map((a) => a.accessKeyId);
44
42
  logger.verbose("list workspaces for user or apikey", {
45
43
  userRef,
@@ -71,5 +69,5 @@ function listWorkspaces(prisma) {
71
69
  nextPageToken: (_b = items[items.length - 1]) === null || _b === void 0 ? void 0 : _b.ref
72
70
  });
73
71
  });
74
- return (0, common_1.withErrorHandlingAndValidation)(fn, common_1.Validators.listRequestSchema);
72
+ return (0, common_1.withErrorHandlingAndValidation)(listWorkspaces, common_1.Validators.listRequestSchema);
75
73
  }
@@ -0,0 +1,6 @@
1
+ import { GrpcErrorMessage } from "@fonoster/common";
2
+ import { Prisma } from "../db";
3
+ declare function createRemoveUserFromWorkspace(prisma: Prisma): (call: {
4
+ request: unknown;
5
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: unknown) => void) => Promise<void>;
6
+ export { createRemoveUserFromWorkspace };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.removeUserFromWorkspace = removeUserFromWorkspace;
12
+ exports.createRemoveUserFromWorkspace = createRemoveUserFromWorkspace;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -31,17 +31,15 @@ exports.removeUserFromWorkspace = removeUserFromWorkspace;
31
31
  const common_1 = require("@fonoster/common");
32
32
  const logger_1 = require("@fonoster/logger");
33
33
  const grpc_js_1 = require("@grpc/grpc-js");
34
- const isAdminMember_1 = require("./isAdminMember");
35
- const utils_1 = require("../utils");
36
- const getTokenFromCall_1 = require("../utils/getTokenFromCall");
34
+ const createIsAdminMember_1 = require("./createIsAdminMember");
37
35
  const getUserRefFromToken_1 = require("../utils/getUserRefFromToken");
38
36
  const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
39
- function removeUserFromWorkspace(prisma) {
40
- const fn = (call, callback) => __awaiter(this, void 0, void 0, function* () {
37
+ function createRemoveUserFromWorkspace(prisma) {
38
+ const removeUserFromWorkspace = (call, callback) => __awaiter(this, void 0, void 0, function* () {
41
39
  const { request } = call;
42
40
  const { userRef } = request;
43
- const token = (0, getTokenFromCall_1.getTokenFromCall)(call);
44
- const accessKeyId = (0, utils_1.getAccessKeyIdFromCall)(call);
41
+ const token = (0, common_1.getTokenFromCall)(call);
42
+ const accessKeyId = (0, common_1.getAccessKeyIdFromCall)(call);
45
43
  const adminRef = (0, getUserRefFromToken_1.getUserRefFromToken)(token);
46
44
  const workspace = yield prisma.workspace.findUnique({
47
45
  where: {
@@ -50,7 +48,7 @@ function removeUserFromWorkspace(prisma) {
50
48
  });
51
49
  const { ref: workspaceRef } = workspace;
52
50
  logger.verbose("removing user from workspace", { workspaceRef, userRef });
53
- const isAdmin = yield (0, isAdminMember_1.isAdminMember)(prisma)(workspaceRef, adminRef);
51
+ const isAdmin = yield (0, createIsAdminMember_1.createIsAdminMember)(prisma)(workspaceRef, adminRef);
54
52
  if (!isAdmin && adminRef !== userRef) {
55
53
  return callback({
56
54
  code: grpc_js_1.status.PERMISSION_DENIED,
@@ -76,5 +74,5 @@ function removeUserFromWorkspace(prisma) {
76
74
  });
77
75
  callback(null, response);
78
76
  });
79
- return (0, common_1.withErrorHandlingAndValidation)(fn, common_1.Validators.removeUserFromWorkspaceRequestSchema);
77
+ return (0, common_1.withErrorHandlingAndValidation)(removeUserFromWorkspace, common_1.Validators.removeUserFromWorkspaceRequestSchema);
80
78
  }
@@ -2,7 +2,7 @@ import { GrpcErrorMessage } from "@fonoster/common";
2
2
  import { Prisma } from "../db";
3
3
  import { IdentityConfig } from "../exchanges/types";
4
4
  import { SendInvite } from "../invites";
5
- declare function resendWorkspaceMembershipInvitation(prisma: Prisma, identityConfig: IdentityConfig, sendInvite: SendInvite): (call: {
5
+ declare function createResendWorkspaceMembershipInvitation(prisma: Prisma, identityConfig: IdentityConfig, sendInvite: SendInvite): (call: {
6
6
  request: unknown;
7
7
  }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: unknown) => void) => Promise<void>;
8
- export { resendWorkspaceMembershipInvitation };
8
+ export { createResendWorkspaceMembershipInvitation };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.resendWorkspaceMembershipInvitation = resendWorkspaceMembershipInvitation;
12
+ exports.createResendWorkspaceMembershipInvitation = createResendWorkspaceMembershipInvitation;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -31,18 +31,17 @@ exports.resendWorkspaceMembershipInvitation = resendWorkspaceMembershipInvitatio
31
31
  const common_1 = require("@fonoster/common");
32
32
  const logger_1 = require("@fonoster/logger");
33
33
  const grpc_js_1 = require("@grpc/grpc-js");
34
- const isAdminMember_1 = require("./isAdminMember");
34
+ const createIsAdminMember_1 = require("./createIsAdminMember");
35
35
  const envs_1 = require("../envs");
36
36
  const utils_1 = require("../utils");
37
- const createWorkspaceInviteToken_1 = require("../utils/createWorkspaceInviteToken");
38
- const getTokenFromCall_1 = require("../utils/getTokenFromCall");
37
+ const createGenerateWorkspaceInviteToken_1 = require("../utils/createGenerateWorkspaceInviteToken");
39
38
  const getUserRefFromToken_1 = require("../utils/getUserRefFromToken");
40
39
  const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
41
- function resendWorkspaceMembershipInvitation(prisma, identityConfig, sendInvite) {
42
- const fn = (call, callback) => __awaiter(this, void 0, void 0, function* () {
43
- const token = (0, getTokenFromCall_1.getTokenFromCall)(call);
40
+ function createResendWorkspaceMembershipInvitation(prisma, identityConfig, sendInvite) {
41
+ const resendWorkspaceMembershipInvitation = (call, callback) => __awaiter(this, void 0, void 0, function* () {
42
+ const token = (0, common_1.getTokenFromCall)(call);
44
43
  const adminRef = (0, getUserRefFromToken_1.getUserRefFromToken)(token);
45
- const accessKeyId = (0, utils_1.getAccessKeyIdFromCall)(call);
44
+ const accessKeyId = (0, common_1.getAccessKeyIdFromCall)(call);
46
45
  const workspace = yield prisma.workspace.findUnique({
47
46
  where: {
48
47
  accessKeyId
@@ -56,7 +55,7 @@ function resendWorkspaceMembershipInvitation(prisma, identityConfig, sendInvite)
56
55
  inviteeRef,
57
56
  adminRef
58
57
  });
59
- const isAdmin = yield (0, isAdminMember_1.isAdminMember)(prisma)(workspace.ref, adminRef);
58
+ const isAdmin = yield (0, createIsAdminMember_1.createIsAdminMember)(prisma)(workspace.ref, adminRef);
60
59
  if (!isAdmin) {
61
60
  return callback({
62
61
  code: grpc_js_1.status.PERMISSION_DENIED,
@@ -79,7 +78,7 @@ function resendWorkspaceMembershipInvitation(prisma, identityConfig, sendInvite)
79
78
  message: `Original invitation not found for userRef: ${inviteeRef}`
80
79
  });
81
80
  }
82
- const inviteeToken = yield (0, createWorkspaceInviteToken_1.createWorkspaceInviteToken)(identityConfig)({
81
+ const inviteeToken = yield (0, createGenerateWorkspaceInviteToken_1.createGenerateWorkspaceInviteToken)(identityConfig)({
83
82
  userRef: member.user.ref,
84
83
  memberRef: member.ref,
85
84
  accessKeyId: member.user.accessKeyId,
@@ -96,5 +95,5 @@ function resendWorkspaceMembershipInvitation(prisma, identityConfig, sendInvite)
96
95
  userRef: inviteeRef
97
96
  });
98
97
  });
99
- return (0, common_1.withErrorHandlingAndValidation)(fn, common_1.Validators.resendWorkspaceMembershipInvitationRequestSchema);
98
+ return (0, common_1.withErrorHandlingAndValidation)(resendWorkspaceMembershipInvitation, common_1.Validators.resendWorkspaceMembershipInvitationRequestSchema);
100
99
  }
@@ -0,0 +1,6 @@
1
+ import { GrpcErrorMessage } from "@fonoster/common";
2
+ import { Prisma } from "../db";
3
+ declare function createUpdateWorkspace(prisma: Prisma): (call: {
4
+ request: unknown;
5
+ }, callback: (error?: import("@fonoster/common").GrpcErrorMessage, response?: unknown) => void) => Promise<void>;
6
+ export { createUpdateWorkspace };
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.updateWorkspace = updateWorkspace;
12
+ exports.createUpdateWorkspace = createUpdateWorkspace;
13
13
  /*
14
14
  * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
15
15
  * http://github.com/fonoster/fonoster
@@ -31,18 +31,17 @@ exports.updateWorkspace = updateWorkspace;
31
31
  const common_1 = require("@fonoster/common");
32
32
  const logger_1 = require("@fonoster/logger");
33
33
  const grpc_js_1 = require("@grpc/grpc-js");
34
- const isWorkspaceMember_1 = require("./isWorkspaceMember");
35
- const getTokenFromCall_1 = require("../utils/getTokenFromCall");
34
+ const createIsWorkspaceMember_1 = require("./createIsWorkspaceMember");
36
35
  const getUserRefFromToken_1 = require("../utils/getUserRefFromToken");
37
36
  const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
38
- function updateWorkspace(prisma) {
39
- const fn = (call, callback) => __awaiter(this, void 0, void 0, function* () {
40
- const token = (0, getTokenFromCall_1.getTokenFromCall)(call);
37
+ function createUpdateWorkspace(prisma) {
38
+ const updateWorkspace = (call, callback) => __awaiter(this, void 0, void 0, function* () {
39
+ const token = (0, common_1.getTokenFromCall)(call);
41
40
  const userRef = (0, getUserRefFromToken_1.getUserRefFromToken)(token);
42
41
  const { request } = call;
43
42
  const { ref, name } = request;
44
43
  logger.verbose("call to updateWorkspace", { ref, userRef });
45
- const isMember = yield (0, isWorkspaceMember_1.isWorkspaceMember)(prisma)(ref, userRef);
44
+ const isMember = yield (0, createIsWorkspaceMember_1.createIsWorkspaceMember)(prisma)(ref, userRef);
46
45
  if (!isMember) {
47
46
  callback({
48
47
  code: grpc_js_1.status.PERMISSION_DENIED,
@@ -59,5 +58,5 @@ function updateWorkspace(prisma) {
59
58
  });
60
59
  callback(null, { ref });
61
60
  });
62
- return (0, common_1.withErrorHandlingAndValidation)(fn, common_1.Validators.updateWorkspaceRequestSchema);
61
+ return (0, common_1.withErrorHandlingAndValidation)(updateWorkspace, common_1.Validators.updateWorkspaceRequestSchema);
63
62
  }
@@ -1,8 +1,8 @@
1
- export * from "./createWorkspace";
2
- export * from "./deleteWorkspace";
3
- export * from "./getWorkspace";
4
- export * from "./inviteUserToWorkspace";
5
- export * from "./listWorkspaces";
6
- export * from "./removeUserFromWorkspace";
7
- export * from "./resendWorkspaceMembershipInvitation";
8
- export * from "./updateWorkspace";
1
+ export * from "./createCreateWorkspace";
2
+ export * from "./createDeleteWorkspace";
3
+ export * from "./createGetWorkspace";
4
+ export * from "./createInviteUserToWorkspace";
5
+ export * from "./createListWorkspaces";
6
+ export * from "./createRemoveUserFromWorkspace";
7
+ export * from "./createResendWorkspaceMembershipInvitation";
8
+ export * from "./createUpdateWorkspace";
@@ -32,11 +32,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
32
32
  * See the License for the specific language governing permissions and
33
33
  * limitations under the License.
34
34
  */
35
- __exportStar(require("./createWorkspace"), exports);
36
- __exportStar(require("./deleteWorkspace"), exports);
37
- __exportStar(require("./getWorkspace"), exports);
38
- __exportStar(require("./inviteUserToWorkspace"), exports);
39
- __exportStar(require("./listWorkspaces"), exports);
40
- __exportStar(require("./removeUserFromWorkspace"), exports);
41
- __exportStar(require("./resendWorkspaceMembershipInvitation"), exports);
42
- __exportStar(require("./updateWorkspace"), exports);
35
+ __exportStar(require("./createCreateWorkspace"), exports);
36
+ __exportStar(require("./createDeleteWorkspace"), exports);
37
+ __exportStar(require("./createGetWorkspace"), exports);
38
+ __exportStar(require("./createInviteUserToWorkspace"), exports);
39
+ __exportStar(require("./createListWorkspaces"), exports);
40
+ __exportStar(require("./createRemoveUserFromWorkspace"), exports);
41
+ __exportStar(require("./createResendWorkspaceMembershipInvitation"), exports);
42
+ __exportStar(require("./createUpdateWorkspace"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fonoster/identity",
3
- "version": "0.8.24",
3
+ "version": "0.8.26",
4
4
  "description": "Identity service for Fonoster",
5
5
  "author": "Pedro Sanders <psanders@fonoster.com>",
6
6
  "homepage": "https://github.com/fonoster/fonoster#readme",
@@ -20,9 +20,9 @@
20
20
  "fonoster": "./dist/index.js"
21
21
  },
22
22
  "dependencies": {
23
- "@fonoster/common": "^0.8.24",
24
- "@fonoster/logger": "^0.8.24",
25
- "@fonoster/types": "^0.8.24",
23
+ "@fonoster/common": "^0.8.26",
24
+ "@fonoster/logger": "^0.8.26",
25
+ "@fonoster/types": "^0.8.26",
26
26
  "@grpc/grpc-js": "~1.10.6",
27
27
  "@prisma/client": "^6.0.1",
28
28
  "jsonwebtoken": "^9.0.2",
@@ -48,5 +48,5 @@
48
48
  "devDependencies": {
49
49
  "@types/jsonwebtoken": "^9.0.6"
50
50
  },
51
- "gitHead": "45d0edd1dedf8cafd45d93d011b22c1c9f046414"
51
+ "gitHead": "f01e634eca9a94b3a276369e998c6e75f8b75284"
52
52
  }
@@ -1,5 +0,0 @@
1
- declare enum JsonWebErrorEnum {
2
- JsonWebTokenError = "JsonWebTokenError",
3
- TokenExpiredError = "TokenExpiredError"
4
- }
5
- export { JsonWebErrorEnum };
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.JsonWebErrorEnum = void 0;
4
- /*
5
- * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
6
- * http://github.com/fonoster/fonoster
7
- *
8
- * This file is part of Fonoster
9
- *
10
- * Licensed under the MIT License (the "License");
11
- * you may not use this file except in compliance with
12
- * the License. You may obtain a copy of the License at
13
- *
14
- * https://opensource.org/licenses/MIT
15
- *
16
- * Unless required by applicable law or agreed to in writing, software
17
- * distributed under the License is distributed on an "AS IS" BASIS,
18
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
- * See the License for the specific language governing permissions and
20
- * limitations under the License.
21
- */
22
- var JsonWebErrorEnum;
23
- (function (JsonWebErrorEnum) {
24
- JsonWebErrorEnum["JsonWebTokenError"] = "JsonWebTokenError";
25
- JsonWebErrorEnum["TokenExpiredError"] = "TokenExpiredError";
26
- })(JsonWebErrorEnum || (exports.JsonWebErrorEnum = JsonWebErrorEnum = {}));
@@ -1,15 +0,0 @@
1
- import { ServerInterceptingCall } from "@grpc/grpc-js";
2
- /**
3
- * This function is a gRPC interceptor that checks if the request is valid
4
- * and if the user has the right permissions to access the resource. When
5
- * validating the request, the function will check if the request is in the
6
- * skip list, if the token is valid and if the role is allowed by the RBAC.
7
- *
8
- * @param {string} identityPublicKey - The public key to validate the token
9
- * @param {string[]} publicPath - The list of public paths
10
- * @return {Function} - The gRPC interceptor
11
- */
12
- declare function createAuthInterceptor(identityPublicKey: string, publicPath: string[]): (methodDefinition: {
13
- path: string;
14
- }, call: ServerInterceptingCall) => ServerInterceptingCall;
15
- export { createAuthInterceptor };
@@ -1,74 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createAuthInterceptor = createAuthInterceptor;
4
- /*
5
- * Copyright (C) 2024 by Fonoster Inc (https://fonoster.com)
6
- * http://github.com/fonoster/fonoster
7
- *
8
- * This file is part of Fonoster
9
- *
10
- * Licensed under the MIT License (the "License");
11
- * you may not use this file except in compliance with
12
- * the License. You may obtain a copy of the License at
13
- *
14
- * https://opensource.org/licenses/MIT
15
- *
16
- * Unless required by applicable law or agreed to in writing, software
17
- * distributed under the License is distributed on an "AS IS" BASIS,
18
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19
- * See the License for the specific language governing permissions and
20
- * limitations under the License.
21
- */
22
- const logger_1 = require("@fonoster/logger");
23
- const errors_1 = require("./errors");
24
- const roles_1 = require("./roles");
25
- const utils_1 = require("./utils");
26
- const logger = (0, logger_1.getLogger)({ service: "identity", filePath: __filename });
27
- /**
28
- * This function is a gRPC interceptor that checks if the request is valid
29
- * and if the user has the right permissions to access the resource. When
30
- * validating the request, the function will check if the request is in the
31
- * skip list, if the token is valid and if the role is allowed by the RBAC.
32
- *
33
- * @param {string} identityPublicKey - The public key to validate the token
34
- * @param {string[]} publicPath - The list of public paths
35
- * @return {Function} - The gRPC interceptor
36
- */
37
- function createAuthInterceptor(identityPublicKey, publicPath) {
38
- /**
39
- * Inner function that will be called by the gRPC server.
40
- *
41
- * @param {object} methodDefinition - The method definition
42
- * @param {string} methodDefinition.path - The path of the gRPC method
43
- * @param {ServerInterceptingCall} call - The call object
44
- * @return {ServerInterceptingCall} - The modified call object
45
- */
46
- return (methodDefinition, call) => {
47
- const { path } = methodDefinition;
48
- const accessKeyId = (0, utils_1.getAccessKeyIdFromCall)(call);
49
- logger.verbose("intercepting api call to path", { accessKeyId, path });
50
- if (publicPath.includes(methodDefinition.path)) {
51
- logger.verbose("passing auth control to edge function", { path });
52
- return call;
53
- }
54
- const token = (0, utils_1.getTokenFromCall)(call);
55
- logger.verbose("validating token", { accessKeyId, path });
56
- if (!(0, utils_1.isValidToken)(token, identityPublicKey)) {
57
- return (0, errors_1.unauthenticatedError)(call);
58
- }
59
- const decodedToken = (0, utils_1.decodeToken)(token);
60
- logger.verbose("checking access for accessKeyId", {
61
- accessKeyId,
62
- path,
63
- hasAccess: (0, utils_1.hasAccess)(decodedToken.access, path),
64
- pathIsWorkspacePath: roles_1.workspaceAccess.includes(path),
65
- tokenHasAccessKeyId: (0, utils_1.tokenHasAccessKeyId)(token, accessKeyId)
66
- });
67
- if (!(0, utils_1.hasAccess)(decodedToken.access, path) ||
68
- (roles_1.workspaceAccess.includes(path) &&
69
- !(0, utils_1.tokenHasAccessKeyId)(token, accessKeyId))) {
70
- return (0, errors_1.permissionDeniedError)(call);
71
- }
72
- return call;
73
- };
74
- }
package/dist/errors.d.ts DELETED
@@ -1,4 +0,0 @@
1
- import { ServerInterceptingCall } from "@grpc/grpc-js";
2
- declare const unauthenticatedError: (call: ServerInterceptingCall) => ServerInterceptingCall;
3
- declare const permissionDeniedError: (call: ServerInterceptingCall) => ServerInterceptingCall;
4
- export { permissionDeniedError, unauthenticatedError };