azp-cli 0.0.1 → 0.0.4
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/.github/copilot-instructions.md +59 -0
- package/.vscode/settings.json +2 -1
- package/CHANGELOG.md +31 -0
- package/README.md +149 -5
- package/dist/azure-pim.d.ts +3 -1
- package/dist/azure-pim.d.ts.map +1 -1
- package/dist/azure-pim.js +2 -1
- package/dist/azure-pim.js.map +1 -1
- package/dist/cli.d.ts +65 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +404 -1
- package/dist/cli.js.map +1 -1
- package/dist/index.js +501 -5
- package/dist/index.js.map +1 -1
- package/dist/presets-cli.d.ts +29 -0
- package/dist/presets-cli.d.ts.map +1 -0
- package/dist/presets-cli.js +397 -0
- package/dist/presets-cli.js.map +1 -0
- package/dist/presets.d.ts +52 -0
- package/dist/presets.d.ts.map +1 -0
- package/dist/presets.js +208 -0
- package/dist/presets.js.map +1 -0
- package/dist/ui.d.ts +6 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +54 -1
- package/dist/ui.js.map +1 -1
- package/package.json +5 -2
- package/src/azure-pim.ts +9 -3
- package/src/cli.ts +538 -0
- package/src/index.ts +642 -10
- package/src/presets-cli.ts +500 -0
- package/src/presets.ts +253 -0
- package/src/ui.ts +48 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Copilot instructions for azp-cli
|
|
2
|
+
|
|
3
|
+
## Big picture
|
|
4
|
+
|
|
5
|
+
- This is a Node.js/TypeScript terminal CLI for Azure PIM role activation/deactivation.
|
|
6
|
+
- Entry point: [src/index.ts](src/index.ts) (Commander commands; default is `activate`).
|
|
7
|
+
- Interactive flows: [src/cli.ts](src/cli.ts) (Inquirer menus + loops; calls Azure operations).
|
|
8
|
+
- Presets (config + merge logic): [src/presets.ts](src/presets.ts) (JSON file in user config dir; template expansion).
|
|
9
|
+
- Presets (interactive wizards): [src/presets-cli.ts](src/presets-cli.ts) (Inquirer-based add/edit flows; can query Azure for subscriptions/roles).
|
|
10
|
+
- Auth: [src/auth.ts](src/auth.ts) (Azure CLI credential + Microsoft Graph `/me` lookup).
|
|
11
|
+
- Azure PIM operations: [src/azure-pim.ts](src/azure-pim.ts) (ARM AuthorizationManagementClient schedule APIs).
|
|
12
|
+
- Terminal UX helpers: [src/ui.ts](src/ui.ts) (chalk formatting + single global ora spinner).
|
|
13
|
+
|
|
14
|
+
## Key data flow
|
|
15
|
+
|
|
16
|
+
- `authenticate()` (AzureCliCredential) → Graph `/me` → returns `AuthContext` with `credential`, `userId`, `userPrincipalName`.
|
|
17
|
+
- `showMainMenu(authContext)` → activation/deactivation flows.
|
|
18
|
+
- Presets:
|
|
19
|
+
- CLI `--preset <name>` (and optional defaults) load from `presets.json` via `loadPresets()`.
|
|
20
|
+
- Effective one-shot options are resolved in `src/index.ts` with precedence: CLI flags > preset values > defaults > code defaults.
|
|
21
|
+
- `justification` templates are expanded at runtime using `AuthContext` (e.g., `${date}`, `${datetime}`, `${userPrincipalName}`).
|
|
22
|
+
- Subscriptions fetched via `SubscriptionClient` (`fetchSubscriptions`).
|
|
23
|
+
- Eligible roles via `roleEligibilitySchedules.listForScope("/subscriptions/{id}", { filter: "asTarget()" })`.
|
|
24
|
+
- Activate via `roleAssignmentScheduleRequests.create(..., { requestType: "SelfActivate", linkedRoleEligibilityScheduleId, scheduleInfo, justification })`.
|
|
25
|
+
- Deactivate via `requestType: "SelfDeactivate"` using `linkedRoleEligibilityScheduleId` from active schedules.
|
|
26
|
+
|
|
27
|
+
## Developer workflows
|
|
28
|
+
|
|
29
|
+
- Install deps: `pnpm install` (repo pins pnpm in `package.json`).
|
|
30
|
+
- Dev run (ts-node): `pnpm dev` (runs `src/index.ts` with `tsconfig-paths/register`).
|
|
31
|
+
- Build: `pnpm build` (plain `tsc` → `dist/`).
|
|
32
|
+
- Run built CLI: `node dist/index.js` or `pnpm start`.
|
|
33
|
+
- Lint: `pnpm lint`.
|
|
34
|
+
|
|
35
|
+
## Project conventions to follow
|
|
36
|
+
|
|
37
|
+
- Prefer UI helpers over raw `console.log` in flows:
|
|
38
|
+
- Use `startSpinner/succeedSpinner/failSpinner` and `logInfo/logSuccess/logWarning/logError` from [src/ui.ts](src/ui.ts).
|
|
39
|
+
- `ui.ts` maintains a single global spinner; stop/replace it instead of starting multiple spinners.
|
|
40
|
+
- Keep Azure calls in [src/azure-pim.ts](src/azure-pim.ts); keep prompt/control-flow in [src/cli.ts](src/cli.ts).
|
|
41
|
+
- Keep preset persistence and schema validation in [src/presets.ts](src/presets.ts); keep preset wizards/prompts in [src/presets-cli.ts](src/presets-cli.ts).
|
|
42
|
+
- Inquirer patterns used here:
|
|
43
|
+
- `type: "select"` for single-choice menus, `type: "checkbox"` for multi-select, `type: "confirm"` for final confirmation.
|
|
44
|
+
- Back navigation uses sentinel values like `"__BACK__"`.
|
|
45
|
+
- Errors:
|
|
46
|
+
- `src/index.ts` has top-level error handling and special-cases auth/Azure CLI errors (e.g., messages containing `AADSTS` or `AzureCliCredential`).
|
|
47
|
+
- In `azure-pim.ts`, 403/`AuthorizationFailed` returns an empty list (warn) instead of failing the whole flow.
|
|
48
|
+
- For presets, prefer clear “file path + next step” messages (e.g., mention `AZP_PRESETS_PATH` override or `azp preset list`).
|
|
49
|
+
|
|
50
|
+
## Integration points / prerequisites
|
|
51
|
+
|
|
52
|
+
- Requires Azure CLI login (`az login`) because authentication uses `AzureCliCredential`.
|
|
53
|
+
- Microsoft Graph is used only to resolve the current user via `/me` (scopes: `https://graph.microsoft.com/.default`).
|
|
54
|
+
- ARM management calls use scope `https://management.azure.com/.default` and `@azure/arm-authorization` APIs.
|
|
55
|
+
|
|
56
|
+
## TypeScript/build notes
|
|
57
|
+
|
|
58
|
+
- `tsconfig.json` uses `module`/`moduleResolution`: `NodeNext`, strict settings, and path alias `@/*` → `src/*`.
|
|
59
|
+
- Keep ESM/CJS interop consistent with current imports (don’t rewrite module style unless required).
|
package/.vscode/settings.json
CHANGED
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
+
|
|
5
|
+
### [0.0.4](https://github.com/tapanmeena/azp-cli/compare/v0.0.3...v0.0.4) (2026-01-13)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- add reusable presets for activation/deactivation (stored in user config dir)
|
|
10
|
+
- add preset management commands: `preset list|show|add|edit|remove`
|
|
11
|
+
- support justification templates (`${date}`, `${datetime}`, `${userPrincipalName}`)
|
|
12
|
+
|
|
13
|
+
### 0.0.3 (2026-01-13)
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
- add Azure PIM CLI for role activation and deactivation ([2d10b87](https://github.com/tapanmeena/azp-cli/commit/2d10b87eab7d51a6427f4a70f200521e66e45b98))
|
|
18
|
+
- add copilot instructions for azp-cli ([4c9ab89](https://github.com/tapanmeena/azp-cli/commit/4c9ab894110595f2c88ef8b12073ea51b2c468ef))
|
|
19
|
+
- enhance CLI with non-interactive activation and deactivation options ([3e6fa12](https://github.com/tapanmeena/azp-cli/commit/3e6fa1253e7f1fa1e29c9a75cb90fa6a3d5484bc))
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
- revert version number to 0.0.1 in package.json ([0e814da](https://github.com/tapanmeena/azp-cli/commit/0e814da76560c3416602c46bdc9ae7c2b312e6ea))
|
|
24
|
+
- update @types/node dependency to version 25.0.6 ([21a03a1](https://github.com/tapanmeena/azp-cli/commit/21a03a12eff9ee372ff2f398dfdab40ae83891b1))
|
|
25
|
+
- update import paths to use relative references ([2a287af](https://github.com/tapanmeena/azp-cli/commit/2a287af68d1e0071a8c48af38d46546ccbe184e1))
|
|
26
|
+
|
|
27
|
+
## [0.0.2] - 2026-01-13
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
|
|
31
|
+
- Initial public release.
|
package/README.md
CHANGED
|
@@ -72,11 +72,108 @@ node dist/index.js
|
|
|
72
72
|
|
|
73
73
|
### Commands
|
|
74
74
|
|
|
75
|
-
| Command
|
|
76
|
-
|
|
77
|
-
| `activate`
|
|
78
|
-
| `deactivate` | `d`
|
|
79
|
-
| `
|
|
75
|
+
| Command | Alias | Description |
|
|
76
|
+
| ------------ | ----- | -------------------------------------- |
|
|
77
|
+
| `activate` | `a` | Activate a role in Azure PIM (default) |
|
|
78
|
+
| `deactivate` | `d` | Deactivate a role in Azure PIM |
|
|
79
|
+
| `preset` | - | Manage reusable presets |
|
|
80
|
+
| `help` | - | Display help information |
|
|
81
|
+
|
|
82
|
+
### One-command (non-interactive) activation
|
|
83
|
+
|
|
84
|
+
Use flags to activate PIM roles directly without going through the main menu.
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Activate a single role by name (non-interactive)
|
|
88
|
+
azp activate --no-interactive --yes \
|
|
89
|
+
--subscription-id <SUBSCRIPTION_GUID> \
|
|
90
|
+
--role-name "Owner" \
|
|
91
|
+
--duration-hours 2 \
|
|
92
|
+
--justification "Break-glass for incident" \
|
|
93
|
+
--output json
|
|
94
|
+
|
|
95
|
+
# Activate multiple roles (repeat --role-name)
|
|
96
|
+
azp activate --no-interactive --yes \
|
|
97
|
+
--subscription-id <SUBSCRIPTION_GUID> \
|
|
98
|
+
--role-name "Contributor" \
|
|
99
|
+
--role-name "User Access Administrator"
|
|
100
|
+
|
|
101
|
+
# If a role name matches multiple eligible roles (different scopes),
|
|
102
|
+
# --no-interactive will error unless you explicitly allow activating all matches
|
|
103
|
+
azp activate --no-interactive --yes \
|
|
104
|
+
--subscription-id <SUBSCRIPTION_GUID> \
|
|
105
|
+
--role-name "Contributor" \
|
|
106
|
+
--allow-multiple
|
|
107
|
+
|
|
108
|
+
# Preview what would happen without submitting requests
|
|
109
|
+
azp activate --no-interactive --dry-run \
|
|
110
|
+
--subscription-id <SUBSCRIPTION_GUID> \
|
|
111
|
+
--role-name "Contributor" \
|
|
112
|
+
--output json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Presets
|
|
116
|
+
|
|
117
|
+
Presets let you save your daily activation/deactivation routines (subscription + role names + duration + justification) and reuse them with `--preset <name>`.
|
|
118
|
+
|
|
119
|
+
### Presets file location
|
|
120
|
+
|
|
121
|
+
By default, presets are stored in a per-user config file:
|
|
122
|
+
|
|
123
|
+
- macOS/Linux: `~/.config/azp-cli/presets.json` (or `$XDG_CONFIG_HOME/azp-cli/presets.json`)
|
|
124
|
+
- Windows: `%APPDATA%\azp-cli\presets.json`
|
|
125
|
+
|
|
126
|
+
Override the location with:
|
|
127
|
+
|
|
128
|
+
- `AZP_PRESETS_PATH=/path/to/presets.json`
|
|
129
|
+
|
|
130
|
+
### Preset contents
|
|
131
|
+
|
|
132
|
+
A preset can define one or both blocks:
|
|
133
|
+
|
|
134
|
+
- `activate`: `subscriptionId`, `roleNames[]`, `durationHours`, `justification`, `allowMultiple`
|
|
135
|
+
- `deactivate`: `subscriptionId` (optional), `roleNames[]`, `justification`, `allowMultiple`
|
|
136
|
+
|
|
137
|
+
`justification` supports simple templates:
|
|
138
|
+
|
|
139
|
+
- `${date}` → `YYYY-MM-DD`
|
|
140
|
+
- `${datetime}` → ISO timestamp
|
|
141
|
+
- `${userPrincipalName}` → resolved from Microsoft Graph `/me`
|
|
142
|
+
|
|
143
|
+
### Common workflows
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Create a preset (interactive wizard)
|
|
147
|
+
azp preset add daily-ops
|
|
148
|
+
|
|
149
|
+
# Edit a preset (interactive wizard)
|
|
150
|
+
azp preset edit daily-ops
|
|
151
|
+
|
|
152
|
+
# You can also re-run add to overwrite an existing preset
|
|
153
|
+
azp preset add daily-ops
|
|
154
|
+
|
|
155
|
+
# List presets
|
|
156
|
+
azp preset list
|
|
157
|
+
|
|
158
|
+
# Show one preset
|
|
159
|
+
azp preset show daily-ops
|
|
160
|
+
|
|
161
|
+
# Use a preset (flags still override preset values)
|
|
162
|
+
azp activate --preset daily-ops --yes
|
|
163
|
+
|
|
164
|
+
# Non-interactive run using the preset
|
|
165
|
+
azp activate --preset daily-ops --no-interactive --yes --output json
|
|
166
|
+
|
|
167
|
+
# Deactivate using a preset
|
|
168
|
+
azp deactivate --preset daily-ops --no-interactive --yes
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Defaults
|
|
172
|
+
|
|
173
|
+
When you create a preset via `azp preset add`, you can optionally set it as the default for `activate` and/or `deactivate`.
|
|
174
|
+
|
|
175
|
+
- Default presets are applied automatically when you run one-shot flows and you haven’t explicitly provided the required flags.
|
|
176
|
+
- Example: after setting a default activate preset, `azp activate --no-interactive --yes` can work without specifying `--subscription-id`/`--role-name`.
|
|
80
177
|
|
|
81
178
|
### Example Session
|
|
82
179
|
|
|
@@ -132,6 +229,50 @@ pnpm start
|
|
|
132
229
|
pnpm lint
|
|
133
230
|
```
|
|
134
231
|
|
|
232
|
+
## Changelog & releases
|
|
233
|
+
|
|
234
|
+
This repo uses [Keep a Changelog](https://keepachangelog.com/) format in [CHANGELOG.md](CHANGELOG.md).
|
|
235
|
+
|
|
236
|
+
### Recommended commit messages
|
|
237
|
+
|
|
238
|
+
For best results, use [Conventional Commits](https://www.conventionalcommits.org/):
|
|
239
|
+
|
|
240
|
+
- `feat: ...` (new feature) → minor bump
|
|
241
|
+
- `fix: ...` (bug fix) → patch bump
|
|
242
|
+
- `chore: ...`, `docs: ...`, `refactor: ...` (no bump unless breaking)
|
|
243
|
+
|
|
244
|
+
### Cutting a release
|
|
245
|
+
|
|
246
|
+
1. Make sure `CHANGELOG.md` has up-to-date entries under **Unreleased**.
|
|
247
|
+
|
|
248
|
+
2. Run one of the following:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# Automatically determines next version from commits, updates CHANGELOG.md,
|
|
252
|
+
# bumps package.json, and creates a git tag.
|
|
253
|
+
pnpm release
|
|
254
|
+
|
|
255
|
+
# Preview what would change
|
|
256
|
+
pnpm release:dry
|
|
257
|
+
|
|
258
|
+
# Force a specific bump if needed
|
|
259
|
+
pnpm release -- --release-as patch
|
|
260
|
+
pnpm release -- --release-as minor
|
|
261
|
+
pnpm release -- --release-as major
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
3. Push commits + tags:
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
git push --follow-tags
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
4. Publish to npm (if desired):
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
pnpm publish
|
|
274
|
+
```
|
|
275
|
+
|
|
135
276
|
### Project Structure
|
|
136
277
|
|
|
137
278
|
```
|
|
@@ -161,6 +302,7 @@ azp-cli/
|
|
|
161
302
|
### "Azure CLI not found" Error
|
|
162
303
|
|
|
163
304
|
Ensure Azure CLI is installed and accessible in your PATH:
|
|
305
|
+
|
|
164
306
|
```bash
|
|
165
307
|
az --version
|
|
166
308
|
```
|
|
@@ -168,11 +310,13 @@ az --version
|
|
|
168
310
|
### Authentication Errors
|
|
169
311
|
|
|
170
312
|
1. Make sure you're logged in to Azure CLI:
|
|
313
|
+
|
|
171
314
|
```bash
|
|
172
315
|
az login
|
|
173
316
|
```
|
|
174
317
|
|
|
175
318
|
2. Verify your account has PIM-eligible roles:
|
|
319
|
+
|
|
176
320
|
```bash
|
|
177
321
|
az account show
|
|
178
322
|
```
|
package/dist/azure-pim.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export interface AzureActivationRequest {
|
|
|
39
39
|
export declare const fetchSubscriptions: (credential: AzureCliCredential) => Promise<AzureSubscription[]>;
|
|
40
40
|
export declare const fetchEligibleRolesForSubscription: (credential: AzureCliCredential, subscriptionId: string, subscriptionName: string, principalId: string) => Promise<EligibleAzureRole[]>;
|
|
41
41
|
export declare const listActiveAzureRoles: (credential: AzureCliCredential, subscriptionId: string, subscriptionName: string, principalId: string) => Promise<ActiveAzureRole[]>;
|
|
42
|
-
export declare const activateAzureRole: (credential: AzureCliCredential, request: AzureActivationRequest, subscriptionId: string) => Promise<
|
|
42
|
+
export declare const activateAzureRole: (credential: AzureCliCredential, request: AzureActivationRequest, subscriptionId: string) => Promise<{
|
|
43
|
+
status?: string;
|
|
44
|
+
}>;
|
|
43
45
|
export declare const deactivateAzureRole: (credential: AzureCliCredential, scope: string, roleEligibilityScheduleId: string, subscriptionId: string, principalId: string, roleDefinitionId: string, roleName?: string) => Promise<void>;
|
|
44
46
|
//# sourceMappingURL=azure-pim.d.ts.map
|
package/dist/azure-pim.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-pim.d.ts","sourceRoot":"","sources":["../src/azure-pim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B,EAAE,MAAM,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,GAAU,YAAY,kBAAkB,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAgBpG,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,YAAY,kBAAkB,EAC9B,gBAAgB,MAAM,EACtB,kBAAkB,MAAM,EACxB,aAAa,MAAM,KAClB,OAAO,CAAC,iBAAiB,EAAE,CAqC7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,YAAY,kBAAkB,EAC9B,gBAAgB,MAAM,EACtB,kBAAkB,MAAM,EACxB,aAAa,MAAM,KAClB,OAAO,CAAC,eAAe,EAAE,CAwC3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"azure-pim.d.ts","sourceRoot":"","sources":["../src/azure-pim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAIrD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,+BAA+B,EAAE,MAAM,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,yBAAyB,EAAE,MAAM,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,kBAAkB,GAAU,YAAY,kBAAkB,KAAG,OAAO,CAAC,iBAAiB,EAAE,CAgBpG,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,YAAY,kBAAkB,EAC9B,gBAAgB,MAAM,EACtB,kBAAkB,MAAM,EACxB,aAAa,MAAM,KAClB,OAAO,CAAC,iBAAiB,EAAE,CAqC7B,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,YAAY,kBAAkB,EAC9B,gBAAgB,MAAM,EACtB,kBAAkB,MAAM,EACxB,aAAa,MAAM,KAClB,OAAO,CAAC,eAAe,EAAE,CAwC3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,YAAY,kBAAkB,EAC9B,SAAS,sBAAsB,EAC/B,gBAAgB,MAAM,KACrB,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAkD7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,YAAY,kBAAkB,EAC9B,OAAO,MAAM,EACb,2BAA2B,MAAM,EACjC,gBAAgB,MAAM,EACtB,aAAa,MAAM,EACnB,kBAAkB,MAAM,EACxB,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAoBd,CAAC"}
|
package/dist/azure-pim.js
CHANGED
|
@@ -123,7 +123,7 @@ const activateAzureRole = async (credential, request, subscriptionId) => {
|
|
|
123
123
|
(0, ui_1.succeedSpinner)(`Activation request submitted for "${request.roleName}"`);
|
|
124
124
|
(0, ui_1.logBlank)();
|
|
125
125
|
if (response.status) {
|
|
126
|
-
|
|
126
|
+
(0, ui_1.logDim)(` Status: ${(0, ui_1.formatStatus)(response.status)}`);
|
|
127
127
|
}
|
|
128
128
|
if (response.status === "Approved" || response.status === "Provisioned") {
|
|
129
129
|
(0, ui_1.logSuccess)(`Role "${request.roleName}" has been activated successfully`);
|
|
@@ -134,6 +134,7 @@ const activateAzureRole = async (credential, request, subscriptionId) => {
|
|
|
134
134
|
else if (response.status === "PendingApproval") {
|
|
135
135
|
(0, ui_1.logWarning)(`Role activation for "${request.roleName}" is pending approval`);
|
|
136
136
|
}
|
|
137
|
+
return { status: response.status };
|
|
137
138
|
}
|
|
138
139
|
catch (error) {
|
|
139
140
|
(0, ui_1.failSpinner)(`Failed to activate role "${request.roleName}"`);
|
package/dist/azure-pim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-pim.js","sourceRoot":"","sources":["../src/azure-pim.ts"],"names":[],"mappings":";;;AAAA,gEAAyE;AACzE,oFAAwE;AAExE,+BAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"azure-pim.js","sourceRoot":"","sources":["../src/azure-pim.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,4 +1,69 @@
|
|
|
1
1
|
import { AuthContext } from "./auth";
|
|
2
|
+
export type ActivateOnceOptions = {
|
|
3
|
+
subscriptionId: string;
|
|
4
|
+
roleNames: string[];
|
|
5
|
+
durationHours?: number;
|
|
6
|
+
justification?: string;
|
|
7
|
+
dryRun?: boolean;
|
|
8
|
+
noInteractive?: boolean;
|
|
9
|
+
yes?: boolean;
|
|
10
|
+
allowMultiple?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export type ActivateOnceResult = {
|
|
13
|
+
subscriptionId: string;
|
|
14
|
+
subscriptionName: string;
|
|
15
|
+
requestedRoleNames: string[];
|
|
16
|
+
resolvedTargets: Array<{
|
|
17
|
+
eligibilityId: string;
|
|
18
|
+
roleName: string;
|
|
19
|
+
scope: string;
|
|
20
|
+
scopeDisplayName: string;
|
|
21
|
+
roleDefinitionId: string;
|
|
22
|
+
}>;
|
|
23
|
+
durationHours: number;
|
|
24
|
+
justification: string;
|
|
25
|
+
dryRun: boolean;
|
|
26
|
+
results?: Array<{
|
|
27
|
+
eligibilityId: string;
|
|
28
|
+
roleName: string;
|
|
29
|
+
scopeDisplayName: string;
|
|
30
|
+
status?: string;
|
|
31
|
+
success: boolean;
|
|
32
|
+
error?: string;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
35
|
+
export type DeactivateOnceOptions = {
|
|
36
|
+
subscriptionId?: string;
|
|
37
|
+
roleNames: string[];
|
|
38
|
+
justification?: string;
|
|
39
|
+
dryRun?: boolean;
|
|
40
|
+
noInteractive?: boolean;
|
|
41
|
+
yes?: boolean;
|
|
42
|
+
allowMultiple?: boolean;
|
|
43
|
+
};
|
|
44
|
+
export type DeactivateOnceResult = {
|
|
45
|
+
requestedRoleNames: string[];
|
|
46
|
+
resolvedTargets: Array<{
|
|
47
|
+
assignmentId: string;
|
|
48
|
+
roleName: string;
|
|
49
|
+
scope: string;
|
|
50
|
+
scopeDisplayName: string;
|
|
51
|
+
subscriptionId: string;
|
|
52
|
+
subscriptionName: string;
|
|
53
|
+
}>;
|
|
54
|
+
justification: string;
|
|
55
|
+
dryRun: boolean;
|
|
56
|
+
results?: Array<{
|
|
57
|
+
assignmentId: string;
|
|
58
|
+
roleName: string;
|
|
59
|
+
scopeDisplayName: string;
|
|
60
|
+
subscriptionName: string;
|
|
61
|
+
success: boolean;
|
|
62
|
+
error?: string;
|
|
63
|
+
}>;
|
|
64
|
+
};
|
|
65
|
+
export declare const activateOnce: (authContext: AuthContext, options: ActivateOnceOptions) => Promise<ActivateOnceResult>;
|
|
66
|
+
export declare const deactivateOnce: (authContext: AuthContext, options: DeactivateOnceOptions) => Promise<DeactivateOnceResult>;
|
|
2
67
|
export declare const showMainMenu: (authContext: AuthContext) => Promise<void>;
|
|
3
68
|
export declare const handleActivation: (authContext: AuthContext) => Promise<void>;
|
|
4
69
|
export declare const handleDeactivation: (authContext: AuthContext) => Promise<void>;
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|