| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // Read this existing real-message sample round only. Never call a write function.
- import fs from 'node:fs';
- import assert from 'node:assert/strict';
- import crypto from 'node:crypto';
- import {invoke} from '../server/scripts/platform-client.mjs';
- import {loadPublicBoard} from '../src/services/workshop-data.js';
- import {buildModel} from '../src/core/kfs/build.js';
- const ids={sessionId:'2InAdyzimm',opportunityId:'rFRWpVPnjk',projectId:'U7x82sQQtE',conceptId:'JpVxAIJ8Fc',artifactId:'f7mUZET0WK',categoryId:'kvhwLIEYiq',productId:'8rot-C7B28',materialId:'YNivtOrBiA',processId:'RaxsJKEUS7'};
- const artifacts=['dRJolNV70A','InnEBEIaxP','2v6pE9224g','zaIA2LCNsn','pD51dQMRXm',ids.artifactId];
- const call=async(name,p)=>{const result=await invoke(name,p);if(result.http!==200||!result.body?.result?.ok)throw Error('READBACK_FAILED');return result.body.result.data;};
- try{
- const result=await call('ksfGetWorkshopProject',{sessionId:ids.sessionId,projectId:ids.projectId});
- assert.equal(result.project.dataMode,'sample');assert.equal(result.project.progressState,'completed');assert.equal(result.project.stageCode,'S5');
- assert.equal(result.concept.objectId,ids.conceptId);assert.equal(result.concept.dataMode,'sample');
- assert.equal(result.artifacts.length,3);assert.equal(result.formulaItems.length,1);assert.equal(result.events.length,10);
- assert.equal(result.formulaItems[0].materialRef.objectId,ids.materialId);
- assert.ok(result.concept.productionSteps.some(p=>p.processId===ids.processId));
- assert.equal(result.concept.specification.categoryId,ids.categoryId);assert.equal(result.concept.specification.referenceProductId,ids.productId);
- const session=(await call('ksfGetRecord',{className:'KfSession',objectId:ids.sessionId})).record;
- const attribution=session.meta.attribution;
- assert.equal(session.workshopKey,'KSF-企微实测-20261101-K');assert.equal(attribution.agentName,'王刚001');
- assert.equal(attribution.identityBasis,'channel_context');
- assert.equal(attribution.agentKey,'agent-account:7c9f85363ca4c5a529a5b363308b065998924e2394e846145a5c62c904506d2e');
- const expectedParticipant='participant:'+crypto.createHash('sha256').update(JSON.stringify(['KSF-企微实测-20261101-K','participant-account:f83edd27dda7e0989a0d313c158314043fd129efb86b8f6a07db8140033c5708'])).digest('hex');
- assert.equal(attribution.participantKey,expectedParticipant);assert.equal(session.userRef??null,null);
- const account=attribution.participantAccount,agentAccount=attribution.agentAccount;
- assert.equal(account.platform,'wecom');assert.equal(account.identifierType,'wecom_aibot_sender');assert.equal(account.scopeId,agentAccount.accountId);
- assert.equal(attribution.participantAccount.accountId?.length>0,true);
- const all=[];
- for(const objectId of artifacts){
- const record=(await call('ksfGetRecord',{className:'KfArtifact',objectId})).record;
- assert.equal(record.dataMode,'sample');assert.equal(record.dashboardState,'workshop');assert.equal(record.sessionRef.objectId,ids.sessionId);
- assert.equal(record.agentName,'王刚001');assert.deepEqual(record.meta.attribution,attribution);all.push(record);
- }
- for(const [className,id]of [['KfCategory',ids.categoryId],['KfProduct',ids.productId],['KfMaterial',ids.materialId],['KfProcess',ids.processId]])assert.equal((await call('ksfGetRecord',{className,objectId:id})).record.dataMode,'sample');
- const raw=await loadPublicBoard({url:'https://kangshifu.fmode.cn/api/functions',appId:'FKieRbIoGt_main'}),db=buildModel(raw);
- assert.equal(db.projectById[ids.projectId].stage.code,'S5');assert.equal(db.artifactById[ids.artifactId].projectId,ids.projectId);
- for(const id of artifacts)assert.ok(raw.artifact.some(a=>a.objectId===id&&a.dataMode==='sample'));
- assert.ok(raw.opportunity.some(o=>o.objectId===ids.opportunityId));
- for(const secret of [account.accountId,account.scopeId,session.meta.conversationKey].filter(Boolean))assert.equal(JSON.stringify(raw).includes(secret),false);
- const out={ok:true,at:new Date().toISOString(),readOnly:true,businessWrites:0,...ids,artifactIds:artifacts,reportUrl:'https://kangshifu.fmode.cn/report/'+ids.artifactId,stage:'S5',progressState:'completed',dataMode:'sample',projectArtifactCount:3,sessionArtifactCount:6,eventCount:10,formulaItemCount:1,privateAttributionMatched:true,publicBoardDataVerified:true,agentName:'王刚001',participantDisplayName:session.studentName,formalReportPublished:false,actualPlatformCollectionPerformed:false,browserVerified:false};
- fs.writeFileSync('work/workshop-K-readback-20261102.json',JSON.stringify(out,null,2));console.log(JSON.stringify(out,null,2));
- }catch(e){console.error(JSON.stringify({ok:false,error:'K_READBACK_FAILED',step:e.code==='ERR_ASSERTION'?e.message:'读取失败;不输出原始异常或账号'}));process.exitCode=1;}
|