@fraym/auth 0.7.1 → 0.31.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.
package/README.md CHANGED
@@ -1,221 +1,11 @@
1
- # auth-nodejs
1
+ # auth
2
2
 
3
- Client implementation in javascript for the [auth service](https://github.com/fraym/auth).
3
+ Client implementation in JavaScript for the Freym service [auth](https://github.com/fraym/auth).
4
4
 
5
- ## Installation
5
+ ## Docs
6
6
 
7
- ```shell
8
- npm i @fraym/auth
9
- ```
7
+ Please have a look at our [documentation](https://docs.freym.becklyn.app/docs/services/auth/introduction).
10
8
 
11
- ## GraphQL
9
+ ## License
12
10
 
13
- You can access the graphQL api at `http://auth:3000/management/graphql`.
14
- There is a sandbox available at `http://auth:3000/management/graphql/sandbox`.
15
-
16
- You need to add the `Tenant-Id` header in order to use the graphQL Endpoint and the sandbox.
17
-
18
- ### Config
19
-
20
- Use a `.env` file or env variables to configure cte clients and the command:
21
-
22
- ```env
23
- AUTH_SERVER_ADDRESS=127.0.0.1:9000
24
- ```
25
-
26
- ## JWT functions
27
-
28
- ### Create a new JWT for usage with fraym
29
-
30
- ```typescript
31
- const jwt = await generateJwt(appSecret, tenantId, scopes, data, expirationTime);
32
- ```
33
-
34
- Parameters:
35
-
36
- - `appSecret`: the secret used to sign the jwt
37
- - `tenantId`: the id of the tenant to use
38
- - `scopes`: (optional) list of scopes available in this token
39
- - `data`: (optional) data added to the `data` field of the token
40
- - `expirationTime`: (optional) string is resolved to a time span and added to the current timestamp to calculate the expiration time
41
-
42
- ### Add data to an existing JWT
43
-
44
- Note: this will validate the existing token first.
45
-
46
- ```typescript
47
- const jwt = await addDataToJwt(appSecret, token, data);
48
- ```
49
-
50
- Parameters:
51
-
52
- - `appSecret`: the secret used to sign the jwt
53
- - `token`: the existing jwt
54
- - `data`: (optional) data added to the `data` field of the token, existing fields in the data object will be overwritten
55
-
56
- ### Validate the token and get associated data
57
-
58
- Get scopes:
59
-
60
- ```typescript
61
- const { scopes, userId, exp } = await getTokenData(appSecret, token, requireUserId);
62
- ```
63
-
64
- Parameters:
65
-
66
- - `appSecret`: the secret used to sign the jwt
67
- - `token`: the existing jwt
68
- - `requireUserId`: (optional, default: `true`) If set to true the function will throw an error if it cannot determine the id of the user that owns the jwt
69
-
70
- ## Client Usage
71
-
72
- ### Create the client
73
-
74
- ```typescript
75
- const managementClient = await newManagementClient();
76
- ```
77
-
78
- ## Get all roles
79
-
80
- ```typescript
81
- const roles = await managementClient.getRoles("TENANT_ID");
82
- ```
83
-
84
- ## Upsert a role
85
-
86
- You can create roles without providing a role-id. The id of the new role will be returned:
87
-
88
- ```typescript
89
- const roleId = await managementClient.upsertRole("TENANT_ID", [
90
- {
91
- scopeName: "PERMISSION_NAME",
92
- // optional: clientId: If none is given the default client will be used
93
- },
94
- ]);
95
- ```
96
-
97
- You can also upsert a role by providing the role-id:
98
-
99
- ```typescript
100
- const roleId = await managementClient.upsertRole(
101
- "TENANT_ID",
102
- [
103
- {
104
- scopeName: "PERMISSION_NAME",
105
- // optional: clientId: If none is given the default client will be used
106
- },
107
- ],
108
- "ROLE_ID"
109
- );
110
- ```
111
-
112
- ## Delete a role
113
-
114
- ```typescript
115
- await managementClient.deleteRole("TENANT_ID", "ROLE_ID");
116
- ```
117
-
118
- ## Create a user
119
-
120
- When creating a user and not providing a `password`, the create function will return a `setInitialPasswordToken`. This string can be used to authorize the initial password change of a user. Use it within the graphql api to change the passwort of a user.
121
-
122
- Required parameters:
123
-
124
- ```typescript
125
- const { id, setInitialPasswordToken } = await managementClient.createUser("TENANT_ID", "E-MAIL", [
126
- "ROLE_ID",
127
- ]);
128
- ```
129
-
130
- With all optional parameters:
131
-
132
- ```typescript
133
- const isActive = true;
134
- const blockedUntil = new Date();
135
- const {id, setInitialPasswordToken} = await managementClient.createUser("TENANT_ID", "E-MAIL", ["ROLE_ID"]. "LOGIN_NAME", "DISPLAY_NAME", "PASSWORD", isActive, blockedUntil);
136
- ```
137
-
138
- `LOGIN_NAME`: A name used for login instead of the email address.
139
- `DISPLAY_NAME`: A name to display in the applications.
140
- `PASSWORD`: Set the initial password of the user or leave empty if you want the user to set it.
141
- `isActive`: Activate or deactivate a user.
142
- `blockedUntil`: Block a user until a specific date.
143
-
144
- ## Update a user
145
-
146
- When updating a user and not providing a `password`, the password will stay the same. Otherwise it will be changed to the given password.
147
-
148
- Required parameters:
149
-
150
- ```typescript
151
- await managementClient.updateUser("TENANT_ID", "USER_ID", "E-MAIL", ["ROLE_ID"]);
152
- ```
153
-
154
- With all optional parameters:
155
-
156
- ```typescript
157
- const isActive = true;
158
- const blockedUntil = new Date();
159
- await managementClient.createUser("TENANT_ID", "USER_ID", "E-MAIL", ["ROLE_ID"]. "LOGIN_NAME", "DISPLAY_NAME", "PASSWORD", isActive, blockedUntil);
160
- ```
161
-
162
- `LOGIN_NAME`: A name used for login instead of the email address.
163
- `DISPLAY_NAME`: A name to display in the applications.
164
- `PASSWORD`: Use this to reset the password of a user.
165
- `isActive`: Activate or deactivate a user.
166
- `blockedUntil`: Block a user until a specific date.
167
-
168
- ## Delete a user
169
-
170
- ```typescript
171
- await managementClient.deleteUser("TENANT_ID", "USER_ID");
172
- ```
173
-
174
- ## Get all users
175
-
176
- ```typescript
177
- const users = await managementClient.getUsers("TENANT_ID");
178
- ```
179
-
180
- ### Gracefully close the clients
181
-
182
- You won't lose any data if you don't. Use it for your peace of mind.
183
-
184
- ```typescript
185
- client.close();
186
- ```
187
-
188
- ## Development
189
-
190
- You'll need the following apps for a smooth development experience:
191
-
192
- - minikube
193
- - lens
194
- - okteto
195
- - helm
196
-
197
- ### Running the dev environment
198
-
199
- - Start minikube if not already done:
200
-
201
- ```shell
202
- minikube start
203
- ```
204
-
205
- - add mongodb and minio to your lokal kubernetes
206
- - use Makefiles in `./.dev/*`
207
- - copy `.env.build` to `.env.build.local`
208
- - add your personal access token (needs read access for private fraym org repositories)
209
- - deploy the app to your cluster
210
-
211
- ```
212
- make init
213
- ```
214
-
215
- - start okteto
216
-
217
- ```
218
- make dev
219
- ```
220
-
221
- - connect your IDE to that okteto instance
11
+ This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
@@ -1,37 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useConfigDefaults = exports.getEnvConfig = void 0;
4
- const dotenv_1 = require("dotenv");
5
- const getEnvConfig = () => {
6
- var _a;
7
- (0, dotenv_1.config)();
8
- const serverAddress = (_a = process.env.AUTH_SERVER_ADDRESS) !== null && _a !== void 0 ? _a : "";
9
- let keepaliveInterval;
10
- let keepaliveTimeout;
11
- const keepaliveIntervalString = process.env.AUTH_CONNECTION_KEEPALIVE_INTERVAL;
12
- const keepaliveTimeoutString = process.env.AUTH_CONNECTION_KEEPALIVE_INTERVAL;
13
- if (keepaliveIntervalString) {
14
- keepaliveInterval = parseInt(keepaliveIntervalString, 10);
15
- }
16
- if (keepaliveTimeoutString) {
17
- keepaliveTimeout = parseInt(keepaliveTimeoutString, 10);
18
- }
19
- return {
20
- serverAddress,
21
- keepaliveInterval,
22
- keepaliveTimeout,
23
- };
24
- };
25
- exports.getEnvConfig = getEnvConfig;
26
- const useConfigDefaults = (config) => {
27
- var _a, _b;
28
- if (!config) {
29
- config = (0, exports.getEnvConfig)();
30
- }
31
- return {
32
- serverAddress: config.serverAddress,
33
- keepaliveTimeout: (_a = config.keepaliveTimeout) !== null && _a !== void 0 ? _a : 3 * 1000,
34
- keepaliveInterval: (_b = config.keepaliveInterval) !== null && _b !== void 0 ? _b : 40 * 1000,
35
- };
36
- };
37
- exports.useConfigDefaults = useConfigDefaults;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{getEnvConfig:function(){return getEnvConfig},useConfigDefaults:function(){return useConfigDefaults}});var _dotenv=require("dotenv");var getEnvConfig=function(){(0,_dotenv.config)();var _process_env_AUTH_SERVER_ADDRESS;var serverAddress=(_process_env_AUTH_SERVER_ADDRESS=process.env.AUTH_SERVER_ADDRESS)!==null&&_process_env_AUTH_SERVER_ADDRESS!==void 0?_process_env_AUTH_SERVER_ADDRESS:"";var keepaliveInterval;var keepaliveTimeout;var keepaliveIntervalString=process.env.AUTH_CONNECTION_KEEPALIVE_INTERVAL;var keepaliveTimeoutString=process.env.AUTH_CONNECTION_KEEPALIVE_INTERVAL;if(keepaliveIntervalString){keepaliveInterval=parseInt(keepaliveIntervalString,10)}if(keepaliveTimeoutString){keepaliveTimeout=parseInt(keepaliveTimeoutString,10)}return{serverAddress:serverAddress,keepaliveInterval:keepaliveInterval,keepaliveTimeout:keepaliveTimeout}};var useConfigDefaults=function(config){if(!config){config=getEnvConfig()}var _config_keepaliveTimeout,_config_keepaliveInterval;return{serverAddress:config.serverAddress,keepaliveTimeout:(_config_keepaliveTimeout=config.keepaliveTimeout)!==null&&_config_keepaliveTimeout!==void 0?_config_keepaliveTimeout:3*1e3,keepaliveInterval:(_config_keepaliveInterval=config.keepaliveInterval)!==null&&_config_keepaliveInterval!==void 0?_config_keepaliveInterval:40*1e3}};
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return _default}});var _base=require("@becklyn/eslint/base");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}var _default=_to_consumable_array(_base.config);
package/dist/index.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export * from "./management/client";
2
- export { ClientConfig } from "./config/config";
2
+ export type { ClientConfig } from "./config/config";
package/dist/index.js CHANGED
@@ -1,17 +1 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./management/client"), exports);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});_export_star(require("./management/client"),exports);function _export_star(from,to){Object.keys(from).forEach(function(k){if(k!=="default"&&!Object.prototype.hasOwnProperty.call(to,k)){Object.defineProperty(to,k,{enumerable:true,get:function(){return from[k]}})}});return from}
@@ -1,15 +1,16 @@
1
- import { ClientConfig } from "../config/config";
1
+ import { ClientConfig } from "@/config/config";
2
2
  import { CreateUserResponse } from "./createUser";
