@strapi/data-transfer 5.47.1 → 5.48.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist/directory/providers/destination/index.d.ts +1 -1
  2. package/dist/directory/providers/destination/index.d.ts.map +1 -1
  3. package/dist/directory/providers/destination/index.js.map +1 -1
  4. package/dist/directory/providers/destination/index.mjs.map +1 -1
  5. package/dist/directory/providers/source/index.d.ts +1 -1
  6. package/dist/directory/providers/source/index.d.ts.map +1 -1
  7. package/dist/directory/providers/source/index.js.map +1 -1
  8. package/dist/directory/providers/source/index.mjs.map +1 -1
  9. package/dist/engine/index.d.ts +1 -1
  10. package/dist/engine/index.d.ts.map +1 -1
  11. package/dist/engine/index.js.map +1 -1
  12. package/dist/engine/index.mjs.map +1 -1
  13. package/dist/engine/validation/provider.d.ts +1 -1
  14. package/dist/engine/validation/provider.d.ts.map +1 -1
  15. package/dist/engine/validation/provider.js.map +1 -1
  16. package/dist/engine/validation/provider.mjs.map +1 -1
  17. package/dist/errors/providers.d.ts +1 -1
  18. package/dist/errors/providers.d.ts.map +1 -1
  19. package/dist/errors/providers.js.map +1 -1
  20. package/dist/errors/providers.mjs.map +1 -1
  21. package/dist/file/providers/destination/index.d.ts +1 -1
  22. package/dist/file/providers/destination/index.d.ts.map +1 -1
  23. package/dist/file/providers/destination/index.js.map +1 -1
  24. package/dist/file/providers/destination/index.mjs.map +1 -1
  25. package/dist/file/providers/source/index.d.ts +1 -1
  26. package/dist/file/providers/source/index.d.ts.map +1 -1
  27. package/dist/file/providers/source/index.js.map +1 -1
  28. package/dist/file/providers/source/index.mjs.map +1 -1
  29. package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts +9 -4
  30. package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts.map +1 -1
  31. package/dist/strapi/providers/local-destination/assets-destination-writable.js +67 -49
  32. package/dist/strapi/providers/local-destination/assets-destination-writable.js.map +1 -1
  33. package/dist/strapi/providers/local-destination/assets-destination-writable.mjs +67 -49
  34. package/dist/strapi/providers/local-destination/assets-destination-writable.mjs.map +1 -1
  35. package/dist/strapi/providers/local-destination/index.d.ts +1 -1
  36. package/dist/strapi/providers/local-destination/index.d.ts.map +1 -1
  37. package/dist/strapi/providers/local-destination/index.js.map +1 -1
  38. package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
  39. package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts +1 -1
  40. package/dist/strapi/providers/local-destination/strategies/restore/configuration.d.ts.map +1 -1
  41. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -1
  42. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -1
  43. package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts +1 -1
  44. package/dist/strapi/providers/local-destination/strategies/restore/entities.d.ts.map +1 -1
  45. package/dist/strapi/providers/local-destination/strategies/restore/entities.js +13 -25
  46. package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
  47. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +14 -26
  48. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
  49. package/dist/strapi/providers/local-destination/strategies/restore/index.js +0 -4
  50. package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
  51. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +0 -4
  52. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
  53. package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts +1 -1
  54. package/dist/strapi/providers/local-destination/strategies/restore/links.d.ts.map +1 -1
  55. package/dist/strapi/providers/local-destination/strategies/restore/links.js +22 -3
  56. package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -1
  57. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs +22 -3
  58. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -1
  59. package/dist/strapi/providers/local-source/assets.d.ts +1 -1
  60. package/dist/strapi/providers/local-source/assets.d.ts.map +1 -1
  61. package/dist/strapi/providers/local-source/assets.js.map +1 -1
  62. package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
  63. package/dist/strapi/providers/local-source/configuration.js.map +1 -1
  64. package/dist/strapi/providers/local-source/configuration.mjs.map +1 -1
  65. package/dist/strapi/providers/local-source/entities.d.ts +3 -1
  66. package/dist/strapi/providers/local-source/entities.d.ts.map +1 -1
  67. package/dist/strapi/providers/local-source/entities.js +7 -3
  68. package/dist/strapi/providers/local-source/entities.js.map +1 -1
  69. package/dist/strapi/providers/local-source/entities.mjs +7 -3
  70. package/dist/strapi/providers/local-source/entities.mjs.map +1 -1
  71. package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts +1 -1
  72. package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts.map +1 -1
  73. package/dist/strapi/providers/local-source/estimate-asset-totals.js.map +1 -1
  74. package/dist/strapi/providers/local-source/estimate-asset-totals.mjs.map +1 -1
  75. package/dist/strapi/providers/local-source/index.d.ts +2 -2
  76. package/dist/strapi/providers/local-source/index.d.ts.map +1 -1
  77. package/dist/strapi/providers/local-source/index.js +6 -1
  78. package/dist/strapi/providers/local-source/index.js.map +1 -1
  79. package/dist/strapi/providers/local-source/index.mjs +6 -1
  80. package/dist/strapi/providers/local-source/index.mjs.map +1 -1
  81. package/dist/strapi/providers/local-source/links.js.map +1 -1
  82. package/dist/strapi/providers/local-source/links.mjs.map +1 -1
  83. package/dist/strapi/providers/remote-destination/index.d.ts +2 -2
  84. package/dist/strapi/providers/remote-destination/index.d.ts.map +1 -1
  85. package/dist/strapi/providers/remote-destination/index.js +24 -3
  86. package/dist/strapi/providers/remote-destination/index.js.map +1 -1
  87. package/dist/strapi/providers/remote-destination/index.mjs +25 -4
  88. package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
  89. package/dist/strapi/providers/remote-source/index.d.ts +2 -2
  90. package/dist/strapi/providers/remote-source/index.d.ts.map +1 -1
  91. package/dist/strapi/providers/remote-source/index.js.map +1 -1
  92. package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
  93. package/dist/strapi/providers/utils.d.ts +2 -2
  94. package/dist/strapi/providers/utils.d.ts.map +1 -1
  95. package/dist/strapi/providers/utils.js.map +1 -1
  96. package/dist/strapi/providers/utils.mjs.map +1 -1
  97. package/dist/strapi/queries/link.d.ts +1 -1
  98. package/dist/strapi/queries/link.d.ts.map +1 -1
  99. package/dist/strapi/queries/link.js.map +1 -1
  100. package/dist/strapi/queries/link.mjs.map +1 -1
  101. package/dist/strapi/remote/flows/index.d.ts +1 -1
  102. package/dist/strapi/remote/flows/index.d.ts.map +1 -1
  103. package/dist/strapi/remote/flows/index.js.map +1 -1
  104. package/dist/strapi/remote/flows/index.mjs.map +1 -1
  105. package/dist/strapi/remote/handlers/pull.d.ts +1 -1
  106. package/dist/strapi/remote/handlers/pull.d.ts.map +1 -1
  107. package/dist/strapi/remote/handlers/pull.js +3 -3
  108. package/dist/strapi/remote/handlers/pull.js.map +1 -1
  109. package/dist/strapi/remote/handlers/pull.mjs +3 -3
  110. package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
  111. package/dist/strapi/remote/handlers/push.d.ts +1 -1
  112. package/dist/strapi/remote/handlers/push.d.ts.map +1 -1
  113. package/dist/strapi/remote/handlers/push.js +7 -1
  114. package/dist/strapi/remote/handlers/push.js.map +1 -1
  115. package/dist/strapi/remote/handlers/push.mjs +7 -1
  116. package/dist/strapi/remote/handlers/push.mjs.map +1 -1
  117. package/dist/strapi/remote/handlers/utils.d.ts +1 -1
  118. package/dist/strapi/remote/handlers/utils.d.ts.map +1 -1
  119. package/dist/strapi/remote/handlers/utils.js.map +1 -1
  120. package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
  121. package/dist/types/common-entities.d.ts +152 -0
  122. package/dist/types/common-entities.d.ts.map +1 -0
  123. package/dist/types/encryption.d.ts +11 -0
  124. package/dist/types/encryption.d.ts.map +1 -0
  125. package/dist/types/index.d.ts +7 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/providers.d.ts +50 -0
  128. package/dist/types/providers.d.ts.map +1 -0
  129. package/dist/types/remote/index.d.ts +2 -0
  130. package/dist/types/remote/index.d.ts.map +1 -0
  131. package/dist/types/remote/protocol/auth.d.ts +5 -0
  132. package/dist/types/remote/protocol/auth.d.ts.map +1 -0
  133. package/dist/types/remote/protocol/client/commands.d.ts +37 -0
  134. package/dist/types/remote/protocol/client/commands.d.ts.map +1 -0
  135. package/dist/types/remote/protocol/client/index.d.ts +9 -0
  136. package/dist/types/remote/protocol/client/index.d.ts.map +1 -0
  137. package/dist/types/remote/protocol/client/transfer/action.d.ts +5 -0
  138. package/dist/types/remote/protocol/client/transfer/action.d.ts.map +1 -0
  139. package/dist/types/remote/protocol/client/transfer/index.d.ts +12 -0
  140. package/dist/types/remote/protocol/client/transfer/index.d.ts.map +1 -0
  141. package/dist/types/remote/protocol/client/transfer/pull.d.ts +25 -0
  142. package/dist/types/remote/protocol/client/transfer/pull.d.ts.map +1 -0
  143. package/dist/types/remote/protocol/client/transfer/push.d.ts +29 -0
  144. package/dist/types/remote/protocol/client/transfer/push.d.ts.map +1 -0
  145. package/dist/types/remote/protocol/client/transfer/utils.d.ts +49 -0
  146. package/dist/types/remote/protocol/client/transfer/utils.d.ts.map +1 -0
  147. package/dist/types/remote/protocol/index.d.ts +4 -0
  148. package/dist/types/remote/protocol/index.d.ts.map +1 -0
  149. package/dist/types/remote/protocol/server/error.d.ts +18 -0
  150. package/dist/types/remote/protocol/server/error.d.ts.map +1 -0
  151. package/dist/types/remote/protocol/server/index.d.ts +3 -0
  152. package/dist/types/remote/protocol/server/index.d.ts.map +1 -0
  153. package/dist/types/remote/protocol/server/messaging.d.ts +37 -0
  154. package/dist/types/remote/protocol/server/messaging.d.ts.map +1 -0
  155. package/dist/types/transfer-engine.d.ts +149 -0
  156. package/dist/types/transfer-engine.d.ts.map +1 -0
  157. package/dist/types/utils.d.ts +83 -0
  158. package/dist/types/utils.d.ts.map +1 -0
  159. package/dist/utils/components.d.ts +21 -1
  160. package/dist/utils/components.d.ts.map +1 -1
  161. package/dist/utils/components.js +69 -21
  162. package/dist/utils/components.js.map +1 -1
  163. package/dist/utils/components.mjs +70 -22
  164. package/dist/utils/components.mjs.map +1 -1
  165. package/dist/utils/encryption/decrypt.d.ts +1 -1
  166. package/dist/utils/encryption/decrypt.d.ts.map +1 -1
  167. package/dist/utils/encryption/decrypt.js.map +1 -1
  168. package/dist/utils/encryption/decrypt.mjs.map +1 -1
  169. package/dist/utils/encryption/encrypt.d.ts +1 -1
  170. package/dist/utils/encryption/encrypt.d.ts.map +1 -1
  171. package/dist/utils/encryption/encrypt.js.map +1 -1
  172. package/dist/utils/encryption/encrypt.mjs.map +1 -1
  173. package/dist/utils/index.js +1 -0
  174. package/dist/utils/index.js.map +1 -1
  175. package/dist/utils/index.mjs +1 -1
  176. package/dist/utils/middleware.d.ts +1 -1
  177. package/dist/utils/middleware.d.ts.map +1 -1
  178. package/dist/utils/middleware.js.map +1 -1
  179. package/dist/utils/middleware.mjs.map +1 -1
  180. package/dist/utils/transaction.d.ts +1 -1
  181. package/dist/utils/transaction.d.ts.map +1 -1
  182. package/dist/utils/transaction.js.map +1 -1
  183. package/dist/utils/transaction.mjs.map +1 -1
  184. package/dist/utils/transfer-asset-chunk.d.ts +22 -0
  185. package/dist/utils/transfer-asset-chunk.d.ts.map +1 -1
  186. package/dist/utils/transfer-asset-chunk.js +25 -0
  187. package/dist/utils/transfer-asset-chunk.js.map +1 -1
  188. package/dist/utils/transfer-asset-chunk.mjs +25 -1
  189. package/dist/utils/transfer-asset-chunk.mjs.map +1 -1
  190. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/strapi/remote/handlers/utils.ts"],"sourcesContent":["import type { IncomingMessage } from 'node:http';\nimport { randomUUID } from 'crypto';\nimport type { Context } from 'koa';\nimport type { RawData, ServerOptions } from 'ws';\nimport { WebSocket, WebSocketServer } from 'ws';\n\nimport type { Handler, TransferState } from './abstract';\nimport type { Protocol } from '../../../../types';\nimport { ProviderError, ProviderTransferError } from '../../../errors/providers';\nimport { VALID_TRANSFER_COMMANDS, ValidTransferCommand } from './constants';\nimport { TransferMethod } from '../constants';\nimport { createDiagnosticReporter } from '../../../utils/diagnostic';\nimport { stringifyTransferWebSocketPayload } from '../../../utils/transfer-websocket-json';\n\ntype WSCallback = (client: WebSocket, request: IncomingMessage) => void;\n\nexport interface HandlerOptions {\n verify: (ctx: Context, scope?: TransferMethod) => Promise<void>;\n server?: ServerOptions;\n}\n\nexport const transformUpgradeHeader = (header = '') => {\n return header.split(',').map((s) => s.trim().toLowerCase());\n};\n\nlet timeouts: Record<string, number> | undefined;\n\nconst hasHttpServer = () => {\n // during server restarts, strapi may not have ever been defined at all, so we have to check it first\n return typeof strapi !== 'undefined' && !!strapi?.server?.httpServer;\n};\n\n// temporarily disable server timeouts while transfer is running\nconst disableTimeouts = () => {\n if (!hasHttpServer()) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n // save the original timeouts to restore after\n if (!timeouts) {\n timeouts = {\n headersTimeout: httpServer.headersTimeout,\n requestTimeout: httpServer.requestTimeout,\n };\n }\n\n httpServer.headersTimeout = 0;\n httpServer.requestTimeout = 0;\n\n strapi.log.info('[Data transfer] Disabling http timeouts');\n};\nconst resetTimeouts = () => {\n if (!hasHttpServer() || !timeouts) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n strapi.log.info('[Data transfer] Restoring http timeouts');\n httpServer.headersTimeout = timeouts.headersTimeout;\n httpServer.requestTimeout = timeouts.requestTimeout;\n};\n/**\n * Make sure that the upgrade header is a valid websocket one\n */\nexport const assertValidHeader = (ctx: Context) => {\n // if it's exactly what we expect, it's fine\n if (ctx.headers.upgrade === 'websocket') {\n return;\n }\n\n // check if it could be an array that still includes websocket\n const upgradeHeader = transformUpgradeHeader(ctx.headers.upgrade);\n\n // Sanitize user input before writing it to our logs\n const logSafeUpgradeHeader = JSON.stringify(ctx.headers.upgrade)\n ?.replace(/[^a-z0-9\\s.,|]/gi, '')\n .substring(0, 50);\n\n if (!upgradeHeader.includes('websocket')) {\n throw new Error(\n `Transfer Upgrade header expected 'websocket', found '${logSafeUpgradeHeader}'. Please ensure that your server or proxy is not modifying the Upgrade header.`\n );\n }\n\n /**\n * If there's more than expected but it still includes websocket, in theory it could still work\n * and could be necessary for their certain configurations, so we'll allow it to proceed but\n * log the unexpected behaviour in case it helps debug an issue\n * */\n strapi.log.info(\n `Transfer Upgrade header expected only 'websocket', found unexpected values: ${logSafeUpgradeHeader}`\n );\n};\n\nexport const isDataTransferMessage = (message: unknown): message is Protocol.Client.Message => {\n if (!message || typeof message !== 'object') {\n return false;\n }\n\n const { uuid, type } = message as Record<string, unknown>;\n\n if (typeof uuid !== 'string' || typeof type !== 'string') {\n return false;\n }\n\n if (!['command', 'transfer'].includes(type)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Handle the upgrade to ws connection\n */\nexport const handleWSUpgrade = (wss: WebSocketServer, ctx: Context, callback: WSCallback) => {\n assertValidHeader(ctx);\n\n wss.handleUpgrade(ctx.req, ctx.request.socket, Buffer.alloc(0), (client, request) => {\n if (!client) {\n // If the WebSocket upgrade failed, destroy the socket to avoid hanging\n ctx.request.socket.destroy();\n return;\n }\n\n disableTimeouts();\n strapi.db.lifecycles.disable();\n strapi.log.info('[Data transfer] Disabling lifecycle hooks');\n\n // Create a connection between the client & the server\n wss.emit('connection', client, ctx.req);\n\n // Invoke the ws callback\n callback(client, request);\n });\n\n ctx.respond = false;\n};\n\n// Protocol related functions\n\nexport const handlerControllerFactory =\n <T extends Partial<Handler>>(implementation: (proto: Handler) => T) =>\n (options: HandlerOptions) => {\n const { verify, server: serverOptions } = options ?? {};\n\n const wss = new WebSocket.Server({ ...serverOptions, noServer: true });\n\n return async (ctx: Context) => {\n const cb: WSCallback = (ws) => {\n const state: TransferState = { id: undefined };\n const messageUUIDs = new Set<string>();\n const diagnostics = createDiagnosticReporter();\n\n const cannotRespondHandler = (err: unknown) => {\n strapi?.log?.error(\n '[Data transfer] Cannot send error response to client, closing connection'\n );\n strapi?.log?.error(err);\n try {\n ws.terminate();\n ctx.req.socket.destroy();\n } catch (err) {\n strapi?.log?.error('[Data transfer] Failed to close socket on error');\n }\n };\n\n const prototype: Handler = {\n // Transfer ID\n get transferID() {\n return state.id;\n },\n\n set transferID(id) {\n state.id = id;\n },\n\n // Started at\n get startedAt() {\n return state.startedAt;\n },\n\n set startedAt(timestamp) {\n state.startedAt = timestamp;\n },\n\n get response() {\n return state.response;\n },\n\n set response(response) {\n state.response = response;\n },\n\n get diagnostics() {\n return diagnostics;\n },\n\n addUUID(uuid) {\n messageUUIDs.add(uuid);\n },\n\n hasUUID(uuid) {\n return messageUUIDs.has(uuid);\n },\n\n isTransferStarted() {\n return this.transferID !== undefined && this.startedAt !== undefined;\n },\n\n assertValidTransfer() {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n throw new Error('Invalid Transfer Process');\n }\n },\n\n assertValidTransferCommand(command: ValidTransferCommand) {\n const isDefined = typeof this[command] === 'function';\n const isValidTransferCommand = VALID_TRANSFER_COMMANDS.includes(command);\n\n if (!isDefined || !isValidTransferCommand) {\n throw new Error('Invalid transfer command');\n }\n },\n\n async respond(uuid, e, data) {\n let details = {};\n return new Promise<void>((resolve, reject) => {\n if (!uuid && !e) {\n reject(new Error('Missing uuid for this message'));\n return;\n }\n\n this.response = {\n uuid,\n data,\n e,\n };\n\n if (e instanceof ProviderError) {\n details = e.details;\n }\n\n const envelope: Record<string, unknown> = {\n uuid,\n data: data ?? null,\n error: e\n ? {\n code: e?.name ?? 'ERR',\n message: e?.message,\n details,\n }\n : null,\n };\n\n const payload = stringifyTransferWebSocketPayload(envelope);\n\n this.send(payload, (error) => (error ? reject(error) : resolve()));\n });\n },\n\n send(message, cb) {\n ws.send(message, cb);\n },\n confirm(message) {\n return new Promise((resolve, reject) => {\n const uuid = randomUUID();\n\n const payload = stringifyTransferWebSocketPayload({ uuid, data: message });\n\n this.send(payload, (error) => {\n if (error) {\n reject(error);\n }\n });\n\n const onResponse = (raw: RawData) => {\n const response = JSON.parse(raw.toString());\n\n if (response.uuid === uuid) {\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n },\n\n async executeAndRespond(uuid, fn) {\n try {\n const response = await fn();\n await this.respond(uuid, null, response);\n } catch (e) {\n if (e instanceof Error) {\n await this.respond(uuid, e).catch(cannotRespondHandler);\n } else if (typeof e === 'string') {\n await this.respond(uuid, new ProviderTransferError(e)).catch(cannotRespondHandler);\n } else {\n await this.respond(\n uuid,\n new ProviderTransferError('Unexpected error', {\n error: e,\n })\n ).catch(cannotRespondHandler);\n }\n }\n },\n\n cleanup() {\n this.transferID = undefined;\n this.startedAt = undefined;\n this.response = undefined;\n },\n\n teardown() {\n this.cleanup();\n },\n\n verifyAuth(scope?: TransferMethod) {\n return verify(ctx, scope);\n },\n\n // Transfer commands\n init() {},\n end() {},\n status() {},\n\n // Default prototype implementation for events\n onMessage() {},\n onError() {},\n onClose() {},\n onInfo() {},\n onWarning() {},\n };\n\n const handler: Handler = Object.assign(Object.create(prototype), implementation(prototype));\n\n // Bind ws events to handler methods\n ws.on('close', async (...args) => {\n try {\n await handler.onClose(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error closing connection');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n } finally {\n resetTimeouts();\n strapi.db.lifecycles.enable();\n strapi.log.info('[Data transfer] Restoring lifecycle hooks');\n }\n });\n ws.on('error', async (...args) => {\n try {\n await handler.onError(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in error handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n ws.on('message', async (...args) => {\n try {\n await handler.onMessage(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in message handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n\n diagnostics.onDiagnostic((diagnostic) => {\n const uuid = randomUUID();\n const payload = JSON.stringify({\n diagnostic,\n uuid,\n });\n\n handler.send(payload);\n });\n };\n\n try {\n handleWSUpgrade(wss, ctx, cb);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Error in websocket upgrade request');\n strapi?.log?.error(err);\n }\n };\n };\n"],"names":["transformUpgradeHeader","header","split","map","s","trim","toLowerCase","timeouts","hasHttpServer","strapi","server","httpServer","disableTimeouts","headersTimeout","requestTimeout","log","info","resetTimeouts","assertValidHeader","ctx","headers","upgrade","upgradeHeader","logSafeUpgradeHeader","JSON","stringify","replace","substring","includes","Error","isDataTransferMessage","message","uuid","type","handleWSUpgrade","wss","callback","handleUpgrade","req","request","socket","Buffer","alloc","client","destroy","db","lifecycles","disable","emit","respond","handlerControllerFactory","implementation","options","verify","serverOptions","WebSocket","Server","noServer","cb","ws","state","id","undefined","messageUUIDs","Set","diagnostics","createDiagnosticReporter","cannotRespondHandler","err","error","terminate","prototype","transferID","startedAt","timestamp","response","addUUID","add","hasUUID","has","isTransferStarted","assertValidTransfer","isStarted","assertValidTransferCommand","command","isDefined","isValidTransferCommand","VALID_TRANSFER_COMMANDS","e","data","details","Promise","resolve","reject","ProviderError","envelope","code","name","payload","stringifyTransferWebSocketPayload","send","confirm","randomUUID","onResponse","raw","parse","toString","once","executeAndRespond","fn","catch","ProviderTransferError","cleanup","teardown","verifyAuth","scope","init","end","status","onMessage","onError","onClose","onInfo","onWarning","handler","Object","assign","create","on","args","enable","onDiagnostic","diagnostic"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/strapi/remote/handlers/utils.ts"],"sourcesContent":["import type { IncomingMessage } from 'node:http';\nimport { randomUUID } from 'crypto';\nimport type { Context } from 'koa';\nimport type { RawData, ServerOptions } from 'ws';\nimport { WebSocket, WebSocketServer } from 'ws';\n\nimport type { Handler, TransferState } from './abstract';\nimport type { Protocol } from '../../../types';\nimport { ProviderError, ProviderTransferError } from '../../../errors/providers';\nimport { VALID_TRANSFER_COMMANDS, ValidTransferCommand } from './constants';\nimport { TransferMethod } from '../constants';\nimport { createDiagnosticReporter } from '../../../utils/diagnostic';\nimport { stringifyTransferWebSocketPayload } from '../../../utils/transfer-websocket-json';\n\ntype WSCallback = (client: WebSocket, request: IncomingMessage) => void;\n\nexport interface HandlerOptions {\n verify: (ctx: Context, scope?: TransferMethod) => Promise<void>;\n server?: ServerOptions;\n}\n\nexport const transformUpgradeHeader = (header = '') => {\n return header.split(',').map((s) => s.trim().toLowerCase());\n};\n\nlet timeouts: Record<string, number> | undefined;\n\nconst hasHttpServer = () => {\n // during server restarts, strapi may not have ever been defined at all, so we have to check it first\n return typeof strapi !== 'undefined' && !!strapi?.server?.httpServer;\n};\n\n// temporarily disable server timeouts while transfer is running\nconst disableTimeouts = () => {\n if (!hasHttpServer()) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n // save the original timeouts to restore after\n if (!timeouts) {\n timeouts = {\n headersTimeout: httpServer.headersTimeout,\n requestTimeout: httpServer.requestTimeout,\n };\n }\n\n httpServer.headersTimeout = 0;\n httpServer.requestTimeout = 0;\n\n strapi.log.info('[Data transfer] Disabling http timeouts');\n};\nconst resetTimeouts = () => {\n if (!hasHttpServer() || !timeouts) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n strapi.log.info('[Data transfer] Restoring http timeouts');\n httpServer.headersTimeout = timeouts.headersTimeout;\n httpServer.requestTimeout = timeouts.requestTimeout;\n};\n/**\n * Make sure that the upgrade header is a valid websocket one\n */\nexport const assertValidHeader = (ctx: Context) => {\n // if it's exactly what we expect, it's fine\n if (ctx.headers.upgrade === 'websocket') {\n return;\n }\n\n // check if it could be an array that still includes websocket\n const upgradeHeader = transformUpgradeHeader(ctx.headers.upgrade);\n\n // Sanitize user input before writing it to our logs\n const logSafeUpgradeHeader = JSON.stringify(ctx.headers.upgrade)\n ?.replace(/[^a-z0-9\\s.,|]/gi, '')\n .substring(0, 50);\n\n if (!upgradeHeader.includes('websocket')) {\n throw new Error(\n `Transfer Upgrade header expected 'websocket', found '${logSafeUpgradeHeader}'. Please ensure that your server or proxy is not modifying the Upgrade header.`\n );\n }\n\n /**\n * If there's more than expected but it still includes websocket, in theory it could still work\n * and could be necessary for their certain configurations, so we'll allow it to proceed but\n * log the unexpected behaviour in case it helps debug an issue\n * */\n strapi.log.info(\n `Transfer Upgrade header expected only 'websocket', found unexpected values: ${logSafeUpgradeHeader}`\n );\n};\n\nexport const isDataTransferMessage = (message: unknown): message is Protocol.Client.Message => {\n if (!message || typeof message !== 'object') {\n return false;\n }\n\n const { uuid, type } = message as Record<string, unknown>;\n\n if (typeof uuid !== 'string' || typeof type !== 'string') {\n return false;\n }\n\n if (!['command', 'transfer'].includes(type)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Handle the upgrade to ws connection\n */\nexport const handleWSUpgrade = (wss: WebSocketServer, ctx: Context, callback: WSCallback) => {\n assertValidHeader(ctx);\n\n wss.handleUpgrade(ctx.req, ctx.request.socket, Buffer.alloc(0), (client, request) => {\n if (!client) {\n // If the WebSocket upgrade failed, destroy the socket to avoid hanging\n ctx.request.socket.destroy();\n return;\n }\n\n disableTimeouts();\n strapi.db.lifecycles.disable();\n strapi.log.info('[Data transfer] Disabling lifecycle hooks');\n\n // Create a connection between the client & the server\n wss.emit('connection', client, ctx.req);\n\n // Invoke the ws callback\n callback(client, request);\n });\n\n ctx.respond = false;\n};\n\n// Protocol related functions\n\nexport const handlerControllerFactory =\n <T extends Partial<Handler>>(implementation: (proto: Handler) => T) =>\n (options: HandlerOptions) => {\n const { verify, server: serverOptions } = options ?? {};\n\n const wss = new WebSocket.Server({ ...serverOptions, noServer: true });\n\n return async (ctx: Context) => {\n const cb: WSCallback = (ws) => {\n const state: TransferState = { id: undefined };\n const messageUUIDs = new Set<string>();\n const diagnostics = createDiagnosticReporter();\n\n const cannotRespondHandler = (err: unknown) => {\n strapi?.log?.error(\n '[Data transfer] Cannot send error response to client, closing connection'\n );\n strapi?.log?.error(err);\n try {\n ws.terminate();\n ctx.req.socket.destroy();\n } catch (err) {\n strapi?.log?.error('[Data transfer] Failed to close socket on error');\n }\n };\n\n const prototype: Handler = {\n // Transfer ID\n get transferID() {\n return state.id;\n },\n\n set transferID(id) {\n state.id = id;\n },\n\n // Started at\n get startedAt() {\n return state.startedAt;\n },\n\n set startedAt(timestamp) {\n state.startedAt = timestamp;\n },\n\n get response() {\n return state.response;\n },\n\n set response(response) {\n state.response = response;\n },\n\n get diagnostics() {\n return diagnostics;\n },\n\n addUUID(uuid) {\n messageUUIDs.add(uuid);\n },\n\n hasUUID(uuid) {\n return messageUUIDs.has(uuid);\n },\n\n isTransferStarted() {\n return this.transferID !== undefined && this.startedAt !== undefined;\n },\n\n assertValidTransfer() {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n throw new Error('Invalid Transfer Process');\n }\n },\n\n assertValidTransferCommand(command: ValidTransferCommand) {\n const isDefined = typeof this[command] === 'function';\n const isValidTransferCommand = VALID_TRANSFER_COMMANDS.includes(command);\n\n if (!isDefined || !isValidTransferCommand) {\n throw new Error('Invalid transfer command');\n }\n },\n\n async respond(uuid, e, data) {\n let details = {};\n return new Promise<void>((resolve, reject) => {\n if (!uuid && !e) {\n reject(new Error('Missing uuid for this message'));\n return;\n }\n\n this.response = {\n uuid,\n data,\n e,\n };\n\n if (e instanceof ProviderError) {\n details = e.details;\n }\n\n const envelope: Record<string, unknown> = {\n uuid,\n data: data ?? null,\n error: e\n ? {\n code: e?.name ?? 'ERR',\n message: e?.message,\n details,\n }\n : null,\n };\n\n const payload = stringifyTransferWebSocketPayload(envelope);\n\n this.send(payload, (error) => (error ? reject(error) : resolve()));\n });\n },\n\n send(message, cb) {\n ws.send(message, cb);\n },\n confirm(message) {\n return new Promise((resolve, reject) => {\n const uuid = randomUUID();\n\n const payload = stringifyTransferWebSocketPayload({ uuid, data: message });\n\n this.send(payload, (error) => {\n if (error) {\n reject(error);\n }\n });\n\n const onResponse = (raw: RawData) => {\n const response = JSON.parse(raw.toString());\n\n if (response.uuid === uuid) {\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n },\n\n async executeAndRespond(uuid, fn) {\n try {\n const response = await fn();\n await this.respond(uuid, null, response);\n } catch (e) {\n if (e instanceof Error) {\n await this.respond(uuid, e).catch(cannotRespondHandler);\n } else if (typeof e === 'string') {\n await this.respond(uuid, new ProviderTransferError(e)).catch(cannotRespondHandler);\n } else {\n await this.respond(\n uuid,\n new ProviderTransferError('Unexpected error', {\n error: e,\n })\n ).catch(cannotRespondHandler);\n }\n }\n },\n\n cleanup() {\n this.transferID = undefined;\n this.startedAt = undefined;\n this.response = undefined;\n },\n\n teardown() {\n this.cleanup();\n },\n\n verifyAuth(scope?: TransferMethod) {\n return verify(ctx, scope);\n },\n\n // Transfer commands\n init() {},\n end() {},\n status() {},\n\n // Default prototype implementation for events\n onMessage() {},\n onError() {},\n onClose() {},\n onInfo() {},\n onWarning() {},\n };\n\n const handler: Handler = Object.assign(Object.create(prototype), implementation(prototype));\n\n // Bind ws events to handler methods\n ws.on('close', async (...args) => {\n try {\n await handler.onClose(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error closing connection');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n } finally {\n resetTimeouts();\n strapi.db.lifecycles.enable();\n strapi.log.info('[Data transfer] Restoring lifecycle hooks');\n }\n });\n ws.on('error', async (...args) => {\n try {\n await handler.onError(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in error handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n ws.on('message', async (...args) => {\n try {\n await handler.onMessage(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in message handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n\n diagnostics.onDiagnostic((diagnostic) => {\n const uuid = randomUUID();\n const payload = JSON.stringify({\n diagnostic,\n uuid,\n });\n\n handler.send(payload);\n });\n };\n\n try {\n handleWSUpgrade(wss, ctx, cb);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Error in websocket upgrade request');\n strapi?.log?.error(err);\n }\n };\n };\n"],"names":["transformUpgradeHeader","header","split","map","s","trim","toLowerCase","timeouts","hasHttpServer","strapi","server","httpServer","disableTimeouts","headersTimeout","requestTimeout","log","info","resetTimeouts","assertValidHeader","ctx","headers","upgrade","upgradeHeader","logSafeUpgradeHeader","JSON","stringify","replace","substring","includes","Error","isDataTransferMessage","message","uuid","type","handleWSUpgrade","wss","callback","handleUpgrade","req","request","socket","Buffer","alloc","client","destroy","db","lifecycles","disable","emit","respond","handlerControllerFactory","implementation","options","verify","serverOptions","WebSocket","Server","noServer","cb","ws","state","id","undefined","messageUUIDs","Set","diagnostics","createDiagnosticReporter","cannotRespondHandler","err","error","terminate","prototype","transferID","startedAt","timestamp","response","addUUID","add","hasUUID","has","isTransferStarted","assertValidTransfer","isStarted","assertValidTransferCommand","command","isDefined","isValidTransferCommand","VALID_TRANSFER_COMMANDS","e","data","details","Promise","resolve","reject","ProviderError","envelope","code","name","payload","stringifyTransferWebSocketPayload","send","confirm","randomUUID","onResponse","raw","parse","toString","once","executeAndRespond","fn","catch","ProviderTransferError","cleanup","teardown","verifyAuth","scope","init","end","status","onMessage","onError","onClose","onInfo","onWarning","handler","Object","assign","create","on","args","enable","onDiagnostic","diagnostic"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../src/strapi/remote/handlers/utils.ts"],"sourcesContent":["import type { IncomingMessage } from 'node:http';\nimport { randomUUID } from 'crypto';\nimport type { Context } from 'koa';\nimport type { RawData, ServerOptions } from 'ws';\nimport { WebSocket, WebSocketServer } from 'ws';\n\nimport type { Handler, TransferState } from './abstract';\nimport type { Protocol } from '../../../../types';\nimport { ProviderError, ProviderTransferError } from '../../../errors/providers';\nimport { VALID_TRANSFER_COMMANDS, ValidTransferCommand } from './constants';\nimport { TransferMethod } from '../constants';\nimport { createDiagnosticReporter } from '../../../utils/diagnostic';\nimport { stringifyTransferWebSocketPayload } from '../../../utils/transfer-websocket-json';\n\ntype WSCallback = (client: WebSocket, request: IncomingMessage) => void;\n\nexport interface HandlerOptions {\n verify: (ctx: Context, scope?: TransferMethod) => Promise<void>;\n server?: ServerOptions;\n}\n\nexport const transformUpgradeHeader = (header = '') => {\n return header.split(',').map((s) => s.trim().toLowerCase());\n};\n\nlet timeouts: Record<string, number> | undefined;\n\nconst hasHttpServer = () => {\n // during server restarts, strapi may not have ever been defined at all, so we have to check it first\n return typeof strapi !== 'undefined' && !!strapi?.server?.httpServer;\n};\n\n// temporarily disable server timeouts while transfer is running\nconst disableTimeouts = () => {\n if (!hasHttpServer()) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n // save the original timeouts to restore after\n if (!timeouts) {\n timeouts = {\n headersTimeout: httpServer.headersTimeout,\n requestTimeout: httpServer.requestTimeout,\n };\n }\n\n httpServer.headersTimeout = 0;\n httpServer.requestTimeout = 0;\n\n strapi.log.info('[Data transfer] Disabling http timeouts');\n};\nconst resetTimeouts = () => {\n if (!hasHttpServer() || !timeouts) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n strapi.log.info('[Data transfer] Restoring http timeouts');\n httpServer.headersTimeout = timeouts.headersTimeout;\n httpServer.requestTimeout = timeouts.requestTimeout;\n};\n/**\n * Make sure that the upgrade header is a valid websocket one\n */\nexport const assertValidHeader = (ctx: Context) => {\n // if it's exactly what we expect, it's fine\n if (ctx.headers.upgrade === 'websocket') {\n return;\n }\n\n // check if it could be an array that still includes websocket\n const upgradeHeader = transformUpgradeHeader(ctx.headers.upgrade);\n\n // Sanitize user input before writing it to our logs\n const logSafeUpgradeHeader = JSON.stringify(ctx.headers.upgrade)\n ?.replace(/[^a-z0-9\\s.,|]/gi, '')\n .substring(0, 50);\n\n if (!upgradeHeader.includes('websocket')) {\n throw new Error(\n `Transfer Upgrade header expected 'websocket', found '${logSafeUpgradeHeader}'. Please ensure that your server or proxy is not modifying the Upgrade header.`\n );\n }\n\n /**\n * If there's more than expected but it still includes websocket, in theory it could still work\n * and could be necessary for their certain configurations, so we'll allow it to proceed but\n * log the unexpected behaviour in case it helps debug an issue\n * */\n strapi.log.info(\n `Transfer Upgrade header expected only 'websocket', found unexpected values: ${logSafeUpgradeHeader}`\n );\n};\n\nexport const isDataTransferMessage = (message: unknown): message is Protocol.Client.Message => {\n if (!message || typeof message !== 'object') {\n return false;\n }\n\n const { uuid, type } = message as Record<string, unknown>;\n\n if (typeof uuid !== 'string' || typeof type !== 'string') {\n return false;\n }\n\n if (!['command', 'transfer'].includes(type)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Handle the upgrade to ws connection\n */\nexport const handleWSUpgrade = (wss: WebSocketServer, ctx: Context, callback: WSCallback) => {\n assertValidHeader(ctx);\n\n wss.handleUpgrade(ctx.req, ctx.request.socket, Buffer.alloc(0), (client, request) => {\n if (!client) {\n // If the WebSocket upgrade failed, destroy the socket to avoid hanging\n ctx.request.socket.destroy();\n return;\n }\n\n disableTimeouts();\n strapi.db.lifecycles.disable();\n strapi.log.info('[Data transfer] Disabling lifecycle hooks');\n\n // Create a connection between the client & the server\n wss.emit('connection', client, ctx.req);\n\n // Invoke the ws callback\n callback(client, request);\n });\n\n ctx.respond = false;\n};\n\n// Protocol related functions\n\nexport const handlerControllerFactory =\n <T extends Partial<Handler>>(implementation: (proto: Handler) => T) =>\n (options: HandlerOptions) => {\n const { verify, server: serverOptions } = options ?? {};\n\n const wss = new WebSocket.Server({ ...serverOptions, noServer: true });\n\n return async (ctx: Context) => {\n const cb: WSCallback = (ws) => {\n const state: TransferState = { id: undefined };\n const messageUUIDs = new Set<string>();\n const diagnostics = createDiagnosticReporter();\n\n const cannotRespondHandler = (err: unknown) => {\n strapi?.log?.error(\n '[Data transfer] Cannot send error response to client, closing connection'\n );\n strapi?.log?.error(err);\n try {\n ws.terminate();\n ctx.req.socket.destroy();\n } catch (err) {\n strapi?.log?.error('[Data transfer] Failed to close socket on error');\n }\n };\n\n const prototype: Handler = {\n // Transfer ID\n get transferID() {\n return state.id;\n },\n\n set transferID(id) {\n state.id = id;\n },\n\n // Started at\n get startedAt() {\n return state.startedAt;\n },\n\n set startedAt(timestamp) {\n state.startedAt = timestamp;\n },\n\n get response() {\n return state.response;\n },\n\n set response(response) {\n state.response = response;\n },\n\n get diagnostics() {\n return diagnostics;\n },\n\n addUUID(uuid) {\n messageUUIDs.add(uuid);\n },\n\n hasUUID(uuid) {\n return messageUUIDs.has(uuid);\n },\n\n isTransferStarted() {\n return this.transferID !== undefined && this.startedAt !== undefined;\n },\n\n assertValidTransfer() {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n throw new Error('Invalid Transfer Process');\n }\n },\n\n assertValidTransferCommand(command: ValidTransferCommand) {\n const isDefined = typeof this[command] === 'function';\n const isValidTransferCommand = VALID_TRANSFER_COMMANDS.includes(command);\n\n if (!isDefined || !isValidTransferCommand) {\n throw new Error('Invalid transfer command');\n }\n },\n\n async respond(uuid, e, data) {\n let details = {};\n return new Promise<void>((resolve, reject) => {\n if (!uuid && !e) {\n reject(new Error('Missing uuid for this message'));\n return;\n }\n\n this.response = {\n uuid,\n data,\n e,\n };\n\n if (e instanceof ProviderError) {\n details = e.details;\n }\n\n const envelope: Record<string, unknown> = {\n uuid,\n data: data ?? null,\n error: e\n ? {\n code: e?.name ?? 'ERR',\n message: e?.message,\n details,\n }\n : null,\n };\n\n const payload = stringifyTransferWebSocketPayload(envelope);\n\n this.send(payload, (error) => (error ? reject(error) : resolve()));\n });\n },\n\n send(message, cb) {\n ws.send(message, cb);\n },\n confirm(message) {\n return new Promise((resolve, reject) => {\n const uuid = randomUUID();\n\n const payload = stringifyTransferWebSocketPayload({ uuid, data: message });\n\n this.send(payload, (error) => {\n if (error) {\n reject(error);\n }\n });\n\n const onResponse = (raw: RawData) => {\n const response = JSON.parse(raw.toString());\n\n if (response.uuid === uuid) {\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n },\n\n async executeAndRespond(uuid, fn) {\n try {\n const response = await fn();\n await this.respond(uuid, null, response);\n } catch (e) {\n if (e instanceof Error) {\n await this.respond(uuid, e).catch(cannotRespondHandler);\n } else if (typeof e === 'string') {\n await this.respond(uuid, new ProviderTransferError(e)).catch(cannotRespondHandler);\n } else {\n await this.respond(\n uuid,\n new ProviderTransferError('Unexpected error', {\n error: e,\n })\n ).catch(cannotRespondHandler);\n }\n }\n },\n\n cleanup() {\n this.transferID = undefined;\n this.startedAt = undefined;\n this.response = undefined;\n },\n\n teardown() {\n this.cleanup();\n },\n\n verifyAuth(scope?: TransferMethod) {\n return verify(ctx, scope);\n },\n\n // Transfer commands\n init() {},\n end() {},\n status() {},\n\n // Default prototype implementation for events\n onMessage() {},\n onError() {},\n onClose() {},\n onInfo() {},\n onWarning() {},\n };\n\n const handler: Handler = Object.assign(Object.create(prototype), implementation(prototype));\n\n // Bind ws events to handler methods\n ws.on('close', async (...args) => {\n try {\n await handler.onClose(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error closing connection');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n } finally {\n resetTimeouts();\n strapi.db.lifecycles.enable();\n strapi.log.info('[Data transfer] Restoring lifecycle hooks');\n }\n });\n ws.on('error', async (...args) => {\n try {\n await handler.onError(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in error handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n ws.on('message', async (...args) => {\n try {\n await handler.onMessage(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in message handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n\n diagnostics.onDiagnostic((diagnostic) => {\n const uuid = randomUUID();\n const payload = JSON.stringify({\n diagnostic,\n uuid,\n });\n\n handler.send(payload);\n });\n };\n\n try {\n handleWSUpgrade(wss, ctx, cb);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Error in websocket upgrade request');\n strapi?.log?.error(err);\n }\n };\n };\n"],"names":["transformUpgradeHeader","header","split","map","s","trim","toLowerCase","timeouts","hasHttpServer","strapi","server","httpServer","disableTimeouts","headersTimeout","requestTimeout","log","info","resetTimeouts","assertValidHeader","ctx","headers","upgrade","upgradeHeader","logSafeUpgradeHeader","JSON","stringify","replace","substring","includes","Error","isDataTransferMessage","message","uuid","type","handleWSUpgrade","wss","callback","handleUpgrade","req","request","socket","Buffer","alloc","client","destroy","db","lifecycles","disable","emit","respond","handlerControllerFactory","implementation","options","verify","serverOptions","WebSocket","Server","noServer","cb","ws","state","id","undefined","messageUUIDs","Set","diagnostics","createDiagnosticReporter","cannotRespondHandler","err","error","terminate","prototype","transferID","startedAt","timestamp","response","addUUID","add","hasUUID","has","isTransferStarted","assertValidTransfer","isStarted","assertValidTransferCommand","command","isDefined","isValidTransferCommand","VALID_TRANSFER_COMMANDS","e","data","details","Promise","resolve","reject","ProviderError","envelope","code","name","payload","stringifyTransferWebSocketPayload","send","confirm","randomUUID","onResponse","raw","parse","toString","once","executeAndRespond","fn","catch","ProviderTransferError","cleanup","teardown","verifyAuth","scope","init","end","status","onMessage","onError","onClose","onInfo","onWarning","handler","Object","assign","create","on","args","enable","onDiagnostic","diagnostic"],"mappings":"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"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../src/strapi/remote/handlers/utils.ts"],"sourcesContent":["import type { IncomingMessage } from 'node:http';\nimport { randomUUID } from 'crypto';\nimport type { Context } from 'koa';\nimport type { RawData, ServerOptions } from 'ws';\nimport { WebSocket, WebSocketServer } from 'ws';\n\nimport type { Handler, TransferState } from './abstract';\nimport type { Protocol } from '../../../types';\nimport { ProviderError, ProviderTransferError } from '../../../errors/providers';\nimport { VALID_TRANSFER_COMMANDS, ValidTransferCommand } from './constants';\nimport { TransferMethod } from '../constants';\nimport { createDiagnosticReporter } from '../../../utils/diagnostic';\nimport { stringifyTransferWebSocketPayload } from '../../../utils/transfer-websocket-json';\n\ntype WSCallback = (client: WebSocket, request: IncomingMessage) => void;\n\nexport interface HandlerOptions {\n verify: (ctx: Context, scope?: TransferMethod) => Promise<void>;\n server?: ServerOptions;\n}\n\nexport const transformUpgradeHeader = (header = '') => {\n return header.split(',').map((s) => s.trim().toLowerCase());\n};\n\nlet timeouts: Record<string, number> | undefined;\n\nconst hasHttpServer = () => {\n // during server restarts, strapi may not have ever been defined at all, so we have to check it first\n return typeof strapi !== 'undefined' && !!strapi?.server?.httpServer;\n};\n\n// temporarily disable server timeouts while transfer is running\nconst disableTimeouts = () => {\n if (!hasHttpServer()) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n // save the original timeouts to restore after\n if (!timeouts) {\n timeouts = {\n headersTimeout: httpServer.headersTimeout,\n requestTimeout: httpServer.requestTimeout,\n };\n }\n\n httpServer.headersTimeout = 0;\n httpServer.requestTimeout = 0;\n\n strapi.log.info('[Data transfer] Disabling http timeouts');\n};\nconst resetTimeouts = () => {\n if (!hasHttpServer() || !timeouts) {\n return;\n }\n\n const { httpServer } = strapi.server;\n\n strapi.log.info('[Data transfer] Restoring http timeouts');\n httpServer.headersTimeout = timeouts.headersTimeout;\n httpServer.requestTimeout = timeouts.requestTimeout;\n};\n/**\n * Make sure that the upgrade header is a valid websocket one\n */\nexport const assertValidHeader = (ctx: Context) => {\n // if it's exactly what we expect, it's fine\n if (ctx.headers.upgrade === 'websocket') {\n return;\n }\n\n // check if it could be an array that still includes websocket\n const upgradeHeader = transformUpgradeHeader(ctx.headers.upgrade);\n\n // Sanitize user input before writing it to our logs\n const logSafeUpgradeHeader = JSON.stringify(ctx.headers.upgrade)\n ?.replace(/[^a-z0-9\\s.,|]/gi, '')\n .substring(0, 50);\n\n if (!upgradeHeader.includes('websocket')) {\n throw new Error(\n `Transfer Upgrade header expected 'websocket', found '${logSafeUpgradeHeader}'. Please ensure that your server or proxy is not modifying the Upgrade header.`\n );\n }\n\n /**\n * If there's more than expected but it still includes websocket, in theory it could still work\n * and could be necessary for their certain configurations, so we'll allow it to proceed but\n * log the unexpected behaviour in case it helps debug an issue\n * */\n strapi.log.info(\n `Transfer Upgrade header expected only 'websocket', found unexpected values: ${logSafeUpgradeHeader}`\n );\n};\n\nexport const isDataTransferMessage = (message: unknown): message is Protocol.Client.Message => {\n if (!message || typeof message !== 'object') {\n return false;\n }\n\n const { uuid, type } = message as Record<string, unknown>;\n\n if (typeof uuid !== 'string' || typeof type !== 'string') {\n return false;\n }\n\n if (!['command', 'transfer'].includes(type)) {\n return false;\n }\n\n return true;\n};\n\n/**\n * Handle the upgrade to ws connection\n */\nexport const handleWSUpgrade = (wss: WebSocketServer, ctx: Context, callback: WSCallback) => {\n assertValidHeader(ctx);\n\n wss.handleUpgrade(ctx.req, ctx.request.socket, Buffer.alloc(0), (client, request) => {\n if (!client) {\n // If the WebSocket upgrade failed, destroy the socket to avoid hanging\n ctx.request.socket.destroy();\n return;\n }\n\n disableTimeouts();\n strapi.db.lifecycles.disable();\n strapi.log.info('[Data transfer] Disabling lifecycle hooks');\n\n // Create a connection between the client & the server\n wss.emit('connection', client, ctx.req);\n\n // Invoke the ws callback\n callback(client, request);\n });\n\n ctx.respond = false;\n};\n\n// Protocol related functions\n\nexport const handlerControllerFactory =\n <T extends Partial<Handler>>(implementation: (proto: Handler) => T) =>\n (options: HandlerOptions) => {\n const { verify, server: serverOptions } = options ?? {};\n\n const wss = new WebSocket.Server({ ...serverOptions, noServer: true });\n\n return async (ctx: Context) => {\n const cb: WSCallback = (ws) => {\n const state: TransferState = { id: undefined };\n const messageUUIDs = new Set<string>();\n const diagnostics = createDiagnosticReporter();\n\n const cannotRespondHandler = (err: unknown) => {\n strapi?.log?.error(\n '[Data transfer] Cannot send error response to client, closing connection'\n );\n strapi?.log?.error(err);\n try {\n ws.terminate();\n ctx.req.socket.destroy();\n } catch (err) {\n strapi?.log?.error('[Data transfer] Failed to close socket on error');\n }\n };\n\n const prototype: Handler = {\n // Transfer ID\n get transferID() {\n return state.id;\n },\n\n set transferID(id) {\n state.id = id;\n },\n\n // Started at\n get startedAt() {\n return state.startedAt;\n },\n\n set startedAt(timestamp) {\n state.startedAt = timestamp;\n },\n\n get response() {\n return state.response;\n },\n\n set response(response) {\n state.response = response;\n },\n\n get diagnostics() {\n return diagnostics;\n },\n\n addUUID(uuid) {\n messageUUIDs.add(uuid);\n },\n\n hasUUID(uuid) {\n return messageUUIDs.has(uuid);\n },\n\n isTransferStarted() {\n return this.transferID !== undefined && this.startedAt !== undefined;\n },\n\n assertValidTransfer() {\n const isStarted = this.isTransferStarted();\n\n if (!isStarted) {\n throw new Error('Invalid Transfer Process');\n }\n },\n\n assertValidTransferCommand(command: ValidTransferCommand) {\n const isDefined = typeof this[command] === 'function';\n const isValidTransferCommand = VALID_TRANSFER_COMMANDS.includes(command);\n\n if (!isDefined || !isValidTransferCommand) {\n throw new Error('Invalid transfer command');\n }\n },\n\n async respond(uuid, e, data) {\n let details = {};\n return new Promise<void>((resolve, reject) => {\n if (!uuid && !e) {\n reject(new Error('Missing uuid for this message'));\n return;\n }\n\n this.response = {\n uuid,\n data,\n e,\n };\n\n if (e instanceof ProviderError) {\n details = e.details;\n }\n\n const envelope: Record<string, unknown> = {\n uuid,\n data: data ?? null,\n error: e\n ? {\n code: e?.name ?? 'ERR',\n message: e?.message,\n details,\n }\n : null,\n };\n\n const payload = stringifyTransferWebSocketPayload(envelope);\n\n this.send(payload, (error) => (error ? reject(error) : resolve()));\n });\n },\n\n send(message, cb) {\n ws.send(message, cb);\n },\n confirm(message) {\n return new Promise((resolve, reject) => {\n const uuid = randomUUID();\n\n const payload = stringifyTransferWebSocketPayload({ uuid, data: message });\n\n this.send(payload, (error) => {\n if (error) {\n reject(error);\n }\n });\n\n const onResponse = (raw: RawData) => {\n const response = JSON.parse(raw.toString());\n\n if (response.uuid === uuid) {\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n },\n\n async executeAndRespond(uuid, fn) {\n try {\n const response = await fn();\n await this.respond(uuid, null, response);\n } catch (e) {\n if (e instanceof Error) {\n await this.respond(uuid, e).catch(cannotRespondHandler);\n } else if (typeof e === 'string') {\n await this.respond(uuid, new ProviderTransferError(e)).catch(cannotRespondHandler);\n } else {\n await this.respond(\n uuid,\n new ProviderTransferError('Unexpected error', {\n error: e,\n })\n ).catch(cannotRespondHandler);\n }\n }\n },\n\n cleanup() {\n this.transferID = undefined;\n this.startedAt = undefined;\n this.response = undefined;\n },\n\n teardown() {\n this.cleanup();\n },\n\n verifyAuth(scope?: TransferMethod) {\n return verify(ctx, scope);\n },\n\n // Transfer commands\n init() {},\n end() {},\n status() {},\n\n // Default prototype implementation for events\n onMessage() {},\n onError() {},\n onClose() {},\n onInfo() {},\n onWarning() {},\n };\n\n const handler: Handler = Object.assign(Object.create(prototype), implementation(prototype));\n\n // Bind ws events to handler methods\n ws.on('close', async (...args) => {\n try {\n await handler.onClose(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error closing connection');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n } finally {\n resetTimeouts();\n strapi.db.lifecycles.enable();\n strapi.log.info('[Data transfer] Restoring lifecycle hooks');\n }\n });\n ws.on('error', async (...args) => {\n try {\n await handler.onError(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in error handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n ws.on('message', async (...args) => {\n try {\n await handler.onMessage(...args);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Uncaught error in message handling');\n strapi?.log?.error(err);\n cannotRespondHandler(err);\n }\n });\n\n diagnostics.onDiagnostic((diagnostic) => {\n const uuid = randomUUID();\n const payload = JSON.stringify({\n diagnostic,\n uuid,\n });\n\n handler.send(payload);\n });\n };\n\n try {\n handleWSUpgrade(wss, ctx, cb);\n } catch (err) {\n strapi?.log?.error('[Data transfer] Error in websocket upgrade request');\n strapi?.log?.error(err);\n }\n };\n };\n"],"names":["transformUpgradeHeader","header","split","map","s","trim","toLowerCase","timeouts","hasHttpServer","strapi","server","httpServer","disableTimeouts","headersTimeout","requestTimeout","log","info","resetTimeouts","assertValidHeader","ctx","headers","upgrade","upgradeHeader","logSafeUpgradeHeader","JSON","stringify","replace","substring","includes","Error","isDataTransferMessage","message","uuid","type","handleWSUpgrade","wss","callback","handleUpgrade","req","request","socket","Buffer","alloc","client","destroy","db","lifecycles","disable","emit","respond","handlerControllerFactory","implementation","options","verify","serverOptions","WebSocket","Server","noServer","cb","ws","state","id","undefined","messageUUIDs","Set","diagnostics","createDiagnosticReporter","cannotRespondHandler","err","error","terminate","prototype","transferID","startedAt","timestamp","response","addUUID","add","hasUUID","has","isTransferStarted","assertValidTransfer","isStarted","assertValidTransferCommand","command","isDefined","isValidTransferCommand","VALID_TRANSFER_COMMANDS","e","data","details","Promise","resolve","reject","ProviderError","envelope","code","name","payload","stringifyTransferWebSocketPayload","send","confirm","randomUUID","onResponse","raw","parse","toString","once","executeAndRespond","fn","catch","ProviderTransferError","cleanup","teardown","verifyAuth","scope","init","end","status","onMessage","onError","onClose","onInfo","onWarning","handler","Object","assign","create","on","args","enable","onDiagnostic","diagnostic"],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import type { Readable } from 'stream';
5
+ import type { Schema, Data, UID } from '@strapi/types';
6
+ export interface IMetadata {
7
+ strapi?: {
8
+ version?: string;
9
+ };
10
+ createdAt?: string;
11
+ }
12
+ /**
13
+ * Common TransferEngine format to represent a Strapi entity
14
+ * @template T The schema UID this entity represents
15
+ */
16
+ export interface IEntity<T extends UID.ContentType = UID.ContentType> {
17
+ /**
18
+ * UID of the parent type (content-type, component, etc...)
19
+ */
20
+ type: T;
21
+ /**
22
+ * Reference of the entity.
23
+ * Might be deprecated and replaced by a "ref" or "reference" property in the future
24
+ */
25
+ id: number;
26
+ /**
27
+ * The entity data (attributes value)
28
+ */
29
+ data: Data.Entity<T>;
30
+ }
31
+ /**
32
+ * Union type that regroups all the different kinds of link
33
+ */
34
+ export type ILink = IBasicLink | IMorphLink | ICircularLink;
35
+ /**
36
+ * Default generic link structure
37
+ */
38
+ interface IDefaultLink {
39
+ /**
40
+ * The link type
41
+ * (useful for providers (destination) to adapt the logic following what kind of link is processed)
42
+ */
43
+ kind: string;
44
+ /**
45
+ * The relation type
46
+ */
47
+ relation: Schema.Attribute.RelationKind.Any;
48
+ /**
49
+ * Left side of the link
50
+ * It should hold information about the entity that owns the dominant side of the link
51
+ */
52
+ left: {
53
+ /**
54
+ * Entity UID
55
+ * (restricted to content type)
56
+ */
57
+ type: string;
58
+ /**
59
+ * Reference ID of the entity
60
+ */
61
+ ref: number;
62
+ /**
63
+ * Field used to hold the link in the entity
64
+ */
65
+ field: string;
66
+ /**
67
+ * If the link is part of a collection, keep its position here
68
+ */
69
+ pos?: number;
70
+ };
71
+ /**
72
+ * Right side of the link
73
+ * It should hold information about the entity attached to the left side of the link
74
+ */
75
+ right: {
76
+ /**
77
+ * Entity UID
78
+ * (can be a content type or a component)
79
+ */
80
+ type: string;
81
+ /**
82
+ * Reference ID of the entity
83
+ */
84
+ ref: number;
85
+ /**
86
+ * Field used to hold the link in the entity
87
+ */
88
+ field?: string;
89
+ /**
90
+ * If the link is part of a collection, keep its position here
91
+ */
92
+ pos?: number;
93
+ };
94
+ }
95
+ /**
96
+ * Basic link between two content type entities
97
+ */
98
+ interface IBasicLink extends IDefaultLink {
99
+ kind: 'relation.basic';
100
+ }
101
+ /**
102
+ * Polymorphic link (one source content type to multiple different content types)
103
+ */
104
+ interface IMorphLink extends IDefaultLink {
105
+ kind: 'relation.morph';
106
+ }
107
+ /**
108
+ * Regular link with the left and right sides having the save content-type
109
+ */
110
+ interface ICircularLink extends IDefaultLink {
111
+ kind: 'relation.circular';
112
+ }
113
+ /**
114
+ * Strapi configurations
115
+ */
116
+ export interface IConfiguration<T = unknown> {
117
+ type: 'core-store' | 'webhook';
118
+ value: T;
119
+ }
120
+ export interface IFile {
121
+ id: number;
122
+ name: string;
123
+ alternativeText?: string;
124
+ caption?: string;
125
+ width?: number;
126
+ height?: number;
127
+ formats?: Record<string, IFile>;
128
+ hash: string;
129
+ ext?: string;
130
+ mime: string;
131
+ size: number;
132
+ url: string;
133
+ previewUrl?: string;
134
+ path?: string;
135
+ provider?: string;
136
+ provider_metadata?: Record<string, unknown>;
137
+ type?: string;
138
+ mainHash?: string;
139
+ }
140
+ export interface IAsset {
141
+ filename: string;
142
+ filepath: string;
143
+ stream: Readable;
144
+ stats: IAssetStats;
145
+ metadata: IFile;
146
+ buffer?: Buffer;
147
+ }
148
+ export interface IAssetStats {
149
+ size: number;
150
+ }
151
+ export {};
152
+ //# sourceMappingURL=common-entities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-entities.d.ts","sourceRoot":"","sources":["../../src/types/common-entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import type { Cipheriv, Decipheriv } from 'crypto';
3
+ export type EncryptionStrategy = (key: string) => Cipheriv | Decipheriv;
4
+ export type Strategies = {
5
+ 'aes-128-ecb': (key: string) => Cipheriv | Decipheriv;
6
+ aes128: (key: string) => Cipheriv | Decipheriv;
7
+ aes192: (key: string) => Cipheriv | Decipheriv;
8
+ aes256: (key: string) => Cipheriv | Decipheriv;
9
+ };
10
+ export type Algorithm = 'aes-128-ecb' | 'aes128' | 'aes192' | 'aes256';
11
+ //# sourceMappingURL=encryption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/types/encryption.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEnD,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC;AAExE,MAAM,MAAM,UAAU,GAAG;IACvB,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC;IACtD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC;IAC/C,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,GAAG,UAAU,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './common-entities';
2
+ export * from './providers';
3
+ export * from './transfer-engine';
4
+ export * from './utils';
5
+ export * from './encryption';
6
+ export * from './remote';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC"}
@@ -0,0 +1,50 @@
1
+ /// <reference types="node" />
2
+ import type { Readable, Writable } from 'stream';
3
+ import type { Struct } from '@strapi/types';
4
+ import type { IDestinationProviderTransferResults, IProviderTransferResults, ISourceProviderTransferResults, MaybePromise, StageTotalsEstimate, TransferStage } from './utils';
5
+ import type { IMetadata } from './common-entities';
6
+ import type { IDiagnosticReporter } from '../utils/diagnostic';
7
+ export type ProviderType = 'source' | 'destination';
8
+ export interface IProvider {
9
+ type: ProviderType;
10
+ name: string;
11
+ results?: IProviderTransferResults;
12
+ /**
13
+ * bootstrap() is called during transfer engine bootstrap
14
+ * It is used for initialization operations such as making a database connection, opening a file, checking authorization, etc
15
+ */
16
+ bootstrap?(diagnostics?: IDiagnosticReporter): MaybePromise<void>;
17
+ close?(): MaybePromise<void>;
18
+ getMetadata(): MaybePromise<IMetadata | null>;
19
+ getSchemas?(): MaybePromise<Record<string, Struct.Schema> | null>;
20
+ beforeTransfer?(): MaybePromise<void>;
21
+ }
22
+ export interface ISourceProvider extends IProvider {
23
+ results?: ISourceProviderTransferResults;
24
+ /**
25
+ * Optional totals for a stage. Called by the engine after the stage read stream is created and before `stage::start`.
26
+ * Used for CLI progress (e.g. bytes/count remaining, ETA). Omit or return null when unknown (older remotes, file providers).
27
+ */
28
+ getStageTotals?(stage: TransferStage): MaybePromise<StageTotalsEstimate | null | undefined>;
29
+ createEntitiesReadStream?(): MaybePromise<Readable>;
30
+ createLinksReadStream?(): MaybePromise<Readable>;
31
+ createAssetsReadStream?(): MaybePromise<Readable>;
32
+ createConfigurationReadStream?(): MaybePromise<Readable>;
33
+ createSchemasReadStream?(): MaybePromise<Readable>;
34
+ }
35
+ export interface IDestinationProvider extends IProvider {
36
+ results?: IDestinationProviderTransferResults;
37
+ /**
38
+ * Optional rollback implementation
39
+ * Called when an error is thrown during a transfer to allow rollback operations to be performed
40
+ */
41
+ rollback?<T extends Error = Error>(e: T): MaybePromise<void>;
42
+ setMetadata?(target: ProviderType, metadata: IMetadata): IDestinationProvider;
43
+ onWarning?: (message: string) => void;
44
+ createEntitiesWriteStream?(): MaybePromise<Writable>;
45
+ createLinksWriteStream?(): MaybePromise<Writable>;
46
+ createAssetsWriteStream?(): MaybePromise<Writable>;
47
+ createConfigurationWriteStream?(): MaybePromise<Writable>;
48
+ createSchemasWriteStream?(): MaybePromise<Writable>;
49
+ }
50
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/types/providers.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EACV,mCAAmC,EACnC,wBAAwB,EACxB,8BAA8B,EAC9B,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC;;;OAGG;IACH,SAAS,CAAC,CAAC,WAAW,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAE7B,WAAW,IAAI,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAElE,cAAc,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,eAAgB,SAAQ,SAAS;IAChD,OAAO,CAAC,EAAE,8BAA8B,CAAC;IAEzC;;;OAGG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,YAAY,CAAC,mBAAmB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IAE5F,wBAAwB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpD,qBAAqB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACjD,sBAAsB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClD,6BAA6B,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzD,uBAAuB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,oBAAqB,SAAQ,SAAS;IACrD,OAAO,CAAC,EAAE,mCAAmC,CAAC;IAE9C;;;OAGG;IACH,QAAQ,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAE7D,WAAW,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,GAAG,oBAAoB,CAAC;IAC9E,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,yBAAyB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACrD,sBAAsB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClD,uBAAuB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnD,8BAA8B,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1D,wBAAwB,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;CACrD"}
@@ -0,0 +1,2 @@
1
+ export * as Protocol from './protocol';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/remote/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface ITransferTokenAuth {
2
+ type: 'token';
3
+ token: string;
4
+ }
5
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/types/remote/protocol/auth.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,37 @@
1
+ import type { ILocalStrapiDestinationProviderOptions } from '../../../../strapi/providers';
2
+ import type { TransferMethod } from '../../../../strapi/remote/constants';
3
+ export type CommandMessage = {
4
+ type: 'command';
5
+ } & (InitCommand | EndCommand | StatusCommand);
6
+ export type Command = CommandMessage['command'];
7
+ export type GetCommandParams<T extends Command> = {
8
+ [key in Command]: {
9
+ command: key;
10
+ } & CommandMessage;
11
+ }[T] extends {
12
+ params: infer U;
13
+ } ? U : never;
14
+ export type InitCommand = CreateCommand<'init', {
15
+ options?: Pick<ILocalStrapiDestinationProviderOptions, 'strategy' | 'restore'>;
16
+ transfer: TransferMethod;
17
+ checksums?: boolean;
18
+ /**
19
+ * Opt-in request for the compact base64 asset-chunk wire format. Remotes that understand it
20
+ * echo it back in {@link InitMessage}; older remotes ignore it and the client falls back to
21
+ * the legacy `{ type: 'Buffer', data: number[] }` shape they can still decode.
22
+ */
23
+ assetEncoding?: 'base64';
24
+ }>;
25
+ export type TransferKind = InitCommand['params']['transfer'];
26
+ export type EndCommand = CreateCommand<'end', {
27
+ transferID: string;
28
+ }>;
29
+ export type StatusCommand = CreateCommand<'status'>;
30
+ type CreateCommand<T extends string, U extends Record<string, unknown> = never> = {
31
+ type: 'command';
32
+ command: T;
33
+ } & ([U] extends [never] ? unknown : {
34
+ params: U;
35
+ });
36
+ export {};
37
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../../../src/types/remote/protocol/client/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG,CAAC,WAAW,GAAG,UAAU,GAAG,aAAa,CAAC,CAAC;AAE9F,MAAM,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;AAEhD,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,OAAO,IAAI;KAC/C,GAAG,IAAI,OAAO,GAAG;QAAE,OAAO,EAAE,GAAG,CAAA;KAAE,GAAG,cAAc;CACpD,CAAC,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5B,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,WAAW,GAAG,aAAa,CACrC,MAAM,EACN;IACE,OAAO,CAAC,EAAE,IAAI,CAAC,sCAAsC,EAAE,UAAU,GAAG,SAAS,CAAC,CAAC;IAC/E,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC1B,CACF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC;AAE7D,MAAM,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEtE,MAAM,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AAEpD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,IAAI;IAChF,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,CAAC,CAAC;CACZ,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG;IAAE,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CommandMessage } from './commands';
2
+ import type { TransferMessage } from './transfer';
3
+ export * from './commands';
4
+ export * from './transfer';
5
+ export type Message = {
6
+ uuid: string;
7
+ } & (CommandMessage | TransferMessage);
8
+ export type MessageType = Message['type'];
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/types/remote/protocol/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC;AAC5E,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CreateTransferMessage } from './utils';
2
+ export type Action = CreateTransferMessage<'action', {
3
+ action: string;
4
+ }>;
5
+ //# sourceMappingURL=action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../../../../src/types/remote/protocol/client/transfer/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Action } from './action';
2
+ import type { TransferPullMessage } from './pull';
3
+ import type { TransferPushMessage } from './push';
4
+ export * from './action';
5
+ export * from './pull';
6
+ export * from './push';
7
+ export * from './utils';
8
+ export type TransferMessage = {
9
+ type: 'transfer';
10
+ transferID: string;
11
+ } & (Action | TransferPushMessage | TransferPullMessage);
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/types/remote/protocol/client/transfer/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAElD,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,CACrE,MAAM,GACN,mBAAmB,GACnB,mBAAmB,CACtB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { IEntity, ILink, IConfiguration } from '../../../../common-entities';
2
+ import { CreateTransferMessage, TransferAssetFlow } from './utils';
3
+ export type TransferPullMessage = CreateTransferMessage<'step', TransferStepCommands<'entities', IEntity[]> | TransferStepCommands<'links', ILink[]> | TransferStepCommands<'configuration', IConfiguration[]> | TransferStepCommands<'assets', TransferAssetFlow[]>>;
4
+ export type TransferPullStep = TransferPullMessage['step'];
5
+ export type GetTransferPullStreamData<T extends TransferPullStep> = {
6
+ [key in TransferPullStep]: {
7
+ action: 'stream';
8
+ step: key;
9
+ } & TransferPullMessage;
10
+ }[T] extends {
11
+ data: infer U;
12
+ } ? U : never;
13
+ type TransferStepCommands<T extends string, U> = {
14
+ step: T;
15
+ } & TransferStepFlow<U>;
16
+ type TransferStepFlow<U> = {
17
+ action: 'start';
18
+ } | {
19
+ action: 'stream';
20
+ data: U;
21
+ } | {
22
+ action: 'end';
23
+ };
24
+ export {};
25
+ //# sourceMappingURL=pull.d.ts.map