fix kiro verification email source
This commit is contained in:
@@ -710,14 +710,12 @@
|
|||||||
return KIRO_REGISTER_EXISTING_ACCOUNT_STATES.includes(cleanString(pageState));
|
return KIRO_REGISTER_EXISTING_ACCOUNT_STATES.includes(cleanString(pageState));
|
||||||
}
|
}
|
||||||
|
|
||||||
function resolveKiroRegisterEmail(currentState = {}, pageState = {}, fallbackEmail = '') {
|
function resolveKiroRegisterEmail(currentState = {}, _pageState = {}, fallbackEmail = '') {
|
||||||
const runtimeState = readKiroRuntime(currentState);
|
|
||||||
return cleanString(
|
return cleanString(
|
||||||
fallbackEmail
|
fallbackEmail
|
||||||
|| pageState?.email
|
|
||||||
|| pageState?.accountEmail
|
|
||||||
|| runtimeState.register?.email
|
|
||||||
|| currentState?.email
|
|| currentState?.email
|
||||||
|
|| currentState?.registrationEmailState?.current
|
||||||
|
|| currentState?.registrationEmailState?.previous
|
||||||
).toLowerCase();
|
).toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -886,8 +884,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function buildKiroVerificationPollPayload(step, state = {}, mail = {}, filterAfterTimestamp = 0) {
|
function buildKiroVerificationPollPayload(step, state = {}, mail = {}, filterAfterTimestamp = 0) {
|
||||||
const runtimeState = readKiroRuntime(state);
|
const targetEmail = resolveKiroRegisterEmail(state);
|
||||||
const targetEmail = cleanString(runtimeState.register?.email || state?.email).toLowerCase();
|
|
||||||
const targetEmailHints = targetEmail ? [targetEmail] : [];
|
const targetEmailHints = targetEmail ? [targetEmail] : [];
|
||||||
const isMail2925Provider = String(mail?.provider || '').trim().toLowerCase() === '2925';
|
const isMail2925Provider = String(mail?.provider || '').trim().toLowerCase() === '2925';
|
||||||
const normalizedProvider = String(mail?.provider || '').trim().toLowerCase();
|
const normalizedProvider = String(mail?.provider || '').trim().toLowerCase();
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ test('kiro submit-email can adopt an already-open registration OTP page without
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
email: 'manual-user@duck.com',
|
||||||
};
|
};
|
||||||
const sentMessages = [];
|
const sentMessages = [];
|
||||||
let completedPayload = null;
|
let completedPayload = null;
|
||||||
@@ -183,9 +184,102 @@ test('kiro submit-email can adopt an already-open registration OTP page without
|
|||||||
assert.equal(sentMessages.some((message) => message.type === 'EXECUTE_NODE'), false);
|
assert.equal(sentMessages.some((message) => message.type === 'EXECUTE_NODE'), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('kiro verification polling uses the registration email field instead of page text', async () => {
|
||||||
|
const api = loadRegisterRunnerApi();
|
||||||
|
const currentState = {
|
||||||
|
email: 'skater-twine-carve@duck.com',
|
||||||
|
registrationEmailState: {
|
||||||
|
current: 'skater-twine-carve@duck.com',
|
||||||
|
previous: 'skater-twine-carve@duck.com',
|
||||||
|
source: 'flow',
|
||||||
|
updatedAt: Date.now(),
|
||||||
|
},
|
||||||
|
runtimeState: {
|
||||||
|
flowState: {
|
||||||
|
kiro: {
|
||||||
|
session: {
|
||||||
|
registerTabId: 103,
|
||||||
|
},
|
||||||
|
register: {
|
||||||
|
email: 'stale-wrong@duck.comchange',
|
||||||
|
loginUrl: 'https://app.kiro.dev/signin',
|
||||||
|
verificationRequestedAt: 1000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const sentMessages = [];
|
||||||
|
const pollPayloads = [];
|
||||||
|
let completedPayload = null;
|
||||||
|
const runner = api.createKiroRegisterRunner({
|
||||||
|
addLog: async () => {},
|
||||||
|
chrome: {
|
||||||
|
tabs: {
|
||||||
|
get: async (tabId) => ({ id: tabId, url: 'https://us-east-1.signin.aws/platform/d/signup' }),
|
||||||
|
update: async () => {},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
completeNodeFromBackground: async (_nodeId, payload) => {
|
||||||
|
completedPayload = payload;
|
||||||
|
},
|
||||||
|
getMailConfig: () => ({
|
||||||
|
provider: 'cloudflare-temp-email',
|
||||||
|
source: 'cloudflare-temp-email',
|
||||||
|
label: 'Cloudflare Temp Email',
|
||||||
|
}),
|
||||||
|
getState: async () => currentState,
|
||||||
|
getTabId: async () => 103,
|
||||||
|
isTabAlive: async () => true,
|
||||||
|
pollCloudflareTempEmailVerificationCode: async (_step, _state, payload) => {
|
||||||
|
pollPayloads.push(payload);
|
||||||
|
return { code: '123456', emailTimestamp: 2000, mailId: 'mail-1' };
|
||||||
|
},
|
||||||
|
sendToContentScriptResilient: async (_sourceId, message) => {
|
||||||
|
sentMessages.push(message);
|
||||||
|
if (message.type === 'ENSURE_KIRO_PAGE_STATE') {
|
||||||
|
return {
|
||||||
|
state: 'register_otp_page',
|
||||||
|
url: 'https://us-east-1.signin.aws/platform/d/signup',
|
||||||
|
email: 'skater-twine-carve@duck.comchange',
|
||||||
|
accountEmail: 'skater-twine-carve@duck.comchange',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if (message.type === 'EXECUTE_NODE') {
|
||||||
|
return { submitted: true, state: 'verification_submitted' };
|
||||||
|
}
|
||||||
|
if (message.type === 'ENSURE_KIRO_STATE_CHANGE') {
|
||||||
|
return {
|
||||||
|
state: 'create_password_page',
|
||||||
|
url: 'https://us-east-1.signin.aws/platform/d/signup',
|
||||||
|
email: 'skater-twine-carve@duck.comchange',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return {};
|
||||||
|
},
|
||||||
|
setState: async () => {},
|
||||||
|
});
|
||||||
|
|
||||||
|
await runner.executeKiroSubmitVerificationCode({
|
||||||
|
nodeId: 'kiro-submit-verification-code',
|
||||||
|
...currentState,
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(pollPayloads.length, 1);
|
||||||
|
assert.equal(pollPayloads[0].targetEmail, 'skater-twine-carve@duck.com');
|
||||||
|
assert.deepEqual(pollPayloads[0].targetEmailHints, ['skater-twine-carve@duck.com']);
|
||||||
|
assert.equal(sentMessages.some((message) => (
|
||||||
|
message.type === 'EXECUTE_NODE'
|
||||||
|
&& message.nodeId === 'kiro-submit-verification-code'
|
||||||
|
&& message.payload?.code === '123456'
|
||||||
|
)), true);
|
||||||
|
assert.equal(getKiroRuntime(completedPayload).register?.email, 'skater-twine-carve@duck.com');
|
||||||
|
});
|
||||||
|
|
||||||
test('kiro submit-email reuses the step 1 register tab even when the source registry was reset', async () => {
|
test('kiro submit-email reuses the step 1 register tab even when the source registry was reset', async () => {
|
||||||
const api = loadRegisterRunnerApi();
|
const api = loadRegisterRunnerApi();
|
||||||
const currentState = {
|
const currentState = {
|
||||||
|
email: 'fresh-user@duck.com',
|
||||||
runtimeState: {
|
runtimeState: {
|
||||||
flowState: {
|
flowState: {
|
||||||
kiro: {
|
kiro: {
|
||||||
|
|||||||
Reference in New Issue
Block a user