3
+ import { EventMetadata } from "./eventMetadata";
3
4
  import { Role } from "./getRoles";
4
5
  import { User } from "./getUsers";
5
6
  import { UpsertRoleScope } from "./upsertRole";
6
7
  export interface ManagementClient {
7
- upsertRole: (tenantId: string, allowedScopes: UpsertRoleScope[], id?: string) => Promise<string>;
8
- deleteRole: (tenantId: string, id: string) => Promise<void>;
8
+ upsertRole: (tenantId: string, allowedScopes: UpsertRoleScope[], id?: string, eventMetadata?: Partial<EventMetadata>) => Promise<string>;
9
+ deleteRole: (tenantId: string, id: string, eventMetadata?: Partial<EventMetadata>) => Promise<void>;
9
10
  getRoles: (tenantId: string) => Promise<Role[]>;
10
- createUser: (tenantId: string, email: string, assignedRoleIds: string[], login?: string, displayName?: string, password?: string, active?: boolean, blockedUntil?: Date) => Promise<CreateUserResponse>;
11
- updateUser: (tenantId: string, id: string, email: string, assignedRoleIds: string[], login?: string, displayName?: string, password?: string, active?: boolean, blockedUntil?: Date) => Promise<void>;
12
- deleteUser: (tenantId: string, id: string) => Promise<void>;
11
+ createUser: (tenantId: string, email: string, assignedRoleIds: string[], login?: string, displayName?: string, password?: string, active?: boolean, blockedUntil?: Date, eventMetadata?: Partial<EventMetadata>) => Promise<CreateUserResponse>;
12
+ updateUser: (tenantId: string, id: string, email: string, assignedRoleIds: string[], login?: string, displayName?: string, password?: string, active?: boolean, blockedUntil?: Date, eventMetadata?: Partial<EventMetadata>) => Promise<void>;
13
+ deleteUser: (tenantId: string, id: string, eventMetadata?: Partial<EventMetadata>) => Promise<void>;
13
14
  getUsers: (tenantId: string) => Promise<User[]>;
14
15
  close: () => Promise<void>;
15
16
  }
