{"version":3,"file":"push.mjs","sources":["../../../../src/strapi/remote/handlers/push.ts"],"sourcesContent":["import { createHash, randomUUID, type Hash } from 'crypto';\nimport { Writable, PassThrough } from 'stream';\nimport type { Core } from '@strapi/types';\n\nimport type { TransferFlow, Step } from '../flows';\nimport type { TransferStage, IAsset, Protocol } from '../../../../types';\n\nimport { ProviderTransferError } from '../../../errors/providers';\nimport { write } from '../../../utils/writable-async-write';\nimport { decodeTransferAssetStreamItem } from '../../../utils/transfer-asset-chunk';\nimport { createLocalStrapiDestinationProvider } from '../../providers';\nimport { createFlow, DEFAULT_TRANSFER_FLOW } from '../flows';\nimport { Handler } from './abstract';\nimport { handlerControllerFactory, isDataTransferMessage } from './utils';\n\nconst VALID_TRANSFER_ACTIONS = [\n  'bootstrap',\n  'close',\n  'rollback',\n  'beforeTransfer',\n  'getMetadata',\n  'getSchemas',\n] as const;\n\ntype PushTransferAction = (typeof VALID_TRANSFER_ACTIONS)[number];\n\nconst TRANSFER_KIND = 'push';\n\nexport interface PushHandler extends Handler {\n  /**\n   * Local Strapi Destination Provider used to write data to the current Strapi instance\n   */\n  provider?: ReturnType<typeof createLocalStrapiDestinationProvider>;\n\n  /**\n   * Holds all the stages' stream for the current transfer handler (one registry per connection)\n   */\n  streams?: { [stage in TransferStage]?: Writable };\n\n  stats: {\n    [stage in Exclude<TransferStage, 'schemas'>]: Protocol.Client.Stats;\n  };\n\n  /**\n   * Holds all the transferred assets for the current transfer handler (one registry per connection)\n   */\n  assets: { [assetID: string]: IAsset & { stream: PassThrough } };\n  /** Incremental checksum state keyed by transfer asset ID (only populated when checksums are enabled). */\n  assetChecksums?: { [assetID: string]: Hash };\n  checksumsEnabled?: boolean;\n\n  /**\n   * Orchestrate and manage the transfer messages' ordering\n   */\n  flow?: TransferFlow;\n\n  /**\n   * Interval for periodic destination memory logging during assets stage\n   */\n  memoryLogInterval?: ReturnType<typeof setInterval>;\n\n  /**\n   * Checks that the given action is a valid push transfer action\n   */\n  assertValidTransferAction(action: string): asserts action is PushTransferAction;\n\n  /**\n   * Create a new writable stream for the given step in the handler's stream registry\n   */\n  createWritableStreamForStep(step: TransferStage): Promise<void>;\n\n  /**\n   * Simple override of the auth verification\n   */\n  verifyAuth(): Promise<void>;\n\n  /**\n   * Callback when receiving a regular transfer message\n   */\n  onTransferMessage(msg: Protocol.Client.TransferMessage): Promise<unknown> | unknown;\n\n  /**\n   * Callback when receiving a transfer action message\n   */\n  onTransferAction(msg: Protocol.Client.Action): Promise<unknown> | unknown;\n\n  /**\n   * Callback when receiving a transfer step message\n   */\n  onTransferStep(msg: Protocol.Client.TransferPushMessage): Promise<unknown> | unknown;\n\n  /**\n   * Start streaming an asset\n   */\n  streamAsset(\n    this: PushHandler,\n    payload: Protocol.Client.GetTransferPushStreamData<'assets'>\n  ): Promise<void>;\n\n  // Transfer Flow\n\n  /**\n   * Try to move to a specific transfer stage & lock the step\n   */\n  lockTransferStep(stage: TransferStage): void;\n\n  /**\n   * Try to move to unlock the current step\n   */\n  unlockTransferStep(stage: TransferStage): void;\n\n  /**\n   * Checks whether it's possible to stream a chunk for the given stage\n   */\n  assertValidStreamTransferStep(stage: TransferStage): void;\n}\n\nexport const createPushController = handlerControllerFactory<Partial<PushHandler>>((proto) => ({\n  isTransferStarted(this: PushHandler) {\n    return proto.isTransferStarted.call(this) && this.provider !== undefined;\n  },\n\n  verifyAuth(this: PushHandler) {\n    return proto.verifyAuth.call(this, TRANSFER_KIND);\n  },\n  onInfo(message) {\n    this.diagnostics?.report({\n      details: {\n        message,\n        origin: 'push-handler',\n        createdAt: new Date(),\n      },\n      kind: 'info',\n    });\n  },\n  onWarning(message) {\n    this.diagnostics?.report({\n      details: {\n        message,\n        createdAt: new Date(),\n        origin: 'push-handler',\n      },\n      kind: 'warning',\n    });\n  },\n  cleanup(this: PushHandler) {\n    if (this.memoryLogInterval) {\n      clearInterval(this.memoryLogInterval);\n      delete this.memoryLogInterval;\n    }\n    proto.cleanup.call(this);\n\n    this.streams = {};\n    this.assets = {};\n    this.assetChecksums = {};\n    this.checksumsEnabled = false;\n\n    delete this.flow;\n    delete this.provider;\n  },\n\n  teardown(this: PushHandler) {\n    if (this.memoryLogInterval) {\n      clearInterval(this.memoryLogInterval);\n      delete this.memoryLogInterval;\n    }\n    if (this.provider) {\n      this.provider.rollback();\n    }\n\n    proto.teardown.call(this);\n  },\n\n  assertValidTransfer(this: PushHandler) {\n    proto.assertValidTransfer.call(this);\n\n    if (this.provider === undefined) {\n      throw new Error('Invalid Transfer Process');\n    }\n  },\n\n  assertValidTransferAction(this: PushHandler, action: PushTransferAction) {\n    if (VALID_TRANSFER_ACTIONS.includes(action)) {\n      return;\n    }\n\n    throw new ProviderTransferError(`Invalid action provided: \"${action}\"`, {\n      action,\n      validActions: Object.keys(VALID_TRANSFER_ACTIONS),\n    });\n  },\n\n  assertValidStreamTransferStep(this: PushHandler, stage) {\n    const currentStep = this.flow?.get();\n    const nextStep: Step = { kind: 'transfer', stage };\n\n    if (currentStep?.kind === 'transfer' && !currentStep.locked) {\n      throw new ProviderTransferError(\n        `You need to initialize the transfer stage (${nextStep}) before starting to stream data`\n      );\n    }\n\n    if (this.flow?.cannot(nextStep)) {\n      throw new ProviderTransferError(`Invalid stage (${nextStep}) provided for the current flow`, {\n        step: nextStep,\n      });\n    }\n  },\n\n  async createWritableStreamForStep(this: PushHandler, step: Exclude<TransferStage, 'schemas'>) {\n    const mapper = {\n      entities: () => this.provider?.createEntitiesWriteStream(),\n      links: () => this.provider?.createLinksWriteStream(),\n      configuration: () => this.provider?.createConfigurationWriteStream(),\n      assets: () => this.provider?.createAssetsWriteStream(),\n    };\n\n    if (!(step in mapper)) {\n      throw new Error('Invalid transfer step, impossible to create a stream');\n    }\n\n    if (!this.streams) {\n      throw new Error('Invalid transfer state');\n    }\n\n    this.streams[step] = await mapper[step]();\n  },\n\n  async onMessage(this: PushHandler, raw) {\n    const msg = JSON.parse(raw.toString());\n\n    if (!isDataTransferMessage(msg)) {\n      return;\n    }\n\n    if (!msg.uuid) {\n      await this.respond(undefined, new Error('Missing uuid in message'));\n    }\n\n    if (proto.hasUUID(msg.uuid)) {\n      const previousResponse = proto.response;\n      if (previousResponse?.uuid === msg.uuid) {\n        await this.respond(previousResponse?.uuid, previousResponse.e, previousResponse.data);\n      }\n      return;\n    }\n\n    const { uuid, type } = msg;\n    proto.addUUID(uuid);\n    // Regular command message (init, end, status)\n    if (type === 'command') {\n      const { command } = msg;\n      this.onInfo(`received command:${command} uuid:${uuid}`);\n      await this.executeAndRespond(uuid, () => {\n        this.assertValidTransferCommand(command);\n\n        // The status command don't have params\n        if (command === 'status') {\n          return this.status();\n        }\n        return this[command](msg.params);\n      });\n    }\n\n    // Transfer message (the transfer must be init first)\n    else if (type === 'transfer') {\n      this.onInfo(`received transfer action:${msg.action} step:${msg.kind} uuid:${uuid}`);\n      await this.executeAndRespond(uuid, async () => {\n        await this.verifyAuth();\n\n        this.assertValidTransfer();\n\n        return this.onTransferMessage(msg);\n      });\n    }\n\n    // Invalid messages\n    else {\n      await this.respond(uuid, new Error('Bad Request'));\n    }\n  },\n\n  async onTransferMessage(this: PushHandler, msg) {\n    const { kind } = msg;\n\n    if (kind === 'action') {\n      return this.onTransferAction(msg);\n    }\n\n    if (kind === 'step') {\n      return this.onTransferStep(msg as Protocol.Client.TransferPushMessage);\n    }\n  },\n\n  lockTransferStep(stage: TransferStage) {\n    const currentStep = this.flow?.get();\n    const nextStep: Step = { kind: 'transfer', stage };\n\n    if (currentStep?.kind === 'transfer' && currentStep.locked) {\n      throw new ProviderTransferError(\n        `It's not possible to start a new transfer stage (${stage}) while another one is in progress (${currentStep.stage})`\n      );\n    }\n\n    if (this.flow?.cannot(nextStep)) {\n      throw new ProviderTransferError(`Invalid stage (${stage}) provided for the current flow`, {\n        step: nextStep,\n      });\n    }\n\n    this.flow?.set({ ...nextStep, locked: true });\n  },\n\n  unlockTransferStep(stage: TransferStage) {\n    const currentStep = this.flow?.get();\n    const nextStep: Step = { kind: 'transfer', stage };\n\n    // Cannot unlock if not locked (aka: started)\n    if (currentStep?.kind === 'transfer' && !currentStep.locked) {\n      throw new ProviderTransferError(\n        `You need to initialize the transfer stage (${stage}) before ending it`\n      );\n    }\n\n    // Cannot unlock if invalid step provided\n    if (this.flow?.cannot(nextStep)) {\n      throw new ProviderTransferError(`Invalid stage (${stage}) provided for the current flow`, {\n        step: nextStep,\n      });\n    }\n\n    this.flow?.set({ ...nextStep, locked: false });\n  },\n\n  async onTransferStep(this: PushHandler, msg) {\n    const { step: stage } = msg;\n\n    if (msg.action === 'start') {\n      this.lockTransferStep(stage);\n\n      if (this.streams?.[stage] instanceof Writable) {\n        throw new Error('Stream already created, something went wrong');\n      }\n\n      await this.createWritableStreamForStep(stage);\n\n      this.stats[stage] = { started: 0, finished: 0 };\n\n      if (stage === 'assets') {\n        strapi.log.debug(\n          '[Transfer destination] Assets stage started; sampling memory usage every 5s until stage end'\n        );\n        this.memoryLogInterval = setInterval(() => {\n          const mem = process.memoryUsage();\n          const stats = this.stats?.assets;\n          const rssMb = (mem.rss / 1024 / 1024).toFixed(1);\n          const heapMb = (mem.heapUsed / 1024 / 1024).toFixed(1);\n          strapi.log.debug(\n            `[Transfer destination] memory RSS=${rssMb}MB heapUsed=${heapMb}MB | assets started=${stats?.started ?? 0} finished=${stats?.finished ?? 0}`\n          );\n        }, 5000);\n      }\n\n      return { ok: true };\n    }\n\n    if (msg.action === 'stream') {\n      this.assertValidStreamTransferStep(stage);\n\n      // Stream operation on the current transfer stage\n      const stream = this.streams?.[stage];\n\n      if (!stream) {\n        throw new Error('You need to init first');\n      }\n\n      // Assets are nested streams\n      if (stage === 'assets') {\n        return this.streamAsset(msg.data);\n      }\n\n      // One objectMode Writable: do not overlap writes.\n      for (const item of msg.data) {\n        this.stats[stage].started += 1;\n        await write(stream, item);\n        this.stats[stage].finished += 1;\n      }\n    }\n\n    if (msg.action === 'end') {\n      if (stage === 'assets' && this.memoryLogInterval) {\n        clearInterval(this.memoryLogInterval);\n        delete this.memoryLogInterval;\n        strapi.log.debug('[Transfer destination] Assets stage ended, stopped memory log');\n      }\n      this.unlockTransferStep(stage);\n      const stream = this.streams?.[stage];\n\n      if (stream && !stream.closed) {\n        await new Promise((resolve, reject) => {\n          stream.on('close', resolve).on('error', reject).end();\n        });\n      }\n\n      delete this.streams?.[stage];\n\n      return { ok: true, stats: this.stats[stage] };\n    }\n  },\n\n  async onTransferAction(this: PushHandler, msg) {\n    const { action } = msg;\n\n    this.assertValidTransferAction(action);\n\n    const step: Step = { kind: 'action', action };\n    const isStepRegistered = this.flow?.has(step);\n\n    if (isStepRegistered) {\n      if (this.flow?.cannot(step)) {\n        throw new ProviderTransferError(`Invalid action \"${action}\" found for the current flow `, {\n          action,\n        });\n      }\n\n      this.flow?.set(step);\n    }\n    if (action === 'bootstrap') {\n      return this.provider?.[action](this.diagnostics);\n    }\n    return this.provider?.[action]();\n  },\n\n  async streamAsset(this: PushHandler, payload) {\n    const assetsStream = this.streams?.assets;\n\n    // TODO: close the stream upon receiving an 'end' event instead\n    if (payload === null) {\n      this.streams?.assets?.end();\n      return;\n    }\n\n    for (const item of payload) {\n      const { action, assetID } = item;\n\n      if (!assetsStream) {\n        throw new Error('Stream not defined');\n      }\n\n      if (action === 'start') {\n        this.stats.assets.started += 1;\n        this.assets[assetID] = { ...item.data, stream: new PassThrough() };\n        if (this.checksumsEnabled) {\n          this.assetChecksums ??= {};\n          this.assetChecksums[assetID] = createHash('sha256');\n        }\n        const filename = item.data?.filename ?? assetID;\n        strapi.log.debug(\n          `[Transfer destination] Asset start #${this.stats.assets.started} id=${assetID} filename=${filename}`\n        );\n        // Wait for the assets stage to accept this row (same pattern as remote-source).\n        await write(assetsStream, this.assets[assetID]);\n      } else if (action === 'stream' || action === 'end') {\n        if (!this.assets[assetID]) {\n          throw new ProviderTransferError(\n            `No asset \"${assetID}\" for ${action} action; send start before stream/end`\n          );\n        }\n\n        if (action === 'stream') {\n          const chunk = decodeTransferAssetStreamItem(item);\n          this.assetChecksums?.[assetID]?.update(chunk);\n          await write(this.assets[assetID].stream, chunk);\n        } else {\n          if (this.checksumsEnabled) {\n            if (!item.checksum) {\n              throw new ProviderTransferError(`Missing checksum for asset \"${assetID}\"`);\n            }\n            if (item.checksum.algorithm !== 'sha256') {\n              throw new ProviderTransferError(\n                `Unsupported checksum algorithm \"${item.checksum.algorithm}\" for asset ${assetID}`\n              );\n            }\n            const checksum = this.assetChecksums?.[assetID]?.digest('hex');\n            if (!checksum || checksum !== item.checksum.value) {\n              throw new ProviderTransferError(\n                `Checksum mismatch for asset \"${assetID}\" (expected ${item.checksum.value}, got ${checksum ?? 'none'})`\n              );\n            }\n          }\n          if (this.assetChecksums?.[assetID]) {\n            delete this.assetChecksums[assetID];\n          }\n          strapi.log.debug(\n            `[Transfer destination] Asset end id=${assetID} (finished=${this.stats.assets.finished + 1}/${this.stats.assets.started})`\n          );\n          await new Promise<void>((resolve, reject) => {\n            const { stream: assetStream } = this.assets[assetID];\n            assetStream\n              .on('close', () => {\n                this.stats.assets.finished += 1;\n                delete this.assets[assetID];\n                resolve();\n              })\n              .on('error', reject)\n              .end();\n          });\n        }\n      } else {\n        throw new ProviderTransferError(\n          `Invalid asset flow action: ${String((item as { action?: unknown }).action)}`\n        );\n      }\n    }\n  },\n\n  onClose(this: Handler) {\n    this.teardown();\n  },\n\n  onError(this: Handler, err) {\n    this.teardown();\n    strapi.log.error(err);\n  },\n\n  // Commands\n\n  async init(\n    this: PushHandler,\n    params: Protocol.Client.GetCommandParams<'init'>\n  ): Promise<Protocol.Server.Payload<Protocol.Server.InitMessage>> {\n    if (this.transferID || this.provider) {\n      throw new Error('Transfer already in progress');\n    }\n\n    await this.verifyAuth();\n\n    this.transferID = randomUUID();\n    this.startedAt = Date.now();\n\n    this.assets = {};\n    this.assetChecksums = {};\n    this.checksumsEnabled = params?.checksums === true;\n    this.streams = {};\n    this.stats = {\n      assets: { started: 0, finished: 0 },\n      configuration: { started: 0, finished: 0 },\n      entities: { started: 0, finished: 0 },\n      links: { started: 0, finished: 0 },\n    };\n\n    this.flow = createFlow(DEFAULT_TRANSFER_FLOW);\n\n    this.provider = createLocalStrapiDestinationProvider({\n      strategy: params?.options?.strategy ?? 'restore',\n      restore: params?.options?.restore ?? {},\n      autoDestroy: false,\n      getStrapi: () => strapi as Core.Strapi,\n    });\n\n    this.provider.onWarning = (message) => {\n      this.onWarning(message);\n      strapi.log.warn(message);\n    };\n\n    return { transferID: this.transferID, checksums: true };\n  },\n\n  async status(this: PushHandler) {\n    const isStarted = this.isTransferStarted();\n\n    if (isStarted) {\n      const startedAt = this.startedAt as number;\n\n      return {\n        active: true,\n        kind: TRANSFER_KIND,\n        startedAt,\n        elapsed: Date.now() - startedAt,\n      };\n    }\n\n    return { active: false, kind: null, elapsed: null, startedAt: null };\n  },\n\n  async end(\n    this: PushHandler,\n    params: Protocol.Client.GetCommandParams<'end'>\n  ): Promise<Protocol.Server.Payload<Protocol.Server.EndMessage>> {\n    await this.verifyAuth();\n\n    if (this.transferID !== params?.transferID) {\n      throw new ProviderTransferError('Bad transfer ID provided');\n    }\n\n    this.cleanup();\n\n    return { ok: true };\n  },\n}));\n"],"names":["VALID_TRANSFER_ACTIONS","TRANSFER_KIND","createPushController","handlerControllerFactory","proto","isTransferStarted","call","provider","undefined","verifyAuth","onInfo","message","diagnostics","report","details","origin","createdAt","Date","kind","onWarning","cleanup","memoryLogInterval","clearInterval","streams","assets","assetChecksums","checksumsEnabled","flow","teardown","rollback","assertValidTransfer","Error","assertValidTransferAction","action","includes","ProviderTransferError","validActions","Object","keys","assertValidStreamTransferStep","stage","currentStep","get","nextStep","locked","cannot","step","createWritableStreamForStep","mapper","entities","createEntitiesWriteStream","links","createLinksWriteStream","configuration","createConfigurationWriteStream","createAssetsWriteStream","onMessage","raw","msg","JSON","parse","toString","isDataTransferMessage","uuid","respond","hasUUID","previousResponse","response","e","data","type","addUUID","command","executeAndRespond","assertValidTransferCommand","status","params","onTransferMessage","onTransferAction","onTransferStep","lockTransferStep","set","unlockTransferStep","Writable","stats","started","finished","strapi","log","debug","setInterval","mem","process","memoryUsage","rssMb","rss","toFixed","heapMb","heapUsed","ok","stream","streamAsset","item","write","closed","Promise","resolve","reject","on","end","isStepRegistered","has","payload","assetsStream","assetID","PassThrough","createHash","filename","chunk","decodeTransferAssetStreamItem","update","checksum","algorithm","digest","value","assetStream","String","onClose","onError","err","error","init","transferID","randomUUID","startedAt","now","checksums","createFlow","DEFAULT_TRANSFER_FLOW","createLocalStrapiDestinationProvider","strategy","options","restore","autoDestroy","getStrapi","warn","isStarted","active","elapsed"],"mappings":"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"}