MCPcopy Create free account
hub / github.com/ChatLab/ChatLab / pushImport

Function pushImport

packages/node-runtime/src/services/push-importer.ts:431–518  ·  view source on GitHub ↗
(
  dbManager: DatabaseManager,
  sessionId: string,
  payload: PushImportPayload
)

Source from the content-addressed store, hash-verified

429const SAFE_SESSION_ID_RE = /^[a-zA-Z0-9_@-][a-zA-Z0-9_@.-]*$/
430
431export async function pushImport(
432 dbManager: DatabaseManager,
433 sessionId: string,
434 payload: PushImportPayload
435): Promise<PushImportOutcome> {
436 if (!SAFE_SESSION_ID_RE.test(sessionId) || sessionId.includes('..')) {
437 return { ok: false, reason: 'invalid_payload', message: 'sessionId contains invalid characters' }
438 }
439
440 if (importInProgress.has(sessionId)) {
441 return {
442 ok: false,
443 reason: 'import_in_progress',
444 message: 'Another import is already in progress for this session',
445 }
446 }
447
448 const dbPath = dbManager.getDbPath(sessionId)
449 const isNew = !fs.existsSync(dbPath)
450
451 const validationError = validatePayload(payload, isNew)
452 if (validationError) {
453 return { ok: false, reason: 'invalid_payload', message: validationError }
454 }
455
456 importInProgress.add(sessionId)
457 try {
458 if (isNew) {
459 const db = dbManager.openRawSessionDatabase(sessionId, { create: true })
460 try {
461 const { writtenCount, duplicateCount, membersAdded } = fullImport(
462 db,
463 payload.meta!,
464 payload.members ?? [],
465 payload.messages!
466 )
467 const session = queryStats(db)
468 dbManager.raiseCurrentChatDbCompatibilityGate()
469 return {
470 ok: true,
471 result: {
472 sessionId,
473 created: true,
474 batch: { receivedCount: payload.messages!.length, writtenCount, duplicateCount },
475 session,
476 updates: { metaUpdated: true, membersAdded, membersUpdated: 0 },
477 },
478 }
479 } finally {
480 db.close()
481 }
482 }
483
484 const db = dbManager.openRawSessionDatabase(sessionId, { readonly: false })
485 try {
486 const { writtenCount, duplicateCount, metaUpdated, membersAdded, membersUpdated } = incrementalImport(db, payload)
487 const session = queryStats(db)
488 dbManager.raiseCurrentChatDbCompatibilityGate()

Callers 2

registerImportRoutesFunction · 0.90

Calls 11

validatePayloadFunction · 0.85
fullImportFunction · 0.85
queryStatsFunction · 0.85
incrementalImportFunction · 0.70
getDbPathMethod · 0.65
closeMethod · 0.65
deleteMethod · 0.65
addMethod · 0.45

Tested by

no test coverage detected