@@ -1,56 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.newManagementClient = void 0;
4
- const management_1 = require("@fraym/proto/freym/auth/management");
5
- const grpc_js_1 = require("@grpc/grpc-js");
6
- const config_1 = require("../config/config");
7
- const createUser_1 = require("./createUser");
8
- const deleteRole_1 = require("./deleteRole");
9
- const deleteUser_1 = require("./deleteUser");
10
- const getRoles_1 = require("./getRoles");
11
- const getUsers_1 = require("./getUsers");
12
- const updateUser_1 = require("./updateUser");
13
- const upsertRole_1 = require("./upsertRole");
14
- const newManagementClient = async (config) => {
15
- const currentConfig = (0, config_1.useConfigDefaults)(config);
16
- const serviceClient = new management_1.ServiceClient(currentConfig.serverAddress, grpc_js_1.credentials.createInsecure(), {
17
- "grpc.keepalive_time_ms": currentConfig.keepaliveInterval,
18
- "grpc.keepalive_timeout_ms": currentConfig.keepaliveTimeout,
19
- "grpc.keepalive_permit_without_calls": 1,
20
- });
21
- const upsertRole = async (tenantId, allowedScopes, id = "") => {
22
- return await (0, upsertRole_1.createOrUpdateRole)(tenantId, id, allowedScopes, serviceClient);
23
- };
24
- const deleteRole = async (tenantId, id) => {
25
- return await (0, deleteRole_1.deleteExistingRole)(tenantId, id, serviceClient);
26
- };
27
- const getRoles = async (tenantId) => {
28
- return await (0, getRoles_1.getAllRoles)(tenantId, serviceClient);
29
- };
30
- const createUser = async (tenantId, email, assignedRoleIds, login = "", displayName = "", password = "", active = false, blockedUntil = new Date(0)) => {
31
- return await (0, createUser_1.createNewUser)(tenantId, login, email, displayName, password, assignedRoleIds, active, blockedUntil, serviceClient);
32
- };
33
- const updateUser = async (tenantId, id, email, assignedRoleIds, login = "", displayName = "", password = "", active = false, blockedUntil = new Date(0)) => {
34
- return await (0, updateUser_1.updateExistingUser)(tenantId, id, login, email, displayName, password, assignedRoleIds, active, blockedUntil, serviceClient);
35
- };
36
- const deleteUser = async (tenantId, id) => {
37
- return await (0, deleteUser_1.deleteExistingUser)(tenantId, id, serviceClient);
38
- };
39
- const getUsers = async (tenantId) => {
40
- return await (0, getUsers_1.getAllUsers)(tenantId, serviceClient);
41
- };
42
- const close = async () => {
43
- serviceClient.close();
44
- };
45
- return {
46
- upsertRole,
47
- deleteRole,
48
- getRoles,
49
- createUser,
50
- updateUser,
51
- deleteUser,
52
- getUsers,
53
- close,
54
- };
55
- };
56
- exports.newManagementClient = newManagementClient;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"newManagementClient",{enumerable:true,get:function(){return newManagementClient}});var _indexfreymauthmanagement=require("@fraym/proto/dist/index.freym.auth.management");var _config=require("../config/config");var _grpcjs=require("@grpc/grpc-js");var _createUser=require("./createUser");var _deleteRole=require("./deleteRole");var _deleteUser=require("./deleteUser");var _getRoles=require("./getRoles");var _getUsers=require("./getUsers");var _updateUser=require("./updateUser");var _upsertRole=require("./upsertRole");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var newManagementClient=/*#__PURE__*/function(){var _ref=_async_to_generator(function(config){var currentConfig,serviceClient,upsertRole,deleteRole,getRoles,createUser,updateUser,deleteUser,getUsers,close;return _ts_generator(this,function(_state){currentConfig=(0,_config.useConfigDefaults)(config);serviceClient=new _indexfreymauthmanagement.ServiceClient(currentConfig.serverAddress,_grpcjs.credentials.createInsecure(),{"grpc.keepalive_time_ms":currentConfig.keepaliveInterval,"grpc.keepalive_timeout_ms":currentConfig.keepaliveTimeout,"grpc.keepalive_permit_without_calls":1});upsertRole=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,allowedScopes){var id,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:id=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:"",eventMetadata=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:null;return[4,(0,_upsertRole.createOrUpdateRole)(tenantId,id,allowedScopes,eventMetadata,serviceClient)];case 1:return[2,_state.sent()]}})});return function upsertRole(tenantId,allowedScopes){return _ref.apply(this,arguments)}}();deleteRole=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:eventMetadata=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:null;return[4,(0,_deleteRole.deleteExistingRole)(tenantId,id,eventMetadata,serviceClient)];case 1:return[2,_state.sent()]}})});return function deleteRole(tenantId,id){return _ref.apply(this,arguments)}}();getRoles=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_getRoles.getAllRoles)(tenantId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getRoles(tenantId){return _ref.apply(this,arguments)}}();createUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,email,assignedRoleIds){var login,displayName,password,active,blockedUntil,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:login=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:"",displayName=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:"",password=_arguments.length>5&&_arguments[5]!==void 0?_arguments[5]:"",active=_arguments.length>6&&_arguments[6]!==void 0?_arguments[6]:false,blockedUntil=_arguments.length>7&&_arguments[7]!==void 0?_arguments[7]:new Date(0),eventMetadata=_arguments.length>8&&_arguments[8]!==void 0?_arguments[8]:null;return[4,(0,_createUser.createNewUser)(tenantId,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient)];case 1:return[2,_state.sent()]}})});return function createUser(tenantId,email,assignedRoleIds){return _ref.apply(this,arguments)}}();updateUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id,email,assignedRoleIds){var login,displayName,password,active,blockedUntil,eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:login=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:"",displayName=_arguments.length>5&&_arguments[5]!==void 0?_arguments[5]:"",password=_arguments.length>6&&_arguments[6]!==void 0?_arguments[6]:"",active=_arguments.length>7&&_arguments[7]!==void 0?_arguments[7]:false,blockedUntil=_arguments.length>8&&_arguments[8]!==void 0?_arguments[8]:new Date(0),eventMetadata=_arguments.length>9&&_arguments[9]!==void 0?_arguments[9]:null;return[4,(0,_updateUser.updateExistingUser)(tenantId,id,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient)];case 1:return[2,_state.sent()]}})});return function updateUser(tenantId,id,email,assignedRoleIds){return _ref.apply(this,arguments)}}();deleteUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id){var eventMetadata;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:eventMetadata=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:null;return[4,(0,_deleteUser.deleteExistingUser)(tenantId,id,eventMetadata,serviceClient)];case 1:return[2,_state.sent()]}})});return function deleteUser(tenantId,id){return _ref.apply(this,arguments)}}();getUsers=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(0,_getUsers.getAllUsers)(tenantId,serviceClient)];case 1:return[2,_state.sent()]}})});return function getUsers(tenantId){return _ref.apply(this,arguments)}}();close=/*#__PURE__*/function(){var _ref=_async_to_generator(function(){return _ts_generator(this,function(_state){serviceClient.close();return[2]})});return function close(){return _ref.apply(this,arguments)}}();return[2,{upsertRole:upsertRole,deleteRole:deleteRole,getRoles:getRoles,createUser:createUser,updateUser:updateUser,deleteUser:deleteUser,getUsers:getUsers,close:close}]})});return function newManagementClient(config){return _ref.apply(this,arguments)}}();
@@ -1,6 +1,7 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
+ import { EventMetadata } from "./eventMetadata";
2
3
  export interface CreateUserResponse {
3
4
  id: string;
4
5
  setInitialPasswordToken: string;
5
6
  }
6
- export declare const createNewUser: (tenantId: string, login: string, email: string, displayName: string, password: string, assignedRoleIds: string[], active: boolean, blockedUntil: Date, serviceClient: ServiceClient) => Promise<CreateUserResponse>;
7
+ export declare const createNewUser: (tenantId: string, login: string, email: string, displayName: string, password: string, assignedRoleIds: string[], active: boolean, blockedUntil: Date, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<CreateUserResponse>;
@@ -1,27 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createNewUser = void 0;
4
- const createNewUser = async (tenantId, login, email, displayName, password, assignedRoleIds, active, blockedUntil, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.createUser({
7
- tenantId,
8
- login,
9
- email,
10
- displayName,
11
- password,
12
- active,
13
- assignedRoleIds,
14
- blockedUntil: blockedUntil.getTime().toString(),
15
- }, (error, response) => {
16
- if (error) {
17
- reject(error.message);
18
- return;
19
- }
20
- resolve({
21
- id: response.id,
22
- setInitialPasswordToken: response.setInitialPasswordToken,
23
- });
24
- });
25
- });
26
- };
27
- exports.createNewUser = createNewUser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"createNewUser",{enumerable:true,get:function(){return createNewUser}});var _eventMetadata=require("./eventMetadata");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var createNewUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.createUser({tenantId:tenantId,login:login,email:email,displayName:displayName,password:password,active:active,assignedRoleIds:assignedRoleIds,blockedUntil:blockedUntil.getTime().toString(),eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error,response){if(error){reject(error.message);return}resolve({id:response.id,setInitialPasswordToken:response.setInitialPasswordToken})})})]})});return function createNewUser(tenantId,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,2 +1,3 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
2
- export declare const deleteExistingRole: (tenantId: string, id: string, serviceClient: ServiceClient) => Promise<void>;
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
+ import { EventMetadata } from "./eventMetadata";
3
+ export declare const deleteExistingRole: (tenantId: string, id: string, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<void>;
@@ -1,18 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteExistingRole = void 0;
4
- const deleteExistingRole = async (tenantId, id, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.deleteRole({
7
- tenantId,
8
- id,
9
- }, error => {
10
- if (error) {
11
- reject(error.message);
12
- return;
13
- }
14
- resolve();
15
- });
16
- });
17
- };
18
- exports.deleteExistingRole = deleteExistingRole;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"deleteExistingRole",{enumerable:true,get:function(){return deleteExistingRole}});var _eventMetadata=require("./eventMetadata");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var deleteExistingRole=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.deleteRole({tenantId:tenantId,id:id,eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error){if(error){reject(error.message);return}resolve()})})]})});return function deleteExistingRole(tenantId,id,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,2 +1,3 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
2
- export declare const deleteExistingUser: (tenantId: string, id: string, serviceClient: ServiceClient) => Promise<void>;
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
+ import { EventMetadata } from "./eventMetadata";
3
+ export declare const deleteExistingUser: (tenantId: string, id: string, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<void>;
@@ -1,18 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteExistingUser = void 0;
4
- const deleteExistingUser = async (tenantId, id, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.deleteUser({
7
- tenantId,
8
- id,
9
- }, error => {
10
- if (error) {
11
- reject(error.message);
12
- return;
13
- }
14
- resolve();
15
- });
16
- });
17
- };
18
- exports.deleteExistingUser = deleteExistingUser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"deleteExistingUser",{enumerable:true,get:function(){return deleteExistingUser}});var _eventMetadata=require("./eventMetadata");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var deleteExistingUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.deleteUser({tenantId:tenantId,id:id,eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error){if(error){reject(error.message);return}resolve()})})]})});return function deleteExistingUser(tenantId,id,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -0,0 +1,7 @@
1
+ export interface EventMetadata {
2
+ causationId: string;
3
+ correlationId: string;
4
+ deploymentId: string;
5
+ userId: string;
6
+ }
7
+ export declare const fillMetadataWithDefaults: (metadata: Partial<EventMetadata> | null) => EventMetadata;
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"fillMetadataWithDefaults",{enumerable:true,get:function(){return fillMetadataWithDefaults}});var fillMetadataWithDefaults=function(metadata){if(!metadata){return{causationId:"",correlationId:"",deploymentId:"",userId:""}}return{causationId:metadata.causationId||"",correlationId:metadata.correlationId||"",deploymentId:metadata.deploymentId||"",userId:metadata.userId||""}};
@@ -1,4 +1,4 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
2
  export interface Role {
3
3
  id: string;
4
4
  allowedScopes: RoleScope[];
@@ -1,17 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAllRoles = void 0;
4
- const getAllRoles = async (tenantId, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.getRoles({
7
- tenantId,
8
- }, (error, response) => {
9
- if (error) {
10
- reject(error.message);
11
- return;
12
- }
13
- resolve(response.roles);
14
- });
15
- });
16
- };
17
- exports.getAllRoles = getAllRoles;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getAllRoles",{enumerable:true,get:function(){return getAllRoles}});function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var getAllRoles=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.getRoles({tenantId:tenantId},function(error,response){if(error){reject(error.message);return}resolve(response.roles)})})]})});return function getAllRoles(tenantId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,4 +1,4 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
2
  export interface User {
3
3
  id: string;
4
4
  login: string;
@@ -1,30 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAllUsers = void 0;
4
- const getAllUsers = async (tenantId, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.getUsers({
7
- tenantId,
8
- }, (error, response) => {
9
- if (error) {
10
- reject(error.message);
11
- return;
12
- }
13
- resolve(response.users.map(user => {
14
- const newUser = {
15
- active: user.active,
16
- assignedRoleIds: user.assignedRoleIds,
17
- blockedUntil: parseInt(user.blockedUntil),
18
- displayName: user.displayName,
19
- email: user.email,
20
- failedAttempts: parseInt(user.failedAttempts),
21
- id: user.id,
22
- lastAttempt: parseInt(user.lastAttempt),
23
- login: user.login,
24
- };
25
- return newUser;
26
- }));
27
- });
28
- });
29
- };
30
- exports.getAllUsers = getAllUsers;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"getAllUsers",{enumerable:true,get:function(){return getAllUsers}});function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var getAllUsers=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.getUsers({tenantId:tenantId},function(error,response){if(error){reject(error.message);return}resolve(response.users.map(function(user){var newUser={active:user.active,assignedRoleIds:user.assignedRoleIds,blockedUntil:parseInt(user.blockedUntil),displayName:user.displayName,email:user.email,failedAttempts:parseInt(user.failedAttempts),id:user.id,lastAttempt:parseInt(user.lastAttempt),login:user.login};return newUser}))})})]})});return function getAllUsers(tenantId,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,2 +1,3 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
2
- export declare const updateExistingUser: (tenantId: string, id: string, login: string, email: string, displayName: string, password: string, assignedRoleIds: string[], active: boolean, blockedUntil: Date, serviceClient: ServiceClient) => Promise<void>;
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
+ import { EventMetadata } from "./eventMetadata";
3
+ export declare const updateExistingUser: (tenantId: string, id: string, login: string, email: string, displayName: string, password: string, assignedRoleIds: string[], active: boolean, blockedUntil: Date, eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<void>;
@@ -1,25 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateExistingUser = void 0;
4
- const updateExistingUser = async (tenantId, id, login, email, displayName, password, assignedRoleIds, active, blockedUntil, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.updateUser({
7
- tenantId,
8
- id,
9
- login,
10
- email,
11
- displayName,
12
- password,
13
- active,
14
- assignedRoleIds,
15
- blockedUntil: blockedUntil.getTime().toString(),
16
- }, error => {
17
- if (error) {
18
- reject(error.message);
19
- return;
20
- }
21
- resolve();
22
- });
23
- });
24
- };
25
- exports.updateExistingUser = updateExistingUser;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"updateExistingUser",{enumerable:true,get:function(){return updateExistingUser}});var _eventMetadata=require("./eventMetadata");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var updateExistingUser=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.updateUser({tenantId:tenantId,id:id,login:login,email:email,displayName:displayName,password:password,active:active,assignedRoleIds:assignedRoleIds,blockedUntil:blockedUntil.getTime().toString(),eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error){if(error){reject(error.message);return}resolve()})})]})});return function updateExistingUser(tenantId,id,login,email,displayName,password,assignedRoleIds,active,blockedUntil,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -1,6 +1,7 @@
1
- import { ServiceClient } from "@fraym/proto/freym/auth/management";
1
+ import { ServiceClient } from "@fraym/proto/dist/index.freym.auth.management";
2
+ import { EventMetadata } from "./eventMetadata";
2
3
  export interface UpsertRoleScope {
3
4
  scopeName: string;
4
5
  clientId?: string;
5
6
  }
6
- export declare const createOrUpdateRole: (tenantId: string, id: string, allowedScopes: UpsertRoleScope[], serviceClient: ServiceClient) => Promise<string>;
7
+ export declare const createOrUpdateRole: (tenantId: string, id: string, allowedScopes: UpsertRoleScope[], eventMetadata: Partial<EventMetadata> | null, serviceClient: ServiceClient) => Promise<string>;
@@ -1,25 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createOrUpdateRole = void 0;
4
- const createOrUpdateRole = async (tenantId, id, allowedScopes, serviceClient) => {
5
- return new Promise((resolve, reject) => {
6
- serviceClient.upsertRole({
7
- tenantId,
8
- id,
9
- allowedScopes: allowedScopes.map(scope => {
10
- var _a;
11
- return {
12
- scopeName: scope.scopeName,
13
- clientId: (_a = scope.clientId) !== null && _a !== void 0 ? _a : "",
14
- };
15
- }),
16
- }, (error, response) => {
17
- if (error) {
18
- reject(error.message);
19
- return;
20
- }
21
- resolve(response.id);
22
- });
23
- });
24
- };
25
- exports.createOrUpdateRole = createOrUpdateRole;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"createOrUpdateRole",{enumerable:true,get:function(){return createOrUpdateRole}});var _eventMetadata=require("./eventMetadata");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var createOrUpdateRole=/*#__PURE__*/function(){var _ref=_async_to_generator(function(tenantId,id,allowedScopes,eventMetadata,serviceClient){return _ts_generator(this,function(_state){return[2,new Promise(function(resolve,reject){serviceClient.upsertRole({tenantId:tenantId,id:id,allowedScopes:allowedScopes.map(function(scope){var _scope_clientId;return{scopeName:scope.scopeName,clientId:(_scope_clientId=scope.clientId)!==null&&_scope_clientId!==void 0?_scope_clientId:""}}),eventMetadata:(0,_eventMetadata.fillMetadataWithDefaults)(eventMetadata)},function(error,response){if(error){reject(error.message);return}resolve(response.id)})})]})});return function createOrUpdateRole(tenantId,id,allowedScopes,eventMetadata,serviceClient){return _ref.apply(this,arguments)}}();
@@ -5,6 +5,6 @@ export interface TokenData {
5
5
  userId: string;
6
6
  scopes: string[];
7
7
  exp: number;
8
- data: any;
8
+ data: Record<string, any> | null;
9
9
  }
