push neon reactor

This commit is contained in:
2026-07-12 15:11:38 +02:00
parent 172e72dbcd
commit aeab5f7820
9597 changed files with 2407488 additions and 0 deletions
@@ -0,0 +1,17 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { Region } from '@microsoft/power-apps-common/services';
import type { IAuthenticationProvider } from '../Types/Cli.types.js';
export declare class NodeMsalAuthenticationProvider implements IAuthenticationProvider {
private _msalClient;
private _tenantId;
private _region;
constructor();
initAsync(region: Region): Promise<void>;
getAccessTokenForResource(resource: string): Promise<string>;
getUserTenantId(): string | undefined;
private _acquireTokenInternal;
private _getInteractiveLoginRequest;
}
//# sourceMappingURL=NodeMsalAuthenticationProvider.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"NodeMsalAuthenticationProvider.d.ts","sourceRoot":"","sources":["../../src/Authentication/NodeMsalAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAKpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAGlE,qBAAa,8BAA+B,YAAW,uBAAuB;IAC5E,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,OAAO,CAAqB;;IAIvB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BxC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMlE,eAAe,IAAI,MAAM,GAAG,SAAS;YAI9B,qBAAqB;IAmCnC,OAAO,CAAC,2BAA2B;CAepC"}
@@ -0,0 +1,91 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import { InteractionRequiredAuthError, PublicClientApplication } from '@azure/msal-node';
import open from 'open';
import { getAuthority } from '../CliUtils.js';
import { AUTH_CACHE_DIRECTORY } from '../Constants.js';
import { printError, printInfo } from '../Utils/ConsoleOutput.js';
export class NodeMsalAuthenticationProvider {
_msalClient;
_tenantId;
_region;
constructor() { }
async initAsync(region) {
this._region = region;
const { DataProtectionScope, PersistenceCachePlugin, PersistenceCreator } = await import('@azure/msal-node-extensions');
const persistenceConfiguration = {
cachePath: AUTH_CACHE_DIRECTORY + '/msal_cache.json',
dataProtectionScope: DataProtectionScope.CurrentUser,
serviceName: 'power-apps',
accountName: 'power-apps',
usePlaintextFileOnLinux: false,
};
const persistence = await PersistenceCreator.createPersistence(persistenceConfiguration);
const authConfig = {
auth: {
authority: getAuthority(this._region, this._tenantId),
clientId: '9cee029c-6210-4654-90bb-17e6e9d36617',
},
cache: {
cachePlugin: new PersistenceCachePlugin(persistence),
},
};
this._msalClient = new PublicClientApplication(authConfig);
}
async getAccessTokenForResource(resource) {
const result = await this._acquireTokenInternal(resource + '/.default');
this._tenantId = result.tenantId;
return result.accessToken;
}
getUserTenantId() {
return this._tenantId;
}
async _acquireTokenInternal(resource) {
if (!this._msalClient) {
throw new Error('Authentication not initialized yet');
}
const accounts = await this._msalClient.getTokenCache().getAllAccounts();
if (accounts.length === 1) {
const silentRequest = {
account: accounts[0],
scopes: [resource],
};
try {
const result = await this._msalClient.acquireTokenSilent(silentRequest);
return result;
}
catch (error) {
if (error instanceof InteractionRequiredAuthError) {
return this._msalClient.acquireTokenInteractive(this._getInteractiveLoginRequest(resource));
}
throw error;
}
}
else if (accounts.length > 1) {
accounts.forEach((account) => {
printInfo(account.username);
});
return Promise.reject('Multiple accounts found. Please use the logout command to remove existing accounts.');
}
else {
return this._msalClient.acquireTokenInteractive(this._getInteractiveLoginRequest(resource));
}
}
_getInteractiveLoginRequest(resource) {
const openBrowser = async (url) => {
try {
await open(url, { wait: false });
}
catch (error) {
printError(`Failed to open browser: ${String(error)}`);
}
};
return {
scopes: [resource],
openBrowser,
successTemplate: 'You can close this window now.',
};
}
}
//# sourceMappingURL=NodeMsalAuthenticationProvider.js.map
@@ -0,0 +1 @@
{"version":3,"file":"NodeMsalAuthenticationProvider.js","sourceRoot":"","sources":["../../src/Authentication/NodeMsalAuthenticationProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { Region } from '@microsoft/power-apps-common/services';
import type { IAuthenticationProvider } from '../Types/Cli.types.js';
export declare class PacCliAuthenticationProvider implements IAuthenticationProvider {
private _tokenCache;
initAsync(_region: Region): Promise<void>;
getAccessTokenForResource(resource: string): Promise<string>;
getUserTenantId(): string | undefined;
private _getAccessTokenFromResourceInternal;
private _requestToken;
private _readStdIn;
}
//# sourceMappingURL=PacCliAuthenticationProvider.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"PacCliAuthenticationProvider.d.ts","sourceRoot":"","sources":["../../src/Authentication/PacCliAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAGpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE,qBAAa,4BAA6B,YAAW,uBAAuB;IAC1E,OAAO,CAAC,WAAW,CAA8B;IAEpC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE,eAAe,IAAI,MAAM,GAAG,SAAS;YAI9B,mCAAmC;IAgBjD,OAAO,CAAC,aAAa;YAIP,UAAU;CAqBzB"}
@@ -0,0 +1,51 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import * as readline from 'readline';
export class PacCliAuthenticationProvider {
_tokenCache = {};
async initAsync(_region) {
// no-op
}
async getAccessTokenForResource(resource) {
return this._getAccessTokenFromResourceInternal(resource);
}
getUserTenantId() {
return undefined;
}
async _getAccessTokenFromResourceInternal(resource) {
if (this._tokenCache[resource]) {
return this._tokenCache[resource];
}
this._requestToken(resource);
const token = await this._readStdIn();
if (!token) {
throw new Error('No token provided');
}
this._tokenCache[resource] = token;
return token;
}
_requestToken(resource) {
console.log('REQUEST_TOKEN ' + resource);
}
async _readStdIn() {
return new Promise((resolve, reject) => {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
terminal: false,
});
// Wait 10 seconds to get the token before throwing an error
const timeout = setTimeout(() => {
rl.close();
reject(new Error('Token input timeout: No token received within 10 seconds'));
}, 10000);
rl.once('line', (line) => {
clearTimeout(timeout);
rl.close();
resolve(line.trim());
});
});
}
}
//# sourceMappingURL=PacCliAuthenticationProvider.js.map
@@ -0,0 +1 @@
{"version":3,"file":"PacCliAuthenticationProvider.js","sourceRoot":"","sources":["../../src/Authentication/PacCliAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAIrC,MAAM,OAAO,4BAA4B;IAC/B,WAAW,GAA2B,EAAE,CAAC;IAE1C,KAAK,CAAC,SAAS,CAAC,OAAe;QACpC,QAAQ;IACV,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QACrD,OAAO,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEM,eAAe;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,mCAAmC,CAAC,QAAgB;QAChE,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACnC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,aAAa,CAAC,QAAgB;QACpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,4DAA4D;YAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;YAChF,CAAC,EAAE,KAAK,CAAC,CAAC;YAEV,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,20 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { Region } from '@microsoft/power-apps-common/services';
import type { IAuthenticationProvider } from '../Types/Cli.types.js';
/**
* note: This is meant for use in CI only since it hardcodes the authority & tenant ID.
*/
export declare class ServicePrincipalAuthenticationProvider implements IAuthenticationProvider {
private _msalClient;
private _clientId;
private _clientSecret;
private _tenantId;
private _region;
constructor();
initAsync(region: Region): Promise<void>;
getAccessTokenForResource(resource: string): Promise<string>;
getUserTenantId(): string | undefined;
}
//# sourceMappingURL=ServicePrincipalAuthenticationProvider.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"ServicePrincipalAuthenticationProvider.d.ts","sourceRoot":"","sources":["../../src/Authentication/ServicePrincipalAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAGpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,qBAAa,sCAAuC,YAAW,uBAAuB;IACpF,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAqB;;IAavB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxC,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBlE,eAAe,IAAI,MAAM,GAAG,SAAS;CAG7C"}
@@ -0,0 +1,51 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import { ConfidentialClientApplication } from '@azure/msal-node';
import { getAuthority } from '../CliUtils.js';
/**
* note: This is meant for use in CI only since it hardcodes the authority & tenant ID.
*/
export class ServicePrincipalAuthenticationProvider {
_msalClient;
_clientId;
_clientSecret;
_tenantId;
_region;
constructor() {
if (!process.env.SP_CLIENT_ID || !process.env.SP_CLIENT_SECRET || !process.env.SP_TENANT_ID) {
throw new Error('Service Principal environment variables SP_CLIENT_ID, SP_CLIENT_SECRET, and SP_TENANT_ID must be set');
}
this._clientId = process.env.SP_CLIENT_ID;
this._clientSecret = process.env.SP_CLIENT_SECRET;
this._tenantId = process.env.SP_TENANT_ID;
}
async initAsync(region) {
this._region = region;
const authConfig = {
auth: {
clientId: this._clientId,
clientSecret: this._clientSecret,
authority: getAuthority(this._region, this._tenantId),
},
};
this._msalClient = new ConfidentialClientApplication(authConfig);
}
async getAccessTokenForResource(resource) {
if (!this._msalClient) {
throw new Error('Authentication not initialized yet');
}
const clientCredentialRequest = {
scopes: [resource + '/.default'],
};
const result = await this._msalClient.acquireTokenByClientCredential(clientCredentialRequest);
if (!result?.accessToken) {
throw new Error('Failed to acquire token using service principal');
}
return result.accessToken;
}
getUserTenantId() {
return this._tenantId;
}
}
//# sourceMappingURL=ServicePrincipalAuthenticationProvider.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ServicePrincipalAuthenticationProvider.js","sourceRoot":"","sources":["../../src/Authentication/ServicePrincipalAuthenticationProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C;;GAEG;AACH,MAAM,OAAO,sCAAsC;IACzC,WAAW,CAA4C;IACvD,SAAS,CAAS;IAClB,aAAa,CAAS;IACtB,SAAS,CAAS;IAClB,OAAO,CAAqB;IAEpC;QACE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC5F,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc;QACnC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,UAAU,GAAkB;YAChC,IAAI,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,SAAS;gBACxB,YAAY,EAAE,IAAI,CAAC,aAAa;gBAChC,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;aACtD;SACF,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,6BAA6B,CAAC,UAAU,CAAC,CAAC;IACnE,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,QAAgB;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,uBAAuB,GAAG;YAC9B,MAAM,EAAE,CAAC,QAAQ,GAAG,WAAW,CAAC;SACjC,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,uBAAuB,CAAC,CAAC;QAE9F,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}