139 lines
4.8 KiB
JavaScript
139 lines
4.8 KiB
JavaScript
(function attachBackgroundKiroCredentialArtifact(root, factory) {
|
|
root.MultiPageBackgroundKiroCredentialArtifact = factory(root);
|
|
})(typeof self !== 'undefined' ? self : globalThis, function createBackgroundKiroCredentialArtifactModule(root) {
|
|
const kiroStateApi = root?.MultiPageBackgroundKiroState || null;
|
|
const FLOW_ID = 'kiro';
|
|
const ADAPTER_ID = 'kiro-builder-id';
|
|
const ARTIFACT_KIND = 'kiro-builder-id';
|
|
const DEFAULT_REGION = kiroStateApi?.DEFAULT_REGION || 'us-east-1';
|
|
const DEFAULT_TARGET_ID = kiroStateApi?.DEFAULT_TARGET_ID || 'kiro-rs';
|
|
const BUILDER_ID_PROFILE_ARN = 'arn:aws:codewhisperer:us-east-1:638616132270:profile/AAAACCCCXXXX';
|
|
|
|
function isPlainObject(value) {
|
|
return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
|
|
}
|
|
|
|
function cleanString(value = '') {
|
|
return String(value ?? '').trim();
|
|
}
|
|
|
|
function readKiroRuntime(state = {}) {
|
|
return kiroStateApi?.ensureRuntimeState
|
|
? kiroStateApi.ensureRuntimeState(state)
|
|
: (isPlainObject(state?.kiroRuntime) ? state.kiroRuntime : {});
|
|
}
|
|
|
|
function resolveKiroTargetId(state = {}, runtimeState = readKiroRuntime(state)) {
|
|
return cleanString(
|
|
state?.settingsState?.flows?.kiro?.targetId
|
|
|| state?.flows?.kiro?.targetId
|
|
|| state?.kiroTargetId
|
|
|| runtimeState?.upload?.targetId
|
|
|| DEFAULT_TARGET_ID
|
|
) || DEFAULT_TARGET_ID;
|
|
}
|
|
|
|
function resolveEmail(state = {}, runtimeState = readKiroRuntime(state)) {
|
|
return cleanString(
|
|
runtimeState?.register?.email
|
|
|| state?.email
|
|
|| state?.registrationEmailState?.current
|
|
|| state?.accountIdentifier
|
|
);
|
|
}
|
|
|
|
function resolveRegion(state = {}, runtimeState = readKiroRuntime(state), targetId = DEFAULT_TARGET_ID) {
|
|
return cleanString(
|
|
runtimeState?.desktopAuth?.region
|
|
|| state?.settingsState?.flows?.kiro?.targets?.[targetId]?.region
|
|
|| state?.flows?.kiro?.targets?.[targetId]?.region
|
|
|| DEFAULT_REGION
|
|
) || DEFAULT_REGION;
|
|
}
|
|
|
|
function assertRequiredField(name, value, message) {
|
|
if (!cleanString(value)) {
|
|
const error = new Error(message);
|
|
error.code = `missing_${name}`;
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
function redactSecret(value = '') {
|
|
const normalized = cleanString(value);
|
|
if (!normalized) {
|
|
return '';
|
|
}
|
|
if (normalized.length <= 10) {
|
|
return `${normalized.slice(0, 2)}***`;
|
|
}
|
|
return `${normalized.slice(0, 6)}...${normalized.slice(-4)}`;
|
|
}
|
|
|
|
function buildKiroBuilderIdArtifact(state = {}, options = {}) {
|
|
const runtimeState = readKiroRuntime(state);
|
|
const desktopAuth = runtimeState?.desktopAuth || {};
|
|
const targetId = resolveKiroTargetId(state, runtimeState);
|
|
const region = resolveRegion(state, runtimeState, targetId);
|
|
const email = resolveEmail(state, runtimeState);
|
|
const refreshToken = String(desktopAuth.refreshToken || '');
|
|
const clientId = cleanString(desktopAuth.clientId);
|
|
const clientSecret = String(desktopAuth.clientSecret || '');
|
|
|
|
assertRequiredField('refreshToken', refreshToken, '缺少桌面授权 refreshToken,无法提交 Kiro Builder ID 贡献。');
|
|
assertRequiredField('clientId', clientId, '缺少桌面授权 clientId,无法提交 Kiro Builder ID 贡献。');
|
|
assertRequiredField('clientSecret', clientSecret, '缺少桌面授权 clientSecret,无法提交 Kiro Builder ID 贡献。');
|
|
assertRequiredField('email', email, '缺少注册邮箱,无法提交 Kiro Builder ID 贡献。');
|
|
|
|
return {
|
|
schemaVersion: 1,
|
|
flow: FLOW_ID,
|
|
adapter: ADAPTER_ID,
|
|
artifact: ARTIFACT_KIND,
|
|
account: {
|
|
email,
|
|
},
|
|
credentials: {
|
|
refreshToken,
|
|
clientId,
|
|
clientSecret,
|
|
profileArn: cleanString(options.profileArn) || BUILDER_ID_PROFILE_ARN,
|
|
authMethod: 'idc',
|
|
region,
|
|
authRegion: region,
|
|
apiRegion: region,
|
|
tokenSource: cleanString(desktopAuth.tokenSource) || 'desktop_authorization_code_pkce',
|
|
},
|
|
metadata: {
|
|
targetId,
|
|
authorizedAt: Math.max(0, Number(desktopAuth.authorizedAt) || 0),
|
|
generatedAt: new Date().toISOString(),
|
|
source: 'flowpilot-extension',
|
|
},
|
|
};
|
|
}
|
|
|
|
function buildSafeArtifactSummary(artifact = {}) {
|
|
return {
|
|
flow: cleanString(artifact.flow),
|
|
adapter: cleanString(artifact.adapter),
|
|
artifact: cleanString(artifact.artifact),
|
|
email: cleanString(artifact.account?.email),
|
|
clientId: cleanString(artifact.credentials?.clientId),
|
|
refreshToken: redactSecret(artifact.credentials?.refreshToken),
|
|
clientSecret: redactSecret(artifact.credentials?.clientSecret),
|
|
region: cleanString(artifact.credentials?.region),
|
|
};
|
|
}
|
|
|
|
return {
|
|
ADAPTER_ID,
|
|
ARTIFACT_KIND,
|
|
BUILDER_ID_PROFILE_ARN,
|
|
FLOW_ID,
|
|
buildKiroBuilderIdArtifact,
|
|
buildSafeArtifactSummary,
|
|
redactSecret,
|
|
};
|
|
});
|