@continuoussecuritytooling/keycloak-reporter 0.6.0 → 0.7.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/.eslintrc.cjs +4 -3
- package/.github/workflows/pipeline.yml +37 -10
- package/.github/workflows/release.yml +1 -1
- package/.prettierrc +2 -2
- package/Dockerfile +15 -1
- package/README.md +4 -3
- package/artifacthub-repo.yml +6 -0
- package/charts/keycloak-reporter/Chart.yaml +9 -3
- package/charts/keycloak-reporter/README.md +7 -16
- package/charts/keycloak-reporter/values.yaml +2 -1
- package/cli.ts +52 -87
- package/config/schema.json +6 -1
- package/index.ts +1 -1
- package/lib/client.ts +10 -37
- package/lib/output.ts +2 -2
- package/lib/user.ts +86 -49
- package/package.json +4 -3
- package/renovate.json +12 -5
- package/src/commands.ts +27 -0
- package/src/config.ts +6 -18
- package/dist/cli.js +0 -131
- package/dist/cli.js.map +0 -1
- package/dist/config/schema.json +0 -65
- package/dist/index.js +0 -4
- package/dist/index.js.map +0 -1
- package/dist/lib/client.js +0 -41
- package/dist/lib/client.js.map +0 -1
- package/dist/lib/convert.js +0 -9
- package/dist/lib/convert.js.map +0 -1
- package/dist/lib/output.js +0 -113
- package/dist/lib/output.js.map +0 -1
- package/dist/lib/user.js +0 -75
- package/dist/lib/user.js.map +0 -1
- package/dist/src/cli.js +0 -19
- package/dist/src/cli.js.map +0 -1
- package/dist/src/config.js +0 -57
- package/dist/src/config.js.map +0 -1
- package/src/cli.ts +0 -26
package/dist/lib/output.js
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { IncomingWebhook as TeamsWebhook } from 'ms-teams-webhook';
|
|
2
|
-
import { IncomingWebhook as SlackWebhook } from '@slack/webhook';
|
|
3
|
-
var WebhookType;
|
|
4
|
-
(function (WebhookType) {
|
|
5
|
-
WebhookType["SLACK"] = "slack";
|
|
6
|
-
WebhookType["TEAMS"] = "teams";
|
|
7
|
-
})(WebhookType || (WebhookType = {}));
|
|
8
|
-
export async function post2Webhook(type, url, title, reportContent, text) {
|
|
9
|
-
//const title= 'Keycloak Reporting';
|
|
10
|
-
const date = new Date();
|
|
11
|
-
switch (type) {
|
|
12
|
-
case WebhookType.TEAMS.toString():
|
|
13
|
-
return new TeamsWebhook(url).send({
|
|
14
|
-
type: 'message',
|
|
15
|
-
attachments: [
|
|
16
|
-
{
|
|
17
|
-
contentType: 'application/vnd.microsoft.card.adaptive',
|
|
18
|
-
content: {
|
|
19
|
-
$schema: 'http://adaptivecards.io/schemas/adaptive-card.json',
|
|
20
|
-
type: 'AdaptiveCard',
|
|
21
|
-
version: '1.2',
|
|
22
|
-
body: [
|
|
23
|
-
{
|
|
24
|
-
type: 'FactSet',
|
|
25
|
-
facts: [
|
|
26
|
-
{
|
|
27
|
-
title: 'Type',
|
|
28
|
-
value: title
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
title: 'Date',
|
|
32
|
-
value: `${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`
|
|
33
|
-
}
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
type: 'TextBlock',
|
|
38
|
-
text: text != null ? text : '',
|
|
39
|
-
wrap: true
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
actions: [
|
|
43
|
-
{
|
|
44
|
-
type: 'Action.ShowCard',
|
|
45
|
-
title: 'Show raw report data',
|
|
46
|
-
card: {
|
|
47
|
-
type: 'AdaptiveCard',
|
|
48
|
-
body: [
|
|
49
|
-
{
|
|
50
|
-
type: 'TextBlock',
|
|
51
|
-
text: reportContent,
|
|
52
|
-
wrap: true
|
|
53
|
-
}
|
|
54
|
-
],
|
|
55
|
-
$schema: 'http://adaptivecards.io/schemas/adaptive-card.json'
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
]
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
});
|
|
63
|
-
// defaulting to Slack
|
|
64
|
-
default:
|
|
65
|
-
// eslint-disable-next-line no-case-declarations
|
|
66
|
-
const blockEntries = [
|
|
67
|
-
{
|
|
68
|
-
type: 'section',
|
|
69
|
-
fields: [
|
|
70
|
-
{ type: 'mrkdwn', text: `*Type*: ${title}` },
|
|
71
|
-
{
|
|
72
|
-
type: 'mrkdwn',
|
|
73
|
-
text: `*Date*: ${date.getDate()}-${date.getMonth() + 1}-${date.getFullYear()}`
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
type: 'divider'
|
|
79
|
-
}
|
|
80
|
-
];
|
|
81
|
-
if (text != null) {
|
|
82
|
-
blockEntries.push({
|
|
83
|
-
type: 'context',
|
|
84
|
-
elements: [{ type: 'plain_text', text: text }]
|
|
85
|
-
});
|
|
86
|
-
blockEntries.push({
|
|
87
|
-
type: 'divider'
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
blockEntries.push({
|
|
91
|
-
type: 'context',
|
|
92
|
-
elements: [
|
|
93
|
-
{
|
|
94
|
-
type: 'mrkdwn',
|
|
95
|
-
text: `
|
|
96
|
-
\`\`\`
|
|
97
|
-
${reportContent}
|
|
98
|
-
\`\`\`
|
|
99
|
-
`
|
|
100
|
-
}
|
|
101
|
-
]
|
|
102
|
-
}, {
|
|
103
|
-
type: 'context',
|
|
104
|
-
elements: [{ type: 'plain_text', text: 'Raw report data' }]
|
|
105
|
-
});
|
|
106
|
-
return new SlackWebhook(url).send({
|
|
107
|
-
blocks: blockEntries
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/*
|
|
112
|
-
*/
|
|
113
|
-
//# sourceMappingURL=output.js.map
|
package/dist/lib/output.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../lib/output.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/user.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
export async function clientListing(client) {
|
|
2
|
-
const currentRealm = client.realmName;
|
|
3
|
-
let realms;
|
|
4
|
-
try {
|
|
5
|
-
// iterate over realms
|
|
6
|
-
realms = await client.realms.find();
|
|
7
|
-
}
|
|
8
|
-
catch (e) {
|
|
9
|
-
console.error('Check Client role:', e.response.statusText);
|
|
10
|
-
return Promise.reject();
|
|
11
|
-
}
|
|
12
|
-
let allClients = new Array();
|
|
13
|
-
for (const realm of realms) {
|
|
14
|
-
// switch realm
|
|
15
|
-
client.setConfig({
|
|
16
|
-
realmName: realm.realm,
|
|
17
|
-
});
|
|
18
|
-
const realmClients = new Array();
|
|
19
|
-
for (const user of await client.clients.find()) {
|
|
20
|
-
realmClients.push({
|
|
21
|
-
client: user.clientId,
|
|
22
|
-
id: user.id,
|
|
23
|
-
description: user.description,
|
|
24
|
-
realm: realm.realm,
|
|
25
|
-
enabled: user.enabled,
|
|
26
|
-
public: user.publicClient,
|
|
27
|
-
allowedOrigins: JSON.stringify(user.webOrigins),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
allClients = [...allClients, ...realmClients];
|
|
31
|
-
}
|
|
32
|
-
// switch back to realm
|
|
33
|
-
client.setConfig({
|
|
34
|
-
realmName: currentRealm,
|
|
35
|
-
});
|
|
36
|
-
return new Promise((resolve) => resolve(allClients));
|
|
37
|
-
}
|
|
38
|
-
export async function userListing(client) {
|
|
39
|
-
const currentRealm = client.realmName;
|
|
40
|
-
let realms;
|
|
41
|
-
// iterate over realms
|
|
42
|
-
try {
|
|
43
|
-
realms = await client.realms.find();
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
console.error('Check Client role:', e.response.statusText);
|
|
47
|
-
return Promise.reject();
|
|
48
|
-
}
|
|
49
|
-
let allUsers = new Array();
|
|
50
|
-
for (const realm of realms) {
|
|
51
|
-
// switch realm
|
|
52
|
-
client.setConfig({
|
|
53
|
-
realmName: realm.realm,
|
|
54
|
-
});
|
|
55
|
-
const realmUsers = new Array();
|
|
56
|
-
for (const user of await client.users.find()) {
|
|
57
|
-
realmUsers.push({
|
|
58
|
-
username: user.username,
|
|
59
|
-
id: user.id,
|
|
60
|
-
firstName: user.firstName,
|
|
61
|
-
lastName: user.lastName,
|
|
62
|
-
email: user.email,
|
|
63
|
-
realm: realm.realm,
|
|
64
|
-
enabled: user.enabled,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
allUsers = [...allUsers, ...realmUsers];
|
|
68
|
-
}
|
|
69
|
-
// switch back to realm
|
|
70
|
-
client.setConfig({
|
|
71
|
-
realmName: currentRealm,
|
|
72
|
-
});
|
|
73
|
-
return new Promise((resolve) => resolve(allUsers));
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=user.js.map
|
package/dist/lib/user.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../lib/user.ts"],"names":[],"mappings":"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"}
|
package/dist/src/cli.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createClient } from '../lib/client.js';
|
|
2
|
-
import { userListing, clientListing } from '../lib/user.js';
|
|
3
|
-
export async function listUsers(options) {
|
|
4
|
-
const users = await userListing(await createClient({
|
|
5
|
-
clientId: options.clientId,
|
|
6
|
-
clientSecret: options.clientSecret,
|
|
7
|
-
rootUrl: options.rootUrl,
|
|
8
|
-
}));
|
|
9
|
-
return new Promise((resolve) => resolve(users));
|
|
10
|
-
}
|
|
11
|
-
export async function listClients(options) {
|
|
12
|
-
const clients = await clientListing(await createClient({
|
|
13
|
-
clientId: options.clientId,
|
|
14
|
-
clientSecret: options.clientSecret,
|
|
15
|
-
rootUrl: options.rootUrl,
|
|
16
|
-
}));
|
|
17
|
-
return new Promise((resolve) => resolve(clients));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/src/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAQ,WAAW,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAgB;IAC9C,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,MAAM,YAAY,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CACH,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAgB;IAChD,MAAM,OAAO,GAAG,MAAM,aAAa,CACjC,MAAM,YAAY,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CACH,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACpD,CAAC"}
|
package/dist/src/config.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { assoc, pick, mergeAll, mergeDeepRight } from 'ramda';
|
|
2
|
-
import Ajv from 'ajv';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
const schema = JSON.parse(fs.readFileSync(fileURLToPath(path.join(import.meta.url, '../../config/schema.json')), 'utf8'));
|
|
7
|
-
const ajv = new Ajv.default();
|
|
8
|
-
const ajvValidate = ajv.compile(schema);
|
|
9
|
-
// import the config file
|
|
10
|
-
function buildConfigFromFile(filePath) {
|
|
11
|
-
if (!filePath)
|
|
12
|
-
return {};
|
|
13
|
-
const isAbsolutePath = filePath.charAt(0) === '/';
|
|
14
|
-
return JSON.parse(isAbsolutePath
|
|
15
|
-
? fs.readFileSync(filePath, 'utf8')
|
|
16
|
-
: fs.readFileSync(fileURLToPath(path.join(import.meta.url, '../config', filePath)), 'utf8'));
|
|
17
|
-
}
|
|
18
|
-
// build an object using the defaults in the schema
|
|
19
|
-
function buildDefaults(schema, definitions) {
|
|
20
|
-
return Object.keys(schema.properties).reduce((acc, prop) => {
|
|
21
|
-
let spec = schema.properties[prop];
|
|
22
|
-
if (spec.$ref) {
|
|
23
|
-
spec = definitions[spec.$ref.replace('#/definitions/', '')];
|
|
24
|
-
if (spec && spec.type === 'object') {
|
|
25
|
-
return assoc(prop, buildDefaults(spec, definitions), acc);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return assoc(prop, spec.default, acc);
|
|
29
|
-
}, {});
|
|
30
|
-
}
|
|
31
|
-
// build an object of config values taken from process.env
|
|
32
|
-
function buildEnvironmentVariablesConfig(schema) {
|
|
33
|
-
const trueRx = /^true$/i;
|
|
34
|
-
const configKeys = Object.keys(schema.properties);
|
|
35
|
-
const env = pick(configKeys, process.env);
|
|
36
|
-
return Object.keys(env).reduce((acc, key) => {
|
|
37
|
-
const { type } = schema.properties[key];
|
|
38
|
-
switch (type) {
|
|
39
|
-
case 'integer':
|
|
40
|
-
return assoc(key, parseInt(env[key], 10), acc);
|
|
41
|
-
case 'boolean':
|
|
42
|
-
return assoc(key, trueRx.test(env[key]), acc);
|
|
43
|
-
default:
|
|
44
|
-
return assoc(key, env[key], acc);
|
|
45
|
-
}
|
|
46
|
-
}, {});
|
|
47
|
-
}
|
|
48
|
-
function validate(data) {
|
|
49
|
-
const valid = ajvValidate(data);
|
|
50
|
-
if (valid)
|
|
51
|
-
return true;
|
|
52
|
-
throw new Error(ajv.errorsText());
|
|
53
|
-
}
|
|
54
|
-
// merge the environment variables, config file values, and defaults
|
|
55
|
-
const config = mergeAll(mergeDeepRight(buildDefaults(schema, schema.definitions), buildConfigFromFile(process.env.CONFIG_FILE)), buildEnvironmentVariablesConfig(schema));
|
|
56
|
-
export default config;
|
|
57
|
-
//# sourceMappingURL=config.js.map
|
package/dist/src/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC,EAAE,MAAM,CAAC,CAC/F,CAAC;AAEF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;AAC9B,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAExC,yBAAyB;AACzB,SAAS,mBAAmB,CAAC,QAAQ;IACnC,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc;QAC9B,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;QACnC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjG,CAAC;AACD,mDAAmD;AACnD,SAAS,aAAa,CAAC,MAAM,EAAE,WAAW;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACzD,IAAI,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;YAC5D,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClC,OAAO,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;aAC3D;SACF;QACD,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,0DAA0D;AAC1D,SAAS,+BAA+B,CAAC,MAAM;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC;IACzB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxC,QAAQ,IAAI,EAAE;YACZ,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACjD,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAChD;gBACE,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;SACpC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,SAAS,QAAQ,CAAC,IAAI;IACpB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,oEAAoE;AACpE,MAAM,MAAM,GAAG,QAAQ,CACrB,cAAc,CACZ,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EACzC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAC7C,EACD,+BAA+B,CAAC,MAAM,CAAC,CACxC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/src/cli.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Options, createClient } from '../lib/client.js';
|
|
2
|
-
import { User, userListing, clientListing, Client } from '../lib/user.js';
|
|
3
|
-
|
|
4
|
-
export async function listUsers(options: Options): Promise<Array<User>> {
|
|
5
|
-
const users = await userListing(
|
|
6
|
-
await createClient({
|
|
7
|
-
clientId: options.clientId,
|
|
8
|
-
clientSecret: options.clientSecret,
|
|
9
|
-
rootUrl: options.rootUrl,
|
|
10
|
-
})
|
|
11
|
-
);
|
|
12
|
-
|
|
13
|
-
return new Promise((resolve) => resolve(users));
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export async function listClients(options: Options): Promise<Array<Client>> {
|
|
17
|
-
const clients = await clientListing(
|
|
18
|
-
await createClient({
|
|
19
|
-
clientId: options.clientId,
|
|
20
|
-
clientSecret: options.clientSecret,
|
|
21
|
-
rootUrl: options.rootUrl,
|
|
22
|
-
})
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
return new Promise((resolve) => resolve(clients));
|
|
26
|
-
}
|