@mcp-consultant-tools/powerplatform-core 26.0.0 → 27.0.0-beta.1
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/build/index.d.ts +2 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +5 -1
- package/build/index.js.map +1 -1
- package/build/services/IntegrationAuditService.d.ts +68 -6
- package/build/services/IntegrationAuditService.d.ts.map +1 -1
- package/build/services/IntegrationAuditService.js +226 -160
- package/build/services/IntegrationAuditService.js.map +1 -1
- package/build/services/index.d.ts +1 -1
- package/build/services/index.d.ts.map +1 -1
- package/build/utils/audit-report-formatter.d.ts +140 -0
- package/build/utils/audit-report-formatter.d.ts.map +1 -0
- package/build/utils/audit-report-formatter.js +292 -0
- package/build/utils/audit-report-formatter.js.map +1 -0
- package/build/utils/flow-url-extractor.d.ts +36 -0
- package/build/utils/flow-url-extractor.d.ts.map +1 -0
- package/build/utils/flow-url-extractor.js +286 -0
- package/build/utils/flow-url-extractor.js.map +1 -0
- package/build/utils/index.d.ts +2 -0
- package/build/utils/index.d.ts.map +1 -1
- package/build/utils/index.js +4 -0
- package/build/utils/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flow URL Extractor & Secret Detector
|
|
3
|
+
*
|
|
4
|
+
* Extracts URL references from Power Automate flow definitions and
|
|
5
|
+
* detects hardcoded secrets that should use environment variables
|
|
6
|
+
* or secure inputs instead.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Regex for secret-like input keys
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
const SECRET_KEY_PATTERN = /client_secret|clientSecret|password|api_key|apiKey|secret|authorization/i;
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Internal helpers
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Attempt to extract an environment variable name from a Power Automate
|
|
17
|
+
* parameter expression such as:
|
|
18
|
+
* @parameters('new_MyEnvVar')
|
|
19
|
+
* @{parameters('new_MyEnvVar')}
|
|
20
|
+
*/
|
|
21
|
+
function extractEnvVarName(expression) {
|
|
22
|
+
const match = expression.match(/@\{?parameters\(\s*'([^']+)'\s*\)\}?/);
|
|
23
|
+
return match ? match[1] : undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a URL that may be a parameter expression.
|
|
27
|
+
* Returns the original URL plus optional environment variable metadata.
|
|
28
|
+
*/
|
|
29
|
+
function resolveUrl(url, envVarMap) {
|
|
30
|
+
if (!url.startsWith('@parameters(') && !url.startsWith('@{parameters(')) {
|
|
31
|
+
return { url };
|
|
32
|
+
}
|
|
33
|
+
const envVarName = extractEnvVarName(url);
|
|
34
|
+
if (!envVarName) {
|
|
35
|
+
return { url };
|
|
36
|
+
}
|
|
37
|
+
const resolved = envVarMap?.get(envVarName);
|
|
38
|
+
return {
|
|
39
|
+
url: resolved ?? url,
|
|
40
|
+
environmentVariable: envVarName,
|
|
41
|
+
environmentVariableValue: resolved,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Safely read a nested property from an unknown record.
|
|
46
|
+
*/
|
|
47
|
+
function asRecord(value) {
|
|
48
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// URL extraction
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
/**
|
|
57
|
+
* Extract all URL references from a Power Automate flow definition.
|
|
58
|
+
*
|
|
59
|
+
* Traverses the definition recursively, following the same nesting pattern
|
|
60
|
+
* as `complexity-calculator.ts` (scope, foreach, if/else, switch/default).
|
|
61
|
+
*/
|
|
62
|
+
export function extractUrlsFromFlowDefinition(flowDefinition, envVarMap) {
|
|
63
|
+
const urls = [];
|
|
64
|
+
try {
|
|
65
|
+
const properties = asRecord(flowDefinition.properties);
|
|
66
|
+
const definition = asRecord(properties?.definition);
|
|
67
|
+
if (!definition)
|
|
68
|
+
return urls;
|
|
69
|
+
// --- Triggers -----------------------------------------------------------
|
|
70
|
+
const triggers = asRecord(definition.triggers);
|
|
71
|
+
if (triggers) {
|
|
72
|
+
for (const triggerName of Object.keys(triggers)) {
|
|
73
|
+
const trigger = asRecord(triggers[triggerName]);
|
|
74
|
+
if (!trigger)
|
|
75
|
+
continue;
|
|
76
|
+
const inputs = asRecord(trigger.inputs);
|
|
77
|
+
if (inputs && typeof inputs.uri === 'string') {
|
|
78
|
+
const resolved = resolveUrl(inputs.uri, envVarMap);
|
|
79
|
+
urls.push({
|
|
80
|
+
actionName: triggerName,
|
|
81
|
+
source: 'trigger',
|
|
82
|
+
...resolved,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// --- Parameters (environment variables) ---------------------------------
|
|
88
|
+
const parameters = asRecord(definition.parameters);
|
|
89
|
+
if (parameters) {
|
|
90
|
+
for (const paramName of Object.keys(parameters)) {
|
|
91
|
+
const param = asRecord(parameters[paramName]);
|
|
92
|
+
if (!param)
|
|
93
|
+
continue;
|
|
94
|
+
const metadata = asRecord(param.metadata);
|
|
95
|
+
const schemaId = metadata?.schemaId;
|
|
96
|
+
if (typeof schemaId === 'string' &&
|
|
97
|
+
schemaId.toLowerCase().includes('environmentvariable')) {
|
|
98
|
+
const defaultValue = typeof param.defaultValue === 'string'
|
|
99
|
+
? param.defaultValue
|
|
100
|
+
: undefined;
|
|
101
|
+
const resolvedValue = envVarMap?.get(paramName);
|
|
102
|
+
const url = resolvedValue ?? defaultValue;
|
|
103
|
+
if (url) {
|
|
104
|
+
urls.push({
|
|
105
|
+
actionName: paramName,
|
|
106
|
+
url,
|
|
107
|
+
environmentVariable: paramName,
|
|
108
|
+
environmentVariableValue: resolvedValue,
|
|
109
|
+
source: 'parameter',
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// --- Actions (recursive) ------------------------------------------------
|
|
116
|
+
const actions = asRecord(definition.actions);
|
|
117
|
+
if (actions) {
|
|
118
|
+
processActions(actions, urls, envVarMap);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Return partial results on parse errors
|
|
123
|
+
}
|
|
124
|
+
return urls;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Recursively traverse actions, extracting URL references.
|
|
128
|
+
*/
|
|
129
|
+
function processActions(actions, urls, envVarMap) {
|
|
130
|
+
for (const actionName of Object.keys(actions)) {
|
|
131
|
+
const action = asRecord(actions[actionName]);
|
|
132
|
+
if (!action)
|
|
133
|
+
continue;
|
|
134
|
+
const actionType = action.type || '';
|
|
135
|
+
// HTTP actions: inputs.uri
|
|
136
|
+
if (actionType === 'Http') {
|
|
137
|
+
const inputs = asRecord(action.inputs);
|
|
138
|
+
if (inputs && typeof inputs.uri === 'string') {
|
|
139
|
+
const resolved = resolveUrl(inputs.uri, envVarMap);
|
|
140
|
+
urls.push({
|
|
141
|
+
actionName,
|
|
142
|
+
source: 'http-action',
|
|
143
|
+
...resolved,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// OpenApiConnection actions: inputs.parameters.uri or .url
|
|
148
|
+
if (actionType === 'OpenApiConnection' ||
|
|
149
|
+
actionType === 'ApiConnection') {
|
|
150
|
+
const inputs = asRecord(action.inputs);
|
|
151
|
+
const params = asRecord(inputs?.parameters);
|
|
152
|
+
const rawUrl = typeof params?.uri === 'string'
|
|
153
|
+
? params.uri
|
|
154
|
+
: typeof params?.url === 'string'
|
|
155
|
+
? params.url
|
|
156
|
+
: undefined;
|
|
157
|
+
if (rawUrl) {
|
|
158
|
+
const resolved = resolveUrl(rawUrl, envVarMap);
|
|
159
|
+
urls.push({
|
|
160
|
+
actionName,
|
|
161
|
+
source: 'openapi-connection',
|
|
162
|
+
...resolved,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// --- Recurse into nested structures ------------------------------------
|
|
167
|
+
const nested = asRecord(action.actions);
|
|
168
|
+
if (nested) {
|
|
169
|
+
processActions(nested, urls, envVarMap);
|
|
170
|
+
}
|
|
171
|
+
const thenBranch = asRecord(action.then);
|
|
172
|
+
if (thenBranch) {
|
|
173
|
+
processActions(thenBranch, urls, envVarMap);
|
|
174
|
+
}
|
|
175
|
+
const elseBranch = asRecord(action.else);
|
|
176
|
+
if (elseBranch) {
|
|
177
|
+
processActions(elseBranch, urls, envVarMap);
|
|
178
|
+
}
|
|
179
|
+
const cases = asRecord(action.cases);
|
|
180
|
+
if (cases) {
|
|
181
|
+
for (const caseName of Object.keys(cases)) {
|
|
182
|
+
const caseData = asRecord(cases[caseName]);
|
|
183
|
+
const caseActions = asRecord(caseData?.actions);
|
|
184
|
+
if (caseActions) {
|
|
185
|
+
processActions(caseActions, urls, envVarMap);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const defaultBranch = asRecord(action.default);
|
|
190
|
+
if (defaultBranch) {
|
|
191
|
+
const defaultActions = asRecord(defaultBranch.actions);
|
|
192
|
+
if (defaultActions) {
|
|
193
|
+
processActions(defaultActions, urls, envVarMap);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
// Hardcoded secret detection
|
|
200
|
+
// ---------------------------------------------------------------------------
|
|
201
|
+
/**
|
|
202
|
+
* Scan a flow definition for hardcoded secrets in action inputs.
|
|
203
|
+
*
|
|
204
|
+
* Flags literal string values (not expressions starting with `@`) whose
|
|
205
|
+
* key names match common secret patterns such as `client_secret`,
|
|
206
|
+
* `password`, `api_key`, `authorization`, etc.
|
|
207
|
+
*/
|
|
208
|
+
export function detectHardcodedSecrets(flowDefinition) {
|
|
209
|
+
const warnings = [];
|
|
210
|
+
try {
|
|
211
|
+
const properties = asRecord(flowDefinition.properties);
|
|
212
|
+
const definition = asRecord(properties?.definition);
|
|
213
|
+
const actions = asRecord(definition?.actions);
|
|
214
|
+
if (actions) {
|
|
215
|
+
scanActionsForSecrets(actions, warnings);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
// Return partial results on parse errors
|
|
220
|
+
}
|
|
221
|
+
return warnings;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Recursively scan actions for hardcoded secrets.
|
|
225
|
+
*/
|
|
226
|
+
function scanActionsForSecrets(actions, warnings) {
|
|
227
|
+
for (const actionName of Object.keys(actions)) {
|
|
228
|
+
const action = asRecord(actions[actionName]);
|
|
229
|
+
if (!action)
|
|
230
|
+
continue;
|
|
231
|
+
// Scan inputs for secret-like keys with literal values
|
|
232
|
+
const inputs = asRecord(action.inputs);
|
|
233
|
+
if (inputs) {
|
|
234
|
+
scanObjectForSecrets(inputs, actionName, 'inputs', warnings);
|
|
235
|
+
}
|
|
236
|
+
// --- Recurse into nested structures ------------------------------------
|
|
237
|
+
const nested = asRecord(action.actions);
|
|
238
|
+
if (nested)
|
|
239
|
+
scanActionsForSecrets(nested, warnings);
|
|
240
|
+
const thenBranch = asRecord(action.then);
|
|
241
|
+
if (thenBranch)
|
|
242
|
+
scanActionsForSecrets(thenBranch, warnings);
|
|
243
|
+
const elseBranch = asRecord(action.else);
|
|
244
|
+
if (elseBranch)
|
|
245
|
+
scanActionsForSecrets(elseBranch, warnings);
|
|
246
|
+
const cases = asRecord(action.cases);
|
|
247
|
+
if (cases) {
|
|
248
|
+
for (const caseName of Object.keys(cases)) {
|
|
249
|
+
const caseData = asRecord(cases[caseName]);
|
|
250
|
+
const caseActions = asRecord(caseData?.actions);
|
|
251
|
+
if (caseActions)
|
|
252
|
+
scanActionsForSecrets(caseActions, warnings);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const defaultBranch = asRecord(action.default);
|
|
256
|
+
if (defaultBranch) {
|
|
257
|
+
const defaultActions = asRecord(defaultBranch.actions);
|
|
258
|
+
if (defaultActions)
|
|
259
|
+
scanActionsForSecrets(defaultActions, warnings);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Recursively scan an object's keys and values for hardcoded secrets.
|
|
265
|
+
*/
|
|
266
|
+
function scanObjectForSecrets(obj, actionName, currentPath, warnings) {
|
|
267
|
+
for (const key of Object.keys(obj)) {
|
|
268
|
+
const fieldPath = `${currentPath}.${key}`;
|
|
269
|
+
const value = obj[key];
|
|
270
|
+
if (SECRET_KEY_PATTERN.test(key) && typeof value === 'string' && !value.startsWith('@')) {
|
|
271
|
+
warnings.push({
|
|
272
|
+
actionName,
|
|
273
|
+
fieldPath,
|
|
274
|
+
warningType: 'hardcoded-secret',
|
|
275
|
+
message: `Hardcoded value found for '${key}' in action '${actionName}'. ` +
|
|
276
|
+
'Consider using a secure input parameter or environment variable instead.',
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
// Recurse into nested objects
|
|
280
|
+
const nested = asRecord(value);
|
|
281
|
+
if (nested) {
|
|
282
|
+
scanObjectForSecrets(nested, actionName, fieldPath, warnings);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=flow-url-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-url-extractor.js","sourceRoot":"","sources":["../../src/utils/flow-url-extractor.ts"],"names":[],"mappings":"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"}
|
package/build/utils/index.d.ts
CHANGED
|
@@ -9,4 +9,6 @@ export { batchExecute, RateLimiter, rateLimiter, type RateLimiterOptions, type R
|
|
|
9
9
|
export { ATTRIBUTE_DETAILS, ENTITY_OVERVIEW, QUERY_TEMPLATE, RELATIONSHIP_MAP, } from './prompt-templates.js';
|
|
10
10
|
export { getPublisherPrefix, initializePublisherPrefix, isPublisherPrefixConfigured, normalizePrefix, resetPublisherPrefix, } from './publisherConfig.js';
|
|
11
11
|
export { calculateFlowComplexity, calculateComplexityScore, extractComplexityFactors, extractComplexityFlags, getRiskLevel, type FlowComplexityBreakdown, type FlowComplexityFlags, type FlowComplexityResult, type RiskLevel, } from './complexity-calculator.js';
|
|
12
|
+
export { extractUrlsFromFlowDefinition, detectHardcodedSecrets, type FlowUrlReference, type SecretWarning, } from './flow-url-extractor.js';
|
|
13
|
+
export { generateAuditMarkdownReport, type AuditReportData, } from './audit-report-formatter.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,SAAS,GACf,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,WAAW,EACX,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,gBAAgB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,EACZ,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,SAAS,GACf,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,2BAA2B,EAC3B,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC"}
|
package/build/utils/index.js
CHANGED
|
@@ -17,4 +17,8 @@ export { ATTRIBUTE_DETAILS, ENTITY_OVERVIEW, QUERY_TEMPLATE, RELATIONSHIP_MAP, }
|
|
|
17
17
|
export { getPublisherPrefix, initializePublisherPrefix, isPublisherPrefixConfigured, normalizePrefix, resetPublisherPrefix, } from './publisherConfig.js';
|
|
18
18
|
// Flow complexity calculator
|
|
19
19
|
export { calculateFlowComplexity, calculateComplexityScore, extractComplexityFactors, extractComplexityFlags, getRiskLevel, } from './complexity-calculator.js';
|
|
20
|
+
// Flow URL extraction and secret detection
|
|
21
|
+
export { extractUrlsFromFlowDefinition, detectHardcodedSecrets, } from './flow-url-extractor.js';
|
|
22
|
+
// Audit report formatter
|
|
23
|
+
export { generateAuditMarkdownReport, } from './audit-report-formatter.js';
|
|
20
24
|
//# sourceMappingURL=index.js.map
|
package/build/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,WAAW,GAGZ,MAAM,kBAAkB,CAAC;AAE1B,4BAA4B;AAC5B,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,GAGvB,MAAM,oBAAoB,CAAC;AAE5B,4BAA4B;AAC5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAExC,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,WAAW,GAGZ,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EAGX,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,6BAA6B;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,GAKb,MAAM,4BAA4B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,WAAW,GAGZ,MAAM,kBAAkB,CAAC;AAE1B,4BAA4B;AAC5B,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,GAGvB,MAAM,oBAAoB,CAAC;AAE5B,4BAA4B;AAC5B,OAAO,EACL,yBAAyB,EACzB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,gCAAgC,CAAC;AAExC,kBAAkB;AAClB,OAAO,EACL,WAAW,EACX,WAAW,GAGZ,MAAM,kBAAkB,CAAC;AAE1B,gBAAgB;AAChB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EAGX,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,2BAA2B,EAC3B,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,6BAA6B;AAC7B,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,GAKb,MAAM,4BAA4B,CAAC;AAEpC,2CAA2C;AAC3C,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,GAGvB,MAAM,yBAAyB,CAAC;AAEjC,yBAAyB;AACzB,OAAO,EACL,2BAA2B,GAE5B,MAAM,6BAA6B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mcp-consultant-tools/powerplatform-core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "27.0.0-beta.1",
|
|
4
4
|
"description": "Shared core infrastructure for PowerPlatform MCP packages - authentication, HTTP client, and modular services",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./build/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"dependencies": {
|
|
56
56
|
"@azure/identity": "^4.13.0",
|
|
57
57
|
"@azure/msal-node": "^3.3.0",
|
|
58
|
-
"@mcp-consultant-tools/core": "
|
|
58
|
+
"@mcp-consultant-tools/core": "27.0.0-beta.1",
|
|
59
59
|
"axios": "^1.8.3",
|
|
60
60
|
"open": "^10.1.0"
|
|
61
61
|
},
|