10
10
  export declare const getTokenData: (appSecret: string, token: string, requireUserId?: boolean) => Promise<TokenData>;
@@ -1,64 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTokenData = exports.addDataToJwt = exports.generateJwt = void 0;
4
- const jose_1 = require("jose");
5
- const alg = "HS256";
6
- const generateJwt = async (appSecret, tenantId, scopes = [], data = {}, expirationTime = "5m") => {
7
- const secret = new TextEncoder().encode(appSecret);
8
- return await new jose_1.SignJWT({
9
- type: "access_token",
10
- tenantId,
11
- scopes,
12
- data,
13
- })
14
- .setProtectedHeader({
15
- alg,
16
- typ: "JWT",
17
- })
18
- .setIssuedAt()
19
- .setNotBefore("0s")
20
- .setIssuer("auth")
21
- .setAudience(["fraym"])
22
- .setExpirationTime(expirationTime)
23
- .sign(secret);
24
- };
25
- exports.generateJwt = generateJwt;
26
- const addDataToJwt = async (appSecret, token, data) => {
27
- var _a;
28
- const secret = new TextEncoder().encode(appSecret);
29
- const { payload, protectedHeader } = await (0, jose_1.jwtVerify)(token, secret, {
30
- clockTolerance: "10 seconds",
31
- });
32
- if (!payload.exp) {
33
- throw Error("expiration time is missing in JWT");
34
- }
35
- const newData = (_a = payload.data) !== null && _a !== void 0 ? _a : {};
36
- for (let key in data) {
37
- newData[key] = data[key];
38
- }
39
- return new jose_1.SignJWT(Object.assign(Object.assign({}, payload), { data: newData }))
40
- .setProtectedHeader(protectedHeader)
41
- .sign(secret);
42
- };
43
- exports.addDataToJwt = addDataToJwt;
44
- const getTokenData = async (appSecret, token, requireUserId = true) => {
45
- var _a, _b, _c;
46
- const secret = new TextEncoder().encode(appSecret);
47
- const { payload } = await (0, jose_1.jwtVerify)(token, secret, {
48
- clockTolerance: "10 seconds",
49
- });
50
- if (!payload.exp) {
51
- throw Error("expiration time is missing in JWT");
52
- }
53
- if (requireUserId && !payload.sub) {
54
- throw Error("user id (subject) is missing in JWT");
55
- }
56
- return {
57
- tenantId: (_a = payload.tenantId) !== null && _a !== void 0 ? _a : "",
58
- scopes: (_b = payload.scopes) !== null && _b !== void 0 ? _b : [],
59
- userId: (_c = payload.sub) !== null && _c !== void 0 ? _c : "",
60
- exp: payload.exp,
61
- data: payload.data,
62
- };
63
- };
64
- exports.getTokenData = getTokenData;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:all[name]})}_export(exports,{addDataToJwt:function(){return addDataToJwt},generateJwt:function(){return generateJwt},getTokenData:function(){return getTokenData}});var _jose=require("jose");function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}function _ts_generator(thisArg,body){var f,y,t,g,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]};return g={next:verb(0),"throw":verb(1),"return":verb(2)},typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var alg="HS256";var generateJwt=/*#__PURE__*/function(){var _ref=_async_to_generator(function(appSecret,tenantId){var scopes,data,expirationTime,secret;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:scopes=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:[],data=_arguments.length>3&&_arguments[3]!==void 0?_arguments[3]:{},expirationTime=_arguments.length>4&&_arguments[4]!==void 0?_arguments[4]:"5m";secret=new TextEncoder().encode(appSecret);return[4,new _jose.SignJWT({type:"access_token",tenantId:tenantId,scopes:scopes,data:data}).setProtectedHeader({alg:alg,typ:"JWT"}).setIssuedAt().setNotBefore("0s").setIssuer("auth").setAudience(["fraym"]).setExpirationTime(expirationTime).sign(secret)];case 1:return[2,_state.sent()]}})});return function generateJwt(appSecret,tenantId){return _ref.apply(this,arguments)}}();var addDataToJwt=/*#__PURE__*/function(){var _ref=_async_to_generator(function(appSecret,token,data){var secret,_ref,payload,protectedHeader,_payload_data,newData,key;return _ts_generator(this,function(_state){switch(_state.label){case 0:secret=new TextEncoder().encode(appSecret);return[4,(0,_jose.jwtVerify)(token,secret,{clockTolerance:"10 seconds"})];case 1:_ref=_state.sent(),payload=_ref.payload,protectedHeader=_ref.protectedHeader;if(!payload.exp){throw Error("expiration time is missing in JWT")}newData=(_payload_data=payload.data)!==null&&_payload_data!==void 0?_payload_data:{};for(var key in data){newData[key]=data[key]}return[2,new _jose.SignJWT(_object_spread_props(_object_spread({},payload),{data:newData})).setProtectedHeader(protectedHeader).sign(secret)]}})});return function addDataToJwt(appSecret,token,data){return _ref.apply(this,arguments)}}();var getTokenData=/*#__PURE__*/function(){var _ref=_async_to_generator(function(appSecret,token){var requireUserId,secret,payload,_payload_tenantId,_payload_scopes,_payload_sub,_payload_data;var _arguments=arguments;return _ts_generator(this,function(_state){switch(_state.label){case 0:requireUserId=_arguments.length>2&&_arguments[2]!==void 0?_arguments[2]:true;secret=new TextEncoder().encode(appSecret);return[4,(0,_jose.jwtVerify)(token,secret,{clockTolerance:"10 seconds"})];case 1:payload=_state.sent().payload;if(!payload.exp){throw Error("expiration time is missing in JWT")}if(requireUserId&&!payload.sub){throw Error("user id (subject) is missing in JWT")}return[2,{tenantId:(_payload_tenantId=payload.tenantId)!==null&&_payload_tenantId!==void 0?_payload_tenantId:"",scopes:(_payload_scopes=payload.scopes)!==null&&_payload_scopes!==void 0?_payload_scopes:[],userId:(_payload_sub=payload.sub)!==null&&_payload_sub!==void 0?_payload_sub:"",exp:payload.exp,data:(_payload_data=payload.data)!==null&&_payload_data!==void 0?_payload_data:null}]}})});return function getTokenData(appSecret,token){return _ref.apply(this,arguments)}}();
package/package.json CHANGED
@@ -1,48 +1,31 @@
1
1
  {
2
2
  "name": "@fraym/auth",
3
- "version": "0.7.1",
3
+ "version": "0.31.0",
4
4
  "license": "MIT",
5
- "homepage": "https://github.com/fraym/auth-nodejs",
5
+ "homepage": "https://github.com/fraym/freym-api",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/fraym/auth-nodejs.git"
8
+ "url": "git+https://github.com/fraym/freym-api.git"
9
9
  },
