Update creation flow refactor docs and auth test fixtures
This commit is contained in:
@@ -122,6 +122,11 @@ function createTestConfig(
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'genarrative_refresh_session',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
@@ -467,7 +472,18 @@ async function startWechatMockFlow(baseUrl: string, redirectPath = '/') {
|
||||
const location = callbackResponse.headers.get('location') || '';
|
||||
assert.ok(location);
|
||||
const hash = parseRedirectHash(location);
|
||||
const token = hash.get('auth_token') || '';
|
||||
const setCookieHeader = callbackResponse.headers.get('set-cookie') || '';
|
||||
const accessCookie = setCookieHeader
|
||||
.split(',')
|
||||
.map((entry) => entry.trim())
|
||||
.find((entry) => entry.startsWith('genarrative_access_session='));
|
||||
const token =
|
||||
accessCookie
|
||||
?.split(';')[0]
|
||||
?.split('=')
|
||||
.slice(1)
|
||||
.join('=')
|
||||
.trim() || '';
|
||||
|
||||
assert.ok(token);
|
||||
|
||||
|
||||
@@ -81,6 +81,11 @@ function createTestConfig(databaseUrl: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'genarrative_refresh_session',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
@@ -91,6 +91,11 @@ function createTestConfig(testName: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'genarrative_refresh_session',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
@@ -93,6 +93,11 @@ function createTestConfig(testName: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'genarrative_refresh_session',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
1
server-node/src/routes/rpgCreationAgentRoutes.ts
Normal file
1
server-node/src/routes/rpgCreationAgentRoutes.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { createCustomWorldAgentRoutes as createRpgCreationAgentRoutes } from './customWorldAgent.js';
|
||||
14
server-node/src/routes/rpgWorldGalleryRoutes.ts
Normal file
14
server-node/src/routes/rpgWorldGalleryRoutes.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Router } from 'express';
|
||||
|
||||
import type { AppContext } from '../context.js';
|
||||
|
||||
/**
|
||||
* 工作包 A 先建立 RPG 世界广场路由的命名骨架。
|
||||
* 当前广场查询仍由旧 runtime 路由承载,后续工作包会再迁移实现。
|
||||
*/
|
||||
export const RPG_WORLD_GALLERY_ROUTE_BASE_PATH =
|
||||
'/runtime/custom-world-gallery';
|
||||
|
||||
export function createRpgWorldGalleryRoutes(_context: AppContext) {
|
||||
return Router();
|
||||
}
|
||||
13
server-node/src/routes/rpgWorldLibraryRoutes.ts
Normal file
13
server-node/src/routes/rpgWorldLibraryRoutes.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Router } from 'express';
|
||||
|
||||
import type { AppContext } from '../context.js';
|
||||
|
||||
/**
|
||||
* 工作包 A 先建立 RPG 世界作品库路由的命名骨架。
|
||||
* 当前仅提供稳定落点,真正的库读写逻辑仍保留在 `runtimeRoutes.ts` 中。
|
||||
*/
|
||||
export const RPG_WORLD_LIBRARY_ROUTE_BASE_PATH = '/runtime/custom-world-library';
|
||||
|
||||
export function createRpgWorldLibraryRoutes(_context: AppContext) {
|
||||
return Router();
|
||||
}
|
||||
13
server-node/src/routes/rpgWorldWorksRoutes.ts
Normal file
13
server-node/src/routes/rpgWorldWorksRoutes.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import { Router } from 'express';
|
||||
|
||||
import type { AppContext } from '../context.js';
|
||||
|
||||
/**
|
||||
* 工作包 A 先建立 RPG 世界作品流路由的命名骨架。
|
||||
* 真实实现仍暂挂在 `runtimeRoutes.ts`,后续工作包再把作品列表接口迁入这里。
|
||||
*/
|
||||
export const RPG_WORLD_WORKS_ROUTE_BASE_PATH = '/runtime/custom-world/works';
|
||||
|
||||
export function createRpgWorldWorksRoutes(_context: AppContext) {
|
||||
return Router();
|
||||
}
|
||||
1
server-node/src/services/RpgAgentOrchestrator.ts
Normal file
1
server-node/src/services/RpgAgentOrchestrator.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { CustomWorldAgentOrchestrator as RpgAgentOrchestrator } from './customWorldAgentOrchestrator.js';
|
||||
5
server-node/src/services/RpgAgentSessionStore.ts
Normal file
5
server-node/src/services/RpgAgentSessionStore.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export type { CustomWorldAgentSessionRecord as RpgAgentSessionRecord } from './customWorldAgentSessionStore.js';
|
||||
export {
|
||||
CUSTOM_WORLD_AGENT_SESSION_ID_PREFIX as RPG_AGENT_SESSION_ID_PREFIX,
|
||||
CustomWorldAgentSessionStore as RpgAgentSessionStore,
|
||||
} from './customWorldAgentSessionStore.js';
|
||||
14
server-node/src/services/RpgWorldPreviewCompiler.ts
Normal file
14
server-node/src/services/RpgWorldPreviewCompiler.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import {
|
||||
buildCompiledCustomWorldProfile,
|
||||
normalizeCustomWorldProfile,
|
||||
} from '../modules/custom-world/runtimeProfile.js';
|
||||
import type { CustomWorldProfile } from '../modules/custom-world/runtimeTypes.js';
|
||||
|
||||
/**
|
||||
* 工作包 A 先建立 RPG 世界预览编译器的新命名 façade。
|
||||
* 当前仍桥接旧 runtime profile 编译能力,后续工作包 G 会把正式 preview compiler 收口到这个入口。
|
||||
*/
|
||||
export type RpgWorldPreviewProfile = CustomWorldProfile;
|
||||
|
||||
export const buildRpgWorldPreviewProfile = buildCompiledCustomWorldProfile;
|
||||
export const normalizeRpgWorldPreviewProfile = normalizeCustomWorldProfile;
|
||||
1
server-node/src/services/RpgWorldWorkSummaryService.ts
Normal file
1
server-node/src/services/RpgWorldWorkSummaryService.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { listCustomWorldWorkSummaries as listRpgWorldWorkSummaries } from './customWorldWorkSummaryService.js';
|
||||
@@ -87,6 +87,11 @@ function createTestConfig(testName: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'refresh_token',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
@@ -172,6 +172,11 @@ function createAutoAssetTestConfig(testName: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'refresh_token',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
@@ -171,6 +171,11 @@ function createAutoAssetTestConfig(testName: string): AppConfig {
|
||||
mockAvatarUrl: '',
|
||||
},
|
||||
authSession: {
|
||||
accessCookieName: 'genarrative_access_session',
|
||||
accessCookieTtlSeconds: 7200,
|
||||
accessCookieSecure: false,
|
||||
accessCookieSameSite: 'Lax',
|
||||
accessCookiePath: '/',
|
||||
refreshCookieName: 'refresh_token',
|
||||
refreshSessionTtlDays: 30,
|
||||
refreshCookieSecure: false,
|
||||
|
||||
Reference in New Issue
Block a user