10
- "description": "nodejs client implementation for our auth service",
10
+ "description": "JS client implementation of the auth service of Freym",
11
11
  "scripts": {
12
- "test": "echo \"Error: no test specified\" && exit 0",
13
- "format": "prettier --write \"**/*.{ts,tsx,json}\"",
14
- "lint": "prettier --check \"**/*.{ts,tsx,json}\"",
15
- "build": "npm run clean && tsc",
16
- "clean": "rm -rf dist",
17
- "prepublishOnly": "npm test && npm run lint && npm run build",
18
- "preversion": "npm run lint",
19
- "cmd": "dist/cmd/auth.js"
12
+ "build": "rm -rf dist && tsc && npx swc . -d dist",
13
+ "lint": "eslint && prettier --check \"**/*.{ts,tsx,json,scss,css}\"",
14
+ "fix": "eslint --fix && prettier --write \"**/*.{ts,tsx,json,scss,css}\""
20
15
  },
21
16
  "files": [
22
17
  "dist/**/*"
23
18
  ],
24
19
  "engines": {
25
- "node": ">=16"
20
+ "node": ">=20"
26
21
  },
27
22
  "main": "dist/index.js",
28
23
  "types": "dist/index.d.ts",
29
24
  "dependencies": {
30
- "@fraym/proto": "^0.5.4",
31
- "@graphql-tools/graphql-file-loader": "^7.5.17",
32
- "@graphql-tools/load": "^7.8.14",
33
- "@grpc/grpc-js": "^1.9.3",
34
- "dotenv": "^16.3.1",
35
- "graphql": "^16.8.0",
36
- "jose": "^4.14.6",
37
- "yargs": "^17.7.2"
38
- },
39
- "devDependencies": {
40
- "@becklyn/prettier": "^1.0.2",
41
- "@types/uuid": "^8.3.4",
42
- "@types/yargs": "^17.0.24",
43
- "prettier": "^2.8.8",
44
- "typescript": "^4.9.5",
45
- "uuid": "^9.0.1"
25
+ "@fraym/proto": "^0.31.0",
26
+ "@grpc/grpc-js": "^1.12.6",
27
+ "dotenv": "^16.4.7",
28
+ "jose": "^5.9.6"
46
29
  },
47
30
  "prettier": "@becklyn/prettier"
48
31
  }