@strapi/data-transfer 5.12.1 → 5.12.2

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 (213) hide show
  1. package/dist/engine/errors.js +39 -0
  2. package/dist/engine/errors.js.map +1 -0
  3. package/dist/engine/errors.mjs +34 -0
  4. package/dist/engine/errors.mjs.map +1 -0
  5. package/dist/engine/index.js +797 -0
  6. package/dist/engine/index.js.map +1 -0
  7. package/dist/engine/index.mjs +792 -0
  8. package/dist/engine/index.mjs.map +1 -0
  9. package/dist/engine/validation/provider.js +19 -0
  10. package/dist/engine/validation/provider.js.map +1 -0
  11. package/dist/engine/validation/provider.mjs +17 -0
  12. package/dist/engine/validation/provider.mjs.map +1 -0
  13. package/dist/engine/validation/schemas/index.js +57 -0
  14. package/dist/engine/validation/schemas/index.js.map +1 -0
  15. package/dist/engine/validation/schemas/index.mjs +55 -0
  16. package/dist/engine/validation/schemas/index.mjs.map +1 -0
  17. package/dist/errors/base.js +13 -0
  18. package/dist/errors/base.js.map +1 -0
  19. package/dist/errors/base.mjs +11 -0
  20. package/dist/errors/base.mjs.map +1 -0
  21. package/dist/errors/constants.js +10 -0
  22. package/dist/errors/constants.js.map +1 -0
  23. package/dist/errors/constants.mjs +8 -0
  24. package/dist/errors/constants.mjs.map +1 -0
  25. package/dist/errors/providers.js +41 -0
  26. package/dist/errors/providers.js.map +1 -0
  27. package/dist/errors/providers.mjs +36 -0
  28. package/dist/errors/providers.mjs.map +1 -0
  29. package/dist/file/index.js +8 -0
  30. package/dist/file/index.js.map +1 -0
  31. package/dist/file/index.mjs +3 -0
  32. package/dist/file/index.mjs.map +1 -0
  33. package/dist/file/providers/destination/index.js +248 -0
  34. package/dist/file/providers/destination/index.js.map +1 -0
  35. package/dist/file/providers/destination/index.mjs +246 -0
  36. package/dist/file/providers/destination/index.mjs.map +1 -0
  37. package/dist/file/providers/destination/utils.js +63 -0
  38. package/dist/file/providers/destination/utils.js.map +1 -0
  39. package/dist/file/providers/destination/utils.mjs +60 -0
  40. package/dist/file/providers/destination/utils.mjs.map +1 -0
  41. package/dist/file/providers/index.js +10 -0
  42. package/dist/file/providers/index.js.map +1 -0
  43. package/dist/file/providers/index.mjs +3 -0
  44. package/dist/file/providers/index.mjs.map +1 -0
  45. package/dist/file/providers/source/index.js +288 -0
  46. package/dist/file/providers/source/index.js.map +1 -0
  47. package/dist/file/providers/source/index.mjs +286 -0
  48. package/dist/file/providers/source/index.mjs.map +1 -0
  49. package/dist/file/providers/source/utils.js +56 -0
  50. package/dist/file/providers/source/utils.js.map +1 -0
  51. package/dist/file/providers/source/utils.mjs +52 -0
  52. package/dist/file/providers/source/utils.mjs.map +1 -0
  53. package/dist/index.js +8 -5692
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.mjs +8 -5674
  56. package/dist/index.mjs.map +1 -1
  57. package/dist/strapi/index.js +12 -0
  58. package/dist/strapi/index.js.map +1 -0
  59. package/dist/strapi/index.mjs +7 -0
  60. package/dist/strapi/index.mjs.map +1 -0
  61. package/dist/strapi/providers/index.js +16 -0
  62. package/dist/strapi/providers/index.js.map +1 -0
  63. package/dist/strapi/providers/index.mjs +7 -0
  64. package/dist/strapi/providers/index.mjs.map +1 -0
  65. package/dist/strapi/providers/local-destination/index.js +419 -0
  66. package/dist/strapi/providers/local-destination/index.js.map +1 -0
  67. package/dist/strapi/providers/local-destination/index.mjs +396 -0
  68. package/dist/strapi/providers/local-destination/index.mjs.map +1 -0
  69. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js +52 -0
  70. package/dist/strapi/providers/local-destination/strategies/restore/configuration.js.map +1 -0
  71. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs +49 -0
  72. package/dist/strapi/providers/local-destination/strategies/restore/configuration.mjs.map +1 -0
  73. package/dist/strapi/providers/local-destination/strategies/restore/entities.js +64 -0
  74. package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -0
  75. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +62 -0
  76. package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -0
  77. package/dist/strapi/providers/local-destination/strategies/restore/index.js +126 -0
  78. package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -0
  79. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +122 -0
  80. package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -0
  81. package/dist/strapi/providers/local-destination/strategies/restore/links.js +60 -0
  82. package/dist/strapi/providers/local-destination/strategies/restore/links.js.map +1 -0
  83. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs +58 -0
  84. package/dist/strapi/providers/local-destination/strategies/restore/links.mjs.map +1 -0
  85. package/dist/strapi/providers/local-source/assets.js +123 -0
  86. package/dist/strapi/providers/local-source/assets.js.map +1 -0
  87. package/dist/strapi/providers/local-source/assets.mjs +121 -0
  88. package/dist/strapi/providers/local-source/assets.mjs.map +1 -0
  89. package/dist/strapi/providers/local-source/configuration.js +39 -0
  90. package/dist/strapi/providers/local-source/configuration.js.map +1 -0
  91. package/dist/strapi/providers/local-source/configuration.mjs +37 -0
  92. package/dist/strapi/providers/local-source/configuration.mjs.map +1 -0
  93. package/dist/strapi/providers/local-source/entities.js +62 -0
  94. package/dist/strapi/providers/local-source/entities.js.map +1 -0
  95. package/dist/strapi/providers/local-source/entities.mjs +59 -0
  96. package/dist/strapi/providers/local-source/entities.mjs.map +1 -0
  97. package/dist/strapi/providers/local-source/index.js +154 -0
  98. package/dist/strapi/providers/local-source/index.js.map +1 -0
  99. package/dist/strapi/providers/local-source/index.mjs +152 -0
  100. package/dist/strapi/providers/local-source/index.mjs.map +1 -0
  101. package/dist/strapi/providers/local-source/links.js +26 -0
  102. package/dist/strapi/providers/local-source/links.js.map +1 -0
  103. package/dist/strapi/providers/local-source/links.mjs +24 -0
  104. package/dist/strapi/providers/local-source/links.mjs.map +1 -0
  105. package/dist/strapi/providers/remote-destination/index.js +392 -0
  106. package/dist/strapi/providers/remote-destination/index.js.map +1 -0
  107. package/dist/strapi/providers/remote-destination/index.mjs +390 -0
  108. package/dist/strapi/providers/remote-destination/index.mjs.map +1 -0
  109. package/dist/strapi/providers/remote-source/index.js +405 -0
  110. package/dist/strapi/providers/remote-source/index.js.map +1 -0
  111. package/dist/strapi/providers/remote-source/index.mjs +403 -0
  112. package/dist/strapi/providers/remote-source/index.mjs.map +1 -0
  113. package/dist/strapi/providers/utils.js +173 -0
  114. package/dist/strapi/providers/utils.js.map +1 -0
  115. package/dist/strapi/providers/utils.mjs +169 -0
  116. package/dist/strapi/providers/utils.mjs.map +1 -0
  117. package/dist/strapi/queries/entity.js +125 -0
  118. package/dist/strapi/queries/entity.js.map +1 -0
  119. package/dist/strapi/queries/entity.mjs +123 -0
  120. package/dist/strapi/queries/entity.mjs.map +1 -0
  121. package/dist/strapi/queries/index.js +10 -0
  122. package/dist/strapi/queries/index.js.map +1 -0
  123. package/dist/strapi/queries/index.mjs +5 -0
  124. package/dist/strapi/queries/index.mjs.map +1 -0
  125. package/dist/strapi/queries/link.js +298 -0
  126. package/dist/strapi/queries/link.js.map +1 -0
  127. package/dist/strapi/queries/link.mjs +295 -0
  128. package/dist/strapi/queries/link.mjs.map +1 -0
  129. package/dist/strapi/remote/constants.js +11 -0
  130. package/dist/strapi/remote/constants.js.map +1 -0
  131. package/dist/strapi/remote/constants.mjs +8 -0
  132. package/dist/strapi/remote/constants.mjs.map +1 -0
  133. package/dist/strapi/remote/flows/default.js +43 -0
  134. package/dist/strapi/remote/flows/default.js.map +1 -0
  135. package/dist/strapi/remote/flows/default.mjs +41 -0
  136. package/dist/strapi/remote/flows/default.mjs.map +1 -0
  137. package/dist/strapi/remote/flows/index.js +54 -0
  138. package/dist/strapi/remote/flows/index.js.map +1 -0
  139. package/dist/strapi/remote/flows/index.mjs +52 -0
  140. package/dist/strapi/remote/flows/index.mjs.map +1 -0
  141. package/dist/strapi/remote/handlers/constants.js +10 -0
  142. package/dist/strapi/remote/handlers/constants.js.map +1 -0
  143. package/dist/strapi/remote/handlers/constants.mjs +8 -0
  144. package/dist/strapi/remote/handlers/constants.mjs.map +1 -0
  145. package/dist/strapi/remote/handlers/index.js +12 -0
  146. package/dist/strapi/remote/handlers/index.js.map +1 -0
  147. package/dist/strapi/remote/handlers/index.mjs +4 -0
  148. package/dist/strapi/remote/handlers/index.mjs.map +1 -0
  149. package/dist/strapi/remote/handlers/pull.js +348 -0
  150. package/dist/strapi/remote/handlers/pull.js.map +1 -0
  151. package/dist/strapi/remote/handlers/pull.mjs +346 -0
  152. package/dist/strapi/remote/handlers/pull.mjs.map +1 -0
  153. package/dist/strapi/remote/handlers/push.js +400 -0
  154. package/dist/strapi/remote/handlers/push.js.map +1 -0
  155. package/dist/strapi/remote/handlers/push.mjs +398 -0
  156. package/dist/strapi/remote/handlers/push.mjs.map +1 -0
  157. package/dist/strapi/remote/handlers/utils.js +316 -0
  158. package/dist/strapi/remote/handlers/utils.js.map +1 -0
  159. package/dist/strapi/remote/handlers/utils.mjs +310 -0
  160. package/dist/strapi/remote/handlers/utils.mjs.map +1 -0
  161. package/dist/strapi/remote/index.js +10 -0
  162. package/dist/strapi/remote/index.js.map +1 -0
  163. package/dist/strapi/remote/index.mjs +5 -0
  164. package/dist/strapi/remote/index.mjs.map +1 -0
  165. package/dist/utils/components.js +178 -0
  166. package/dist/utils/components.js.map +1 -0
  167. package/dist/utils/components.mjs +171 -0
  168. package/dist/utils/components.mjs.map +1 -0
  169. package/dist/utils/diagnostic.js +51 -0
  170. package/dist/utils/diagnostic.js.map +1 -0
  171. package/dist/utils/diagnostic.mjs +49 -0
  172. package/dist/utils/diagnostic.mjs.map +1 -0
  173. package/dist/utils/encryption/decrypt.js +47 -0
  174. package/dist/utils/encryption/decrypt.js.map +1 -0
  175. package/dist/utils/encryption/decrypt.mjs +45 -0
  176. package/dist/utils/encryption/decrypt.mjs.map +1 -0
  177. package/dist/utils/encryption/encrypt.js +47 -0
  178. package/dist/utils/encryption/encrypt.js.map +1 -0
  179. package/dist/utils/encryption/encrypt.mjs +45 -0
  180. package/dist/utils/encryption/encrypt.mjs.map +1 -0
  181. package/dist/utils/encryption/index.js +10 -0
  182. package/dist/utils/encryption/index.js.map +1 -0
  183. package/dist/utils/encryption/index.mjs +3 -0
  184. package/dist/utils/encryption/index.mjs.map +1 -0
  185. package/dist/utils/index.js +20 -0
  186. package/dist/utils/index.js.map +1 -0
  187. package/dist/utils/index.mjs +15 -0
  188. package/dist/utils/index.mjs.map +1 -0
  189. package/dist/utils/json.js +96 -0
  190. package/dist/utils/json.js.map +1 -0
  191. package/dist/utils/json.mjs +94 -0
  192. package/dist/utils/json.mjs.map +1 -0
  193. package/dist/utils/middleware.js +14 -0
  194. package/dist/utils/middleware.js.map +1 -0
  195. package/dist/utils/middleware.mjs +12 -0
  196. package/dist/utils/middleware.mjs.map +1 -0
  197. package/dist/utils/providers.js +12 -0
  198. package/dist/utils/providers.js.map +1 -0
  199. package/dist/utils/providers.mjs +10 -0
  200. package/dist/utils/providers.mjs.map +1 -0
  201. package/dist/utils/schema.js +32 -0
  202. package/dist/utils/schema.js.map +1 -0
  203. package/dist/utils/schema.mjs +29 -0
  204. package/dist/utils/schema.mjs.map +1 -0
  205. package/dist/utils/stream.js +59 -0
  206. package/dist/utils/stream.js.map +1 -0
  207. package/dist/utils/stream.mjs +55 -0
  208. package/dist/utils/stream.mjs.map +1 -0
  209. package/dist/utils/transaction.js +93 -0
  210. package/dist/utils/transaction.js.map +1 -0
  211. package/dist/utils/transaction.mjs +91 -0
  212. package/dist/utils/transaction.mjs.map +1 -0
  213. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../src/strapi/providers/utils.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { RawData, WebSocket } from 'ws';\n\nimport type { Client, Server } from '../../../types/remote/protocol';\n\nimport {\n ProviderError,\n ProviderTransferError,\n ProviderInitializationError,\n ProviderValidationError,\n ProviderErrorDetails,\n} from '../../errors/providers';\nimport { IDiagnosticReporter } from '../../utils/diagnostic';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions = {\n retryMessageMaxRetries: 5,\n retryMessageTimeout: 30000,\n },\n reportInfo?: (message: string) => void\n) => {\n const state: IDispatcherState = {};\n\n type DispatchMessage = Dispatch<Client.Message>;\n\n const dispatch = async <U = null>(\n message: DispatchMessage,\n options: IDispatchOptions = {}\n ): Promise<U | null> => {\n if (!ws) {\n throw new Error('No websocket connection found');\n }\n\n return new Promise<U | null>((resolve, reject) => {\n const uuid = randomUUID();\n const payload = { ...message, uuid };\n let numberOfTimesMessageWasSent = 0;\n\n if (options.attachTransfer) {\n Object.assign(payload, { transferID: state.transfer?.id });\n }\n\n if (message.type === 'command') {\n reportInfo?.(\n `dispatching message command:${(message as Client.CommandMessage).command} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `dispatching message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n const stringifiedPayload = JSON.stringify(payload);\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions;\n const sendPeriodically = () => {\n if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) {\n numberOfTimesMessageWasSent += 1;\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n } else {\n reject(new ProviderError('error', 'Request timed out'));\n }\n };\n const interval = setInterval(sendPeriodically, retryMessageTimeout);\n\n const onResponse = (raw: RawData) => {\n const response: Server.Message<U> = JSON.parse(raw.toString());\n if (message.type === 'command') {\n reportInfo?.(\n `received response to message command: ${(message as Client.CommandMessage).command} uuid: ${uuid} sent: ${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `received response to message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n if (response.uuid === uuid) {\n clearInterval(interval);\n if (response.error) {\n const message = response.error.message;\n const details = response.error.details?.details as ProviderErrorDetails;\n const step = response.error.details?.step;\n let error = new ProviderError('error', message, details);\n if (step === 'transfer') {\n error = new ProviderTransferError(message, details);\n } else if (step === 'validation') {\n error = new ProviderValidationError(message, details);\n } else if (step === 'initialization') {\n error = new ProviderInitializationError(message);\n }\n return reject(error);\n }\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n };\n\n const dispatchCommand = <U extends Client.Command>(\n payload: {\n command: U;\n } & ([Client.GetCommandParams<U>] extends [never]\n ? unknown\n : { params?: Client.GetCommandParams<U> })\n ) => {\n return dispatch({ type: 'command', ...payload } as Client.CommandMessage);\n };\n\n const dispatchTransferAction = async <T>(action: Client.Action['action']) => {\n const payload: Dispatch<Client.Action> = { type: 'transfer', kind: 'action', action };\n\n return dispatch<T>(payload, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const dispatchTransferStep = async <\n T,\n A extends Client.TransferPushMessage['action'] = Client.TransferPushMessage['action'],\n S extends Client.TransferPushStep = Client.TransferPushStep,\n >(\n payload: {\n step: S;\n action: A;\n } & (A extends 'stream' ? { data: Client.GetTransferPushStreamData<S> } : unknown)\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return dispatch<T>(message, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const setTransferProperties = (\n properties: Exclude<IDispatcherState['transfer'], undefined>\n ): void => {\n state.transfer = { ...properties };\n };\n\n return {\n get transferID() {\n return state.transfer?.id;\n },\n\n get transferKind() {\n return state.transfer?.kind;\n },\n\n setTransferProperties,\n\n dispatch,\n dispatchCommand,\n dispatchTransferAction,\n dispatchTransferStep,\n };\n};\n\ntype WebsocketParams = ConstructorParameters<typeof WebSocket>;\ntype Address = WebsocketParams[0];\ntype Options = WebsocketParams[2];\n\nexport const connectToWebsocket = (\n address: Address,\n options?: Options,\n diagnostics?: IDiagnosticReporter\n): Promise<WebSocket> => {\n return new Promise((resolve, reject) => {\n const server = new WebSocket(address, options);\n server.once('open', () => {\n resolve(server);\n });\n\n server.on('unexpected-response', (_req, res) => {\n if (res.statusCode === 401) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authentication Error'\n )\n );\n }\n\n if (res.statusCode === 403) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authorization Error'\n )\n );\n }\n\n if (res.statusCode === 404) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Data transfer is not enabled on the remote host'\n )\n );\n }\n\n return reject(\n new ProviderInitializationError(\n `Failed to initialize the connection: Unexpected server response ${res.statusCode}`\n )\n );\n });\n\n server.on('message', (raw: RawData) => {\n const response: Server.Message = JSON.parse(raw.toString());\n if (response.diagnostic) {\n diagnostics?.report({\n ...response.diagnostic,\n });\n }\n });\n\n server.once('error', (err) => {\n reject(\n new ProviderTransferError(err.message, {\n details: {\n error: err.message,\n },\n })\n );\n });\n });\n};\n\nexport const trimTrailingSlash = (input: string): string => {\n return input.replace(/\\/$/, '');\n};\n\nexport const wait = (ms: number) => {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport const waitUntil = async (test: () => boolean, interval: number): Promise<void> => {\n while (!test()) {\n await wait(interval);\n }\n\n return Promise.resolve();\n};\n"],"names":["createDispatcher","ws","retryMessageOptions","retryMessageMaxRetries","retryMessageTimeout","reportInfo","state","dispatch","message","options","Error","Promise","resolve","reject","uuid","randomUUID","payload","numberOfTimesMessageWasSent","attachTransfer","Object","assign","transferID","transfer","id","type","command","messageToSend","action","kind","step","stringifiedPayload","JSON","stringify","send","error","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","setTransferProperties","properties","transferKind","connectToWebsocket","address","diagnostics","server","WebSocket","on","_req","res","statusCode","diagnostic","report","err","trimTrailingSlash","input","replace"],"mappings":";;;;;;AAwBaA,MAAAA,gBAAAA,GAAmB,CAC9BC,EAAAA,EACAC,mBAAsB,GAAA;IACpBC,sBAAwB,EAAA,CAAA;IACxBC,mBAAqB,EAAA;AACvB,CAAC,EACDC,UAAAA,GAAAA;AAEA,IAAA,MAAMC,QAA0B,EAAC;AAIjC,IAAA,MAAMC,QAAW,GAAA,OACfC,OACAC,EAAAA,OAAAA,GAA4B,EAAE,GAAA;AAE9B,QAAA,IAAI,CAACR,EAAI,EAAA;AACP,YAAA,MAAM,IAAIS,KAAM,CAAA,+BAAA,CAAA;AAClB;QAEA,OAAO,IAAIC,OAAkB,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACrC,YAAA,MAAMC,IAAOC,GAAAA,iBAAAA,EAAAA;AACb,YAAA,MAAMC,OAAU,GAAA;AAAE,gBAAA,GAAGR,OAAO;AAAEM,gBAAAA;AAAK,aAAA;AACnC,YAAA,IAAIG,2BAA8B,GAAA,CAAA;YAElC,IAAIR,OAAAA,CAAQS,cAAc,EAAE;gBAC1BC,MAAOC,CAAAA,MAAM,CAACJ,OAAS,EAAA;oBAAEK,UAAYf,EAAAA,KAAAA,CAAMgB,QAAQ,EAAEC;AAAG,iBAAA,CAAA;AAC1D;YAEA,IAAIf,OAAAA,CAAQgB,IAAI,KAAK,SAAW,EAAA;AAC9BnB,gBAAAA,UAAAA,GACE,CAAC,4BAA4B,EAAGG,OAAkCiB,CAAAA,OAAO,CAAC,MAAM,EAAEX,IAAAA,CAAK,MAAM,EAAEG,4BAA4B,CAAC,CAAA;AAEhI,aAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAY,EAAA;AACtC,gBAAA,MAAME,aAAgBlB,GAAAA,OAAAA;gBACtBH,UACE,GAAA,CAAC,2BAA2B,EAAEqB,aAAcC,CAAAA,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAS,GAAA,CAAC,KAAK,EAAEF,aAAcG,CAAAA,IAAI,CAAC,CAAC,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAK,CAAA,MAAM,EAAEG,2BAAAA,CAA4B,CAAC,CAAA;AAE9K;YACA,MAAMa,kBAAAA,GAAqBC,IAAKC,CAAAA,SAAS,CAAChB,OAAAA,CAAAA;YAC1Cf,EAAGgC,CAAAA,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,gBAAA,IAAIA,KAAO,EAAA;oBACTrB,MAAOqB,CAAAA,KAAAA,CAAAA;AACT;AACF,aAAA,CAAA;AACA,YAAA,MAAM,EAAE/B,sBAAsB,EAAEC,mBAAmB,EAAE,GAAGF,mBAAAA;AACxD,YAAA,MAAMiC,gBAAmB,GAAA,IAAA;AACvB,gBAAA,IAAIlB,+BAA+Bd,sBAAwB,EAAA;oBACzDc,2BAA+B,IAAA,CAAA;oBAC/BhB,EAAGgC,CAAAA,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,wBAAA,IAAIA,KAAO,EAAA;4BACTrB,MAAOqB,CAAAA,KAAAA,CAAAA;AACT;AACF,qBAAA,CAAA;iBACK,MAAA;oBACLrB,MAAO,CAAA,IAAIuB,wBAAc,OAAS,EAAA,mBAAA,CAAA,CAAA;AACpC;AACF,aAAA;YACA,MAAMC,QAAAA,GAAWC,YAAYH,gBAAkB/B,EAAAA,mBAAAA,CAAAA;AAE/C,YAAA,MAAMmC,aAAa,CAACC,GAAAA,GAAAA;AAClB,gBAAA,MAAMC,QAA8BV,GAAAA,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;gBAC3D,IAAInC,OAAAA,CAAQgB,IAAI,KAAK,SAAW,EAAA;AAC9BnB,oBAAAA,UAAAA,GACE,CAAC,sCAAsC,EAAGG,OAAkCiB,CAAAA,OAAO,CAAC,OAAO,EAAEX,IAAAA,CAAK,OAAO,EAAEG,4BAA4B,CAAC,CAAA;AAE5I,iBAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAY,EAAA;AACtC,oBAAA,MAAME,aAAgBlB,GAAAA,OAAAA;oBACtBH,UACE,GAAA,CAAC,oCAAoC,EAAEqB,aAAcC,CAAAA,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAS,GAAA,CAAC,KAAK,EAAEF,aAAcG,CAAAA,IAAI,CAAC,CAAC,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAK,CAAA,MAAM,EAAEG,2BAAAA,CAA4B,CAAC,CAAA;AAEvL;gBACA,IAAIwB,QAAAA,CAAS3B,IAAI,KAAKA,IAAM,EAAA;oBAC1B8B,aAAcP,CAAAA,QAAAA,CAAAA;oBACd,IAAII,QAAAA,CAASP,KAAK,EAAE;AAClB,wBAAA,MAAM1B,OAAUiC,GAAAA,QAAAA,CAASP,KAAK,CAAC1B,OAAO;AACtC,wBAAA,MAAMqC,OAAUJ,GAAAA,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEA,OAAAA;AACxC,wBAAA,MAAMhB,IAAOY,GAAAA,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEhB,IAAAA;AACrC,wBAAA,IAAIK,KAAQ,GAAA,IAAIE,uBAAc,CAAA,OAAA,EAAS5B,OAASqC,EAAAA,OAAAA,CAAAA;AAChD,wBAAA,IAAIhB,SAAS,UAAY,EAAA;4BACvBK,KAAQ,GAAA,IAAIY,gCAAsBtC,OAASqC,EAAAA,OAAAA,CAAAA;yBACtC,MAAA,IAAIhB,SAAS,YAAc,EAAA;4BAChCK,KAAQ,GAAA,IAAIa,kCAAwBvC,OAASqC,EAAAA,OAAAA,CAAAA;yBACxC,MAAA,IAAIhB,SAAS,gBAAkB,EAAA;AACpCK,4BAAAA,KAAAA,GAAQ,IAAIc,qCAA4BxC,CAAAA,OAAAA,CAAAA;AAC1C;AACA,wBAAA,OAAOK,MAAOqB,CAAAA,KAAAA,CAAAA;AAChB;oBACAtB,OAAQ6B,CAAAA,QAAAA,CAASQ,IAAI,IAAI,IAAA,CAAA;iBACpB,MAAA;oBACLhD,EAAGiD,CAAAA,IAAI,CAAC,SAAWX,EAAAA,UAAAA,CAAAA;AACrB;AACF,aAAA;YAEAtC,EAAGiD,CAAAA,IAAI,CAAC,SAAWX,EAAAA,UAAAA,CAAAA;AACrB,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAMY,kBAAkB,CACtBnC,OAAAA,GAAAA;AAMA,QAAA,OAAOT,QAAS,CAAA;YAAEiB,IAAM,EAAA,SAAA;AAAW,YAAA,GAAGR;AAAQ,SAAA,CAAA;AAChD,KAAA;AAEA,IAAA,MAAMoC,yBAAyB,OAAUzB,MAAAA,GAAAA;AACvC,QAAA,MAAMX,OAAmC,GAAA;YAAEQ,IAAM,EAAA,UAAA;YAAYI,IAAM,EAAA,QAAA;AAAUD,YAAAA;AAAO,SAAA;AAEpF,QAAA,OAAOpB,SAAYS,OAAS,EAAA;YAAEE,cAAgB,EAAA;SAAWP,CAAAA,IAAAA,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,KAAA;AAEA,IAAA,MAAMyC,uBAAuB,OAK3BrC,OAAAA,GAAAA;AAKA,QAAA,MAAMR,OAAgD,GAAA;YACpDgB,IAAM,EAAA,UAAA;YACNI,IAAM,EAAA,MAAA;AACN,YAAA,GAAGZ;AACL,SAAA;AAEA,QAAA,OAAOT,SAAYC,OAAS,EAAA;YAAEU,cAAgB,EAAA;SAAWP,CAAAA,IAAAA,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,KAAA;AAEA,IAAA,MAAM0C,wBAAwB,CAC5BC,UAAAA,GAAAA;AAEAjD,QAAAA,KAAAA,CAAMgB,QAAQ,GAAG;AAAE,YAAA,GAAGiC;AAAW,SAAA;AACnC,KAAA;IAEA,OAAO;AACL,QAAA,IAAIlC,UAAa,CAAA,GAAA;YACf,OAAOf,KAAAA,CAAMgB,QAAQ,EAAEC,EAAAA;AACzB,SAAA;AAEA,QAAA,IAAIiC,YAAe,CAAA,GAAA;YACjB,OAAOlD,KAAAA,CAAMgB,QAAQ,EAAEM,IAAAA;AACzB,SAAA;AAEA0B,QAAAA,qBAAAA;AAEA/C,QAAAA,QAAAA;AACA4C,QAAAA,eAAAA;AACAC,QAAAA,sBAAAA;AACAC,QAAAA;AACF,KAAA;AACF;AAMaI,MAAAA,kBAAAA,GAAqB,CAChCC,OAAAA,EACAjD,OACAkD,EAAAA,WAAAA,GAAAA;IAEA,OAAO,IAAIhD,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;QAC3B,MAAM+C,MAAAA,GAAS,IAAIC,YAAAA,CAAUH,OAASjD,EAAAA,OAAAA,CAAAA;QACtCmD,MAAOV,CAAAA,IAAI,CAAC,MAAQ,EAAA,IAAA;YAClBtC,OAAQgD,CAAAA,MAAAA,CAAAA;AACV,SAAA,CAAA;AAEAA,QAAAA,MAAAA,CAAOE,EAAE,CAAC,qBAAuB,EAAA,CAACC,IAAMC,EAAAA,GAAAA,GAAAA;YACtC,IAAIA,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,qCACF,CAAA,2DAAA,CAAA,CAAA;AAGN;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,qCACF,CAAA,0DAAA,CAAA,CAAA;AAGN;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,qCACF,CAAA,sFAAA,CAAA,CAAA;AAGN;YAEA,OAAOnC,MAAAA,CACL,IAAImC,qCACF,CAAA,CAAC,gEAAgE,EAAEgB,GAAAA,CAAIC,UAAU,CAAC,CAAC,CAAA,CAAA;AAGzF,SAAA,CAAA;QAEAL,MAAOE,CAAAA,EAAE,CAAC,SAAA,EAAW,CAACtB,GAAAA,GAAAA;AACpB,YAAA,MAAMC,QAA2BV,GAAAA,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;YACxD,IAAIF,QAAAA,CAASyB,UAAU,EAAE;AACvBP,gBAAAA,WAAAA,EAAaQ,MAAO,CAAA;AAClB,oBAAA,GAAG1B,SAASyB;AACd,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;QAEAN,MAAOV,CAAAA,IAAI,CAAC,OAAA,EAAS,CAACkB,GAAAA,GAAAA;AACpBvD,YAAAA,MAAAA,CACE,IAAIiC,+BAAAA,CAAsBsB,GAAI5D,CAAAA,OAAO,EAAE;gBACrCqC,OAAS,EAAA;AACPX,oBAAAA,KAAAA,EAAOkC,IAAI5D;AACb;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA,CAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAM6D,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOA,KAAAA,CAAMC,OAAO,CAAC,KAAO,EAAA,EAAA,CAAA;AAC9B;;;;;;"}
@@ -0,0 +1,169 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { WebSocket } from 'ws';
3
+ import { ProviderInitializationError, ProviderTransferError, ProviderError, ProviderValidationError } from '../../errors/providers.mjs';
4
+
5
+ const createDispatcher = (ws, retryMessageOptions = {
6
+ retryMessageMaxRetries: 5,
7
+ retryMessageTimeout: 30000
8
+ }, reportInfo)=>{
9
+ const state = {};
10
+ const dispatch = async (message, options = {})=>{
11
+ if (!ws) {
12
+ throw new Error('No websocket connection found');
13
+ }
14
+ return new Promise((resolve, reject)=>{
15
+ const uuid = randomUUID();
16
+ const payload = {
17
+ ...message,
18
+ uuid
19
+ };
20
+ let numberOfTimesMessageWasSent = 0;
21
+ if (options.attachTransfer) {
22
+ Object.assign(payload, {
23
+ transferID: state.transfer?.id
24
+ });
25
+ }
26
+ if (message.type === 'command') {
27
+ reportInfo?.(`dispatching message command:${message.command} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`);
28
+ } else if (message.type === 'transfer') {
29
+ const messageToSend = message;
30
+ reportInfo?.(`dispatching message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`);
31
+ }
32
+ const stringifiedPayload = JSON.stringify(payload);
33
+ ws.send(stringifiedPayload, (error)=>{
34
+ if (error) {
35
+ reject(error);
36
+ }
37
+ });
38
+ const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions;
39
+ const sendPeriodically = ()=>{
40
+ if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) {
41
+ numberOfTimesMessageWasSent += 1;
42
+ ws.send(stringifiedPayload, (error)=>{
43
+ if (error) {
44
+ reject(error);
45
+ }
46
+ });
47
+ } else {
48
+ reject(new ProviderError('error', 'Request timed out'));
49
+ }
50
+ };
51
+ const interval = setInterval(sendPeriodically, retryMessageTimeout);
52
+ const onResponse = (raw)=>{
53
+ const response = JSON.parse(raw.toString());
54
+ if (message.type === 'command') {
55
+ reportInfo?.(`received response to message command: ${message.command} uuid: ${uuid} sent: ${numberOfTimesMessageWasSent}`);
56
+ } else if (message.type === 'transfer') {
57
+ const messageToSend = message;
58
+ reportInfo?.(`received response to message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`);
59
+ }
60
+ if (response.uuid === uuid) {
61
+ clearInterval(interval);
62
+ if (response.error) {
63
+ const message = response.error.message;
64
+ const details = response.error.details?.details;
65
+ const step = response.error.details?.step;
66
+ let error = new ProviderError('error', message, details);
67
+ if (step === 'transfer') {
68
+ error = new ProviderTransferError(message, details);
69
+ } else if (step === 'validation') {
70
+ error = new ProviderValidationError(message, details);
71
+ } else if (step === 'initialization') {
72
+ error = new ProviderInitializationError(message);
73
+ }
74
+ return reject(error);
75
+ }
76
+ resolve(response.data ?? null);
77
+ } else {
78
+ ws.once('message', onResponse);
79
+ }
80
+ };
81
+ ws.once('message', onResponse);
82
+ });
83
+ };
84
+ const dispatchCommand = (payload)=>{
85
+ return dispatch({
86
+ type: 'command',
87
+ ...payload
88
+ });
89
+ };
90
+ const dispatchTransferAction = async (action)=>{
91
+ const payload = {
92
+ type: 'transfer',
93
+ kind: 'action',
94
+ action
95
+ };
96
+ return dispatch(payload, {
97
+ attachTransfer: true
98
+ }) ?? Promise.resolve(null);
99
+ };
100
+ const dispatchTransferStep = async (payload)=>{
101
+ const message = {
102
+ type: 'transfer',
103
+ kind: 'step',
104
+ ...payload
105
+ };
106
+ return dispatch(message, {
107
+ attachTransfer: true
108
+ }) ?? Promise.resolve(null);
109
+ };
110
+ const setTransferProperties = (properties)=>{
111
+ state.transfer = {
112
+ ...properties
113
+ };
114
+ };
115
+ return {
116
+ get transferID () {
117
+ return state.transfer?.id;
118
+ },
119
+ get transferKind () {
120
+ return state.transfer?.kind;
121
+ },
122
+ setTransferProperties,
123
+ dispatch,
124
+ dispatchCommand,
125
+ dispatchTransferAction,
126
+ dispatchTransferStep
127
+ };
128
+ };
129
+ const connectToWebsocket = (address, options, diagnostics)=>{
130
+ return new Promise((resolve, reject)=>{
131
+ const server = new WebSocket(address, options);
132
+ server.once('open', ()=>{
133
+ resolve(server);
134
+ });
135
+ server.on('unexpected-response', (_req, res)=>{
136
+ if (res.statusCode === 401) {
137
+ return reject(new ProviderInitializationError('Failed to initialize the connection: Authentication Error'));
138
+ }
139
+ if (res.statusCode === 403) {
140
+ return reject(new ProviderInitializationError('Failed to initialize the connection: Authorization Error'));
141
+ }
142
+ if (res.statusCode === 404) {
143
+ return reject(new ProviderInitializationError('Failed to initialize the connection: Data transfer is not enabled on the remote host'));
144
+ }
145
+ return reject(new ProviderInitializationError(`Failed to initialize the connection: Unexpected server response ${res.statusCode}`));
146
+ });
147
+ server.on('message', (raw)=>{
148
+ const response = JSON.parse(raw.toString());
149
+ if (response.diagnostic) {
150
+ diagnostics?.report({
151
+ ...response.diagnostic
152
+ });
153
+ }
154
+ });
155
+ server.once('error', (err)=>{
156
+ reject(new ProviderTransferError(err.message, {
157
+ details: {
158
+ error: err.message
159
+ }
160
+ }));
161
+ });
162
+ });
163
+ };
164
+ const trimTrailingSlash = (input)=>{
165
+ return input.replace(/\/$/, '');
166
+ };
167
+
168
+ export { connectToWebsocket, createDispatcher, trimTrailingSlash };
169
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../../src/strapi/providers/utils.ts"],"sourcesContent":["import { randomUUID } from 'crypto';\nimport { RawData, WebSocket } from 'ws';\n\nimport type { Client, Server } from '../../../types/remote/protocol';\n\nimport {\n ProviderError,\n ProviderTransferError,\n ProviderInitializationError,\n ProviderValidationError,\n ProviderErrorDetails,\n} from '../../errors/providers';\nimport { IDiagnosticReporter } from '../../utils/diagnostic';\n\ninterface IDispatcherState {\n transfer?: { kind: Client.TransferKind; id: string };\n}\n\ninterface IDispatchOptions {\n attachTransfer?: boolean;\n}\n\ntype Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;\n\nexport const createDispatcher = (\n ws: WebSocket,\n retryMessageOptions = {\n retryMessageMaxRetries: 5,\n retryMessageTimeout: 30000,\n },\n reportInfo?: (message: string) => void\n) => {\n const state: IDispatcherState = {};\n\n type DispatchMessage = Dispatch<Client.Message>;\n\n const dispatch = async <U = null>(\n message: DispatchMessage,\n options: IDispatchOptions = {}\n ): Promise<U | null> => {\n if (!ws) {\n throw new Error('No websocket connection found');\n }\n\n return new Promise<U | null>((resolve, reject) => {\n const uuid = randomUUID();\n const payload = { ...message, uuid };\n let numberOfTimesMessageWasSent = 0;\n\n if (options.attachTransfer) {\n Object.assign(payload, { transferID: state.transfer?.id });\n }\n\n if (message.type === 'command') {\n reportInfo?.(\n `dispatching message command:${(message as Client.CommandMessage).command} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `dispatching message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n const stringifiedPayload = JSON.stringify(payload);\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n const { retryMessageMaxRetries, retryMessageTimeout } = retryMessageOptions;\n const sendPeriodically = () => {\n if (numberOfTimesMessageWasSent <= retryMessageMaxRetries) {\n numberOfTimesMessageWasSent += 1;\n ws.send(stringifiedPayload, (error) => {\n if (error) {\n reject(error);\n }\n });\n } else {\n reject(new ProviderError('error', 'Request timed out'));\n }\n };\n const interval = setInterval(sendPeriodically, retryMessageTimeout);\n\n const onResponse = (raw: RawData) => {\n const response: Server.Message<U> = JSON.parse(raw.toString());\n if (message.type === 'command') {\n reportInfo?.(\n `received response to message command: ${(message as Client.CommandMessage).command} uuid: ${uuid} sent: ${numberOfTimesMessageWasSent}`\n );\n } else if (message.type === 'transfer') {\n const messageToSend = message as Client.TransferMessage;\n reportInfo?.(\n `received response to message action:${messageToSend.action} ${messageToSend.kind === 'step' ? `step:${messageToSend.step}` : ''} uuid:${uuid} sent:${numberOfTimesMessageWasSent}`\n );\n }\n if (response.uuid === uuid) {\n clearInterval(interval);\n if (response.error) {\n const message = response.error.message;\n const details = response.error.details?.details as ProviderErrorDetails;\n const step = response.error.details?.step;\n let error = new ProviderError('error', message, details);\n if (step === 'transfer') {\n error = new ProviderTransferError(message, details);\n } else if (step === 'validation') {\n error = new ProviderValidationError(message, details);\n } else if (step === 'initialization') {\n error = new ProviderInitializationError(message);\n }\n return reject(error);\n }\n resolve(response.data ?? null);\n } else {\n ws.once('message', onResponse);\n }\n };\n\n ws.once('message', onResponse);\n });\n };\n\n const dispatchCommand = <U extends Client.Command>(\n payload: {\n command: U;\n } & ([Client.GetCommandParams<U>] extends [never]\n ? unknown\n : { params?: Client.GetCommandParams<U> })\n ) => {\n return dispatch({ type: 'command', ...payload } as Client.CommandMessage);\n };\n\n const dispatchTransferAction = async <T>(action: Client.Action['action']) => {\n const payload: Dispatch<Client.Action> = { type: 'transfer', kind: 'action', action };\n\n return dispatch<T>(payload, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const dispatchTransferStep = async <\n T,\n A extends Client.TransferPushMessage['action'] = Client.TransferPushMessage['action'],\n S extends Client.TransferPushStep = Client.TransferPushStep,\n >(\n payload: {\n step: S;\n action: A;\n } & (A extends 'stream' ? { data: Client.GetTransferPushStreamData<S> } : unknown)\n ) => {\n const message: Dispatch<Client.TransferPushMessage> = {\n type: 'transfer',\n kind: 'step',\n ...payload,\n };\n\n return dispatch<T>(message, { attachTransfer: true }) ?? Promise.resolve(null);\n };\n\n const setTransferProperties = (\n properties: Exclude<IDispatcherState['transfer'], undefined>\n ): void => {\n state.transfer = { ...properties };\n };\n\n return {\n get transferID() {\n return state.transfer?.id;\n },\n\n get transferKind() {\n return state.transfer?.kind;\n },\n\n setTransferProperties,\n\n dispatch,\n dispatchCommand,\n dispatchTransferAction,\n dispatchTransferStep,\n };\n};\n\ntype WebsocketParams = ConstructorParameters<typeof WebSocket>;\ntype Address = WebsocketParams[0];\ntype Options = WebsocketParams[2];\n\nexport const connectToWebsocket = (\n address: Address,\n options?: Options,\n diagnostics?: IDiagnosticReporter\n): Promise<WebSocket> => {\n return new Promise((resolve, reject) => {\n const server = new WebSocket(address, options);\n server.once('open', () => {\n resolve(server);\n });\n\n server.on('unexpected-response', (_req, res) => {\n if (res.statusCode === 401) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authentication Error'\n )\n );\n }\n\n if (res.statusCode === 403) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Authorization Error'\n )\n );\n }\n\n if (res.statusCode === 404) {\n return reject(\n new ProviderInitializationError(\n 'Failed to initialize the connection: Data transfer is not enabled on the remote host'\n )\n );\n }\n\n return reject(\n new ProviderInitializationError(\n `Failed to initialize the connection: Unexpected server response ${res.statusCode}`\n )\n );\n });\n\n server.on('message', (raw: RawData) => {\n const response: Server.Message = JSON.parse(raw.toString());\n if (response.diagnostic) {\n diagnostics?.report({\n ...response.diagnostic,\n });\n }\n });\n\n server.once('error', (err) => {\n reject(\n new ProviderTransferError(err.message, {\n details: {\n error: err.message,\n },\n })\n );\n });\n });\n};\n\nexport const trimTrailingSlash = (input: string): string => {\n return input.replace(/\\/$/, '');\n};\n\nexport const wait = (ms: number) => {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport const waitUntil = async (test: () => boolean, interval: number): Promise<void> => {\n while (!test()) {\n await wait(interval);\n }\n\n return Promise.resolve();\n};\n"],"names":["createDispatcher","ws","retryMessageOptions","retryMessageMaxRetries","retryMessageTimeout","reportInfo","state","dispatch","message","options","Error","Promise","resolve","reject","uuid","randomUUID","payload","numberOfTimesMessageWasSent","attachTransfer","Object","assign","transferID","transfer","id","type","command","messageToSend","action","kind","step","stringifiedPayload","JSON","stringify","send","error","sendPeriodically","ProviderError","interval","setInterval","onResponse","raw","response","parse","toString","clearInterval","details","ProviderTransferError","ProviderValidationError","ProviderInitializationError","data","once","dispatchCommand","dispatchTransferAction","dispatchTransferStep","setTransferProperties","properties","transferKind","connectToWebsocket","address","diagnostics","server","WebSocket","on","_req","res","statusCode","diagnostic","report","err","trimTrailingSlash","input","replace"],"mappings":";;;;AAwBaA,MAAAA,gBAAAA,GAAmB,CAC9BC,EAAAA,EACAC,mBAAsB,GAAA;IACpBC,sBAAwB,EAAA,CAAA;IACxBC,mBAAqB,EAAA;AACvB,CAAC,EACDC,UAAAA,GAAAA;AAEA,IAAA,MAAMC,QAA0B,EAAC;AAIjC,IAAA,MAAMC,QAAW,GAAA,OACfC,OACAC,EAAAA,OAAAA,GAA4B,EAAE,GAAA;AAE9B,QAAA,IAAI,CAACR,EAAI,EAAA;AACP,YAAA,MAAM,IAAIS,KAAM,CAAA,+BAAA,CAAA;AAClB;QAEA,OAAO,IAAIC,OAAkB,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AACrC,YAAA,MAAMC,IAAOC,GAAAA,UAAAA,EAAAA;AACb,YAAA,MAAMC,OAAU,GAAA;AAAE,gBAAA,GAAGR,OAAO;AAAEM,gBAAAA;AAAK,aAAA;AACnC,YAAA,IAAIG,2BAA8B,GAAA,CAAA;YAElC,IAAIR,OAAAA,CAAQS,cAAc,EAAE;gBAC1BC,MAAOC,CAAAA,MAAM,CAACJ,OAAS,EAAA;oBAAEK,UAAYf,EAAAA,KAAAA,CAAMgB,QAAQ,EAAEC;AAAG,iBAAA,CAAA;AAC1D;YAEA,IAAIf,OAAAA,CAAQgB,IAAI,KAAK,SAAW,EAAA;AAC9BnB,gBAAAA,UAAAA,GACE,CAAC,4BAA4B,EAAGG,OAAkCiB,CAAAA,OAAO,CAAC,MAAM,EAAEX,IAAAA,CAAK,MAAM,EAAEG,4BAA4B,CAAC,CAAA;AAEhI,aAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAY,EAAA;AACtC,gBAAA,MAAME,aAAgBlB,GAAAA,OAAAA;gBACtBH,UACE,GAAA,CAAC,2BAA2B,EAAEqB,aAAcC,CAAAA,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAS,GAAA,CAAC,KAAK,EAAEF,aAAcG,CAAAA,IAAI,CAAC,CAAC,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAK,CAAA,MAAM,EAAEG,2BAAAA,CAA4B,CAAC,CAAA;AAE9K;YACA,MAAMa,kBAAAA,GAAqBC,IAAKC,CAAAA,SAAS,CAAChB,OAAAA,CAAAA;YAC1Cf,EAAGgC,CAAAA,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,gBAAA,IAAIA,KAAO,EAAA;oBACTrB,MAAOqB,CAAAA,KAAAA,CAAAA;AACT;AACF,aAAA,CAAA;AACA,YAAA,MAAM,EAAE/B,sBAAsB,EAAEC,mBAAmB,EAAE,GAAGF,mBAAAA;AACxD,YAAA,MAAMiC,gBAAmB,GAAA,IAAA;AACvB,gBAAA,IAAIlB,+BAA+Bd,sBAAwB,EAAA;oBACzDc,2BAA+B,IAAA,CAAA;oBAC/BhB,EAAGgC,CAAAA,IAAI,CAACH,kBAAAA,EAAoB,CAACI,KAAAA,GAAAA;AAC3B,wBAAA,IAAIA,KAAO,EAAA;4BACTrB,MAAOqB,CAAAA,KAAAA,CAAAA;AACT;AACF,qBAAA,CAAA;iBACK,MAAA;oBACLrB,MAAO,CAAA,IAAIuB,cAAc,OAAS,EAAA,mBAAA,CAAA,CAAA;AACpC;AACF,aAAA;YACA,MAAMC,QAAAA,GAAWC,YAAYH,gBAAkB/B,EAAAA,mBAAAA,CAAAA;AAE/C,YAAA,MAAMmC,aAAa,CAACC,GAAAA,GAAAA;AAClB,gBAAA,MAAMC,QAA8BV,GAAAA,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;gBAC3D,IAAInC,OAAAA,CAAQgB,IAAI,KAAK,SAAW,EAAA;AAC9BnB,oBAAAA,UAAAA,GACE,CAAC,sCAAsC,EAAGG,OAAkCiB,CAAAA,OAAO,CAAC,OAAO,EAAEX,IAAAA,CAAK,OAAO,EAAEG,4BAA4B,CAAC,CAAA;AAE5I,iBAAA,MAAO,IAAIT,OAAAA,CAAQgB,IAAI,KAAK,UAAY,EAAA;AACtC,oBAAA,MAAME,aAAgBlB,GAAAA,OAAAA;oBACtBH,UACE,GAAA,CAAC,oCAAoC,EAAEqB,aAAcC,CAAAA,MAAM,CAAC,CAAC,EAAED,aAAAA,CAAcE,IAAI,KAAK,MAAS,GAAA,CAAC,KAAK,EAAEF,aAAcG,CAAAA,IAAI,CAAC,CAAC,GAAG,EAAA,CAAG,MAAM,EAAEf,IAAK,CAAA,MAAM,EAAEG,2BAAAA,CAA4B,CAAC,CAAA;AAEvL;gBACA,IAAIwB,QAAAA,CAAS3B,IAAI,KAAKA,IAAM,EAAA;oBAC1B8B,aAAcP,CAAAA,QAAAA,CAAAA;oBACd,IAAII,QAAAA,CAASP,KAAK,EAAE;AAClB,wBAAA,MAAM1B,OAAUiC,GAAAA,QAAAA,CAASP,KAAK,CAAC1B,OAAO;AACtC,wBAAA,MAAMqC,OAAUJ,GAAAA,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEA,OAAAA;AACxC,wBAAA,MAAMhB,IAAOY,GAAAA,QAAAA,CAASP,KAAK,CAACW,OAAO,EAAEhB,IAAAA;AACrC,wBAAA,IAAIK,KAAQ,GAAA,IAAIE,aAAc,CAAA,OAAA,EAAS5B,OAASqC,EAAAA,OAAAA,CAAAA;AAChD,wBAAA,IAAIhB,SAAS,UAAY,EAAA;4BACvBK,KAAQ,GAAA,IAAIY,sBAAsBtC,OAASqC,EAAAA,OAAAA,CAAAA;yBACtC,MAAA,IAAIhB,SAAS,YAAc,EAAA;4BAChCK,KAAQ,GAAA,IAAIa,wBAAwBvC,OAASqC,EAAAA,OAAAA,CAAAA;yBACxC,MAAA,IAAIhB,SAAS,gBAAkB,EAAA;AACpCK,4BAAAA,KAAAA,GAAQ,IAAIc,2BAA4BxC,CAAAA,OAAAA,CAAAA;AAC1C;AACA,wBAAA,OAAOK,MAAOqB,CAAAA,KAAAA,CAAAA;AAChB;oBACAtB,OAAQ6B,CAAAA,QAAAA,CAASQ,IAAI,IAAI,IAAA,CAAA;iBACpB,MAAA;oBACLhD,EAAGiD,CAAAA,IAAI,CAAC,SAAWX,EAAAA,UAAAA,CAAAA;AACrB;AACF,aAAA;YAEAtC,EAAGiD,CAAAA,IAAI,CAAC,SAAWX,EAAAA,UAAAA,CAAAA;AACrB,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAMY,kBAAkB,CACtBnC,OAAAA,GAAAA;AAMA,QAAA,OAAOT,QAAS,CAAA;YAAEiB,IAAM,EAAA,SAAA;AAAW,YAAA,GAAGR;AAAQ,SAAA,CAAA;AAChD,KAAA;AAEA,IAAA,MAAMoC,yBAAyB,OAAUzB,MAAAA,GAAAA;AACvC,QAAA,MAAMX,OAAmC,GAAA;YAAEQ,IAAM,EAAA,UAAA;YAAYI,IAAM,EAAA,QAAA;AAAUD,YAAAA;AAAO,SAAA;AAEpF,QAAA,OAAOpB,SAAYS,OAAS,EAAA;YAAEE,cAAgB,EAAA;SAAWP,CAAAA,IAAAA,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,KAAA;AAEA,IAAA,MAAMyC,uBAAuB,OAK3BrC,OAAAA,GAAAA;AAKA,QAAA,MAAMR,OAAgD,GAAA;YACpDgB,IAAM,EAAA,UAAA;YACNI,IAAM,EAAA,MAAA;AACN,YAAA,GAAGZ;AACL,SAAA;AAEA,QAAA,OAAOT,SAAYC,OAAS,EAAA;YAAEU,cAAgB,EAAA;SAAWP,CAAAA,IAAAA,OAAAA,CAAQC,OAAO,CAAC,IAAA,CAAA;AAC3E,KAAA;AAEA,IAAA,MAAM0C,wBAAwB,CAC5BC,UAAAA,GAAAA;AAEAjD,QAAAA,KAAAA,CAAMgB,QAAQ,GAAG;AAAE,YAAA,GAAGiC;AAAW,SAAA;AACnC,KAAA;IAEA,OAAO;AACL,QAAA,IAAIlC,UAAa,CAAA,GAAA;YACf,OAAOf,KAAAA,CAAMgB,QAAQ,EAAEC,EAAAA;AACzB,SAAA;AAEA,QAAA,IAAIiC,YAAe,CAAA,GAAA;YACjB,OAAOlD,KAAAA,CAAMgB,QAAQ,EAAEM,IAAAA;AACzB,SAAA;AAEA0B,QAAAA,qBAAAA;AAEA/C,QAAAA,QAAAA;AACA4C,QAAAA,eAAAA;AACAC,QAAAA,sBAAAA;AACAC,QAAAA;AACF,KAAA;AACF;AAMaI,MAAAA,kBAAAA,GAAqB,CAChCC,OAAAA,EACAjD,OACAkD,EAAAA,WAAAA,GAAAA;IAEA,OAAO,IAAIhD,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;QAC3B,MAAM+C,MAAAA,GAAS,IAAIC,SAAAA,CAAUH,OAASjD,EAAAA,OAAAA,CAAAA;QACtCmD,MAAOV,CAAAA,IAAI,CAAC,MAAQ,EAAA,IAAA;YAClBtC,OAAQgD,CAAAA,MAAAA,CAAAA;AACV,SAAA,CAAA;AAEAA,QAAAA,MAAAA,CAAOE,EAAE,CAAC,qBAAuB,EAAA,CAACC,IAAMC,EAAAA,GAAAA,GAAAA;YACtC,IAAIA,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BACF,CAAA,2DAAA,CAAA,CAAA;AAGN;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BACF,CAAA,0DAAA,CAAA,CAAA;AAGN;YAEA,IAAIgB,GAAAA,CAAIC,UAAU,KAAK,GAAK,EAAA;gBAC1B,OAAOpD,MAAAA,CACL,IAAImC,2BACF,CAAA,sFAAA,CAAA,CAAA;AAGN;YAEA,OAAOnC,MAAAA,CACL,IAAImC,2BACF,CAAA,CAAC,gEAAgE,EAAEgB,GAAAA,CAAIC,UAAU,CAAC,CAAC,CAAA,CAAA;AAGzF,SAAA,CAAA;QAEAL,MAAOE,CAAAA,EAAE,CAAC,SAAA,EAAW,CAACtB,GAAAA,GAAAA;AACpB,YAAA,MAAMC,QAA2BV,GAAAA,IAAAA,CAAKW,KAAK,CAACF,IAAIG,QAAQ,EAAA,CAAA;YACxD,IAAIF,QAAAA,CAASyB,UAAU,EAAE;AACvBP,gBAAAA,WAAAA,EAAaQ,MAAO,CAAA;AAClB,oBAAA,GAAG1B,SAASyB;AACd,iBAAA,CAAA;AACF;AACF,SAAA,CAAA;QAEAN,MAAOV,CAAAA,IAAI,CAAC,OAAA,EAAS,CAACkB,GAAAA,GAAAA;AACpBvD,YAAAA,MAAAA,CACE,IAAIiC,qBAAAA,CAAsBsB,GAAI5D,CAAAA,OAAO,EAAE;gBACrCqC,OAAS,EAAA;AACPX,oBAAAA,KAAAA,EAAOkC,IAAI5D;AACb;AACF,aAAA,CAAA,CAAA;AAEJ,SAAA,CAAA;AACF,KAAA,CAAA;AACF;AAEO,MAAM6D,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOA,KAAAA,CAAMC,OAAO,CAAC,KAAO,EAAA,EAAA,CAAA;AAC9B;;;;"}
@@ -0,0 +1,125 @@
1
+ 'use strict';
2
+
3
+ var fp = require('lodash/fp');
4
+ var components = require('../../utils/components.js');
5
+
6
+ const sanitizeComponentLikeAttributes = (model, data)=>{
7
+ const { attributes } = model;
8
+ const componentLikeAttributesKey = Object.entries(attributes).filter(([, attribute])=>attribute.type === 'component' || attribute.type === 'dynamiczone').map(([key])=>key);
9
+ return fp.omit(componentLikeAttributesKey, data);
10
+ };
11
+ const omitInvalidCreationAttributes = fp.omit([
12
+ 'id'
13
+ ]);
14
+ const createEntityQuery = (strapi)=>{
15
+ const components$1 = {
16
+ async assignToEntity (uid, data) {
17
+ const model = strapi.getModel(uid);
18
+ const entityComponents = await components.createComponents(uid, data);
19
+ const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);
20
+ return fp.assign(entityComponents, dataWithoutComponents);
21
+ },
22
+ async get (uid, entity) {
23
+ return components.getComponents(uid, entity);
24
+ },
25
+ delete (uid, componentsToDelete) {
26
+ return components.deleteComponents(uid, componentsToDelete, {
27
+ loadComponents: false
28
+ });
29
+ }
30
+ };
31
+ const query = (uid)=>{
32
+ const create = async (params)=>{
33
+ const dataWithComponents = await components$1.assignToEntity(uid, params.data);
34
+ const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);
35
+ return strapi.db.query(uid).create({
36
+ ...params,
37
+ data: sanitizedData
38
+ });
39
+ };
40
+ const createMany = async (params)=>{
41
+ return Promise.resolve(params.data)// Create components for each entity
42
+ .then(fp.map((data)=>components$1.assignToEntity(uid, data)))// Remove unwanted attributes
43
+ .then(fp.map(omitInvalidCreationAttributes))// Execute a strapi db createMany query with all the entities + their created components
44
+ .then((data)=>strapi.db.query(uid).createMany({
45
+ ...params,
46
+ data
47
+ }));
48
+ };
49
+ const deleteMany = async (params)=>{
50
+ const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});
51
+ if (!entitiesToDelete.length) {
52
+ return null;
53
+ }
54
+ const componentsToDelete = await Promise.all(entitiesToDelete.map((entityToDelete)=>components$1.get(uid, entityToDelete)));
55
+ const deletedEntities = await strapi.db.query(uid).deleteMany(params);
56
+ await Promise.all(componentsToDelete.map((compos)=>components$1.delete(uid, compos)));
57
+ return deletedEntities;
58
+ };
59
+ const getDeepPopulateComponentLikeQuery = (contentType, params = {
60
+ select: '*'
61
+ })=>{
62
+ const { attributes } = contentType;
63
+ const populate = {};
64
+ const entries = Object.entries(attributes);
65
+ for (const [key, attribute] of entries){
66
+ if (attribute.type === 'component') {
67
+ const component = strapi.getModel(attribute.component);
68
+ const subPopulate = getDeepPopulateComponentLikeQuery(component, params);
69
+ if ((fp.isArray(subPopulate) || fp.isObject(subPopulate)) && fp.size(subPopulate) > 0) {
70
+ populate[key] = {
71
+ ...params,
72
+ populate: subPopulate
73
+ };
74
+ }
75
+ if (fp.isArray(subPopulate) && fp.isEmpty(subPopulate)) {
76
+ populate[key] = {
77
+ ...params
78
+ };
79
+ }
80
+ }
81
+ if (attribute.type === 'dynamiczone') {
82
+ const { components: componentsUID } = attribute;
83
+ const on = {};
84
+ for (const componentUID of componentsUID){
85
+ const component = strapi.getModel(componentUID);
86
+ const subPopulate = getDeepPopulateComponentLikeQuery(component, params);
87
+ if ((fp.isArray(subPopulate) || fp.isObject(subPopulate)) && fp.size(subPopulate) > 0) {
88
+ on[componentUID] = {
89
+ ...params,
90
+ populate: subPopulate
91
+ };
92
+ }
93
+ if (fp.isArray(subPopulate) && fp.isEmpty(subPopulate)) {
94
+ on[componentUID] = {
95
+ ...params
96
+ };
97
+ }
98
+ }
99
+ populate[key] = fp.size(on) > 0 ? {
100
+ on
101
+ } : true;
102
+ }
103
+ }
104
+ const values = Object.values(populate);
105
+ if (values.every((value)=>value === true)) {
106
+ return Object.keys(populate);
107
+ }
108
+ return populate;
109
+ };
110
+ return {
111
+ create,
112
+ createMany,
113
+ deleteMany,
114
+ getDeepPopulateComponentLikeQuery,
115
+ get deepPopulateComponentLikeQuery () {
116
+ const contentType = strapi.getModel(uid);
117
+ return getDeepPopulateComponentLikeQuery(contentType);
118
+ }
119
+ };
120
+ };
121
+ return query;
122
+ };
123
+
124
+ exports.createEntityQuery = createEntityQuery;
125
+ //# sourceMappingURL=entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.js","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { omit, map, isArray, isObject, size, isEmpty, assign } from 'lodash/fp';
2
+ import { createComponents, getComponents, deleteComponents } from '../../utils/components.mjs';
3
+
4
+ const sanitizeComponentLikeAttributes = (model, data)=>{
5
+ const { attributes } = model;
6
+ const componentLikeAttributesKey = Object.entries(attributes).filter(([, attribute])=>attribute.type === 'component' || attribute.type === 'dynamiczone').map(([key])=>key);
7
+ return omit(componentLikeAttributesKey, data);
8
+ };
9
+ const omitInvalidCreationAttributes = omit([
10
+ 'id'
11
+ ]);
12
+ const createEntityQuery = (strapi)=>{
13
+ const components = {
14
+ async assignToEntity (uid, data) {
15
+ const model = strapi.getModel(uid);
16
+ const entityComponents = await createComponents(uid, data);
17
+ const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);
18
+ return assign(entityComponents, dataWithoutComponents);
19
+ },
20
+ async get (uid, entity) {
21
+ return getComponents(uid, entity);
22
+ },
23
+ delete (uid, componentsToDelete) {
24
+ return deleteComponents(uid, componentsToDelete, {
25
+ loadComponents: false
26
+ });
27
+ }
28
+ };
29
+ const query = (uid)=>{
30
+ const create = async (params)=>{
31
+ const dataWithComponents = await components.assignToEntity(uid, params.data);
32
+ const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);
33
+ return strapi.db.query(uid).create({
34
+ ...params,
35
+ data: sanitizedData
36
+ });
37
+ };
38
+ const createMany = async (params)=>{
39
+ return Promise.resolve(params.data)// Create components for each entity
40
+ .then(map((data)=>components.assignToEntity(uid, data)))// Remove unwanted attributes
41
+ .then(map(omitInvalidCreationAttributes))// Execute a strapi db createMany query with all the entities + their created components
42
+ .then((data)=>strapi.db.query(uid).createMany({
43
+ ...params,
44
+ data
45
+ }));
46
+ };
47
+ const deleteMany = async (params)=>{
48
+ const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});
49
+ if (!entitiesToDelete.length) {
50
+ return null;
51
+ }
52
+ const componentsToDelete = await Promise.all(entitiesToDelete.map((entityToDelete)=>components.get(uid, entityToDelete)));
53
+ const deletedEntities = await strapi.db.query(uid).deleteMany(params);
54
+ await Promise.all(componentsToDelete.map((compos)=>components.delete(uid, compos)));
55
+ return deletedEntities;
56
+ };
57
+ const getDeepPopulateComponentLikeQuery = (contentType, params = {
58
+ select: '*'
59
+ })=>{
60
+ const { attributes } = contentType;
61
+ const populate = {};
62
+ const entries = Object.entries(attributes);
63
+ for (const [key, attribute] of entries){
64
+ if (attribute.type === 'component') {
65
+ const component = strapi.getModel(attribute.component);
66
+ const subPopulate = getDeepPopulateComponentLikeQuery(component, params);
67
+ if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {
68
+ populate[key] = {
69
+ ...params,
70
+ populate: subPopulate
71
+ };
72
+ }
73
+ if (isArray(subPopulate) && isEmpty(subPopulate)) {
74
+ populate[key] = {
75
+ ...params
76
+ };
77
+ }
78
+ }
79
+ if (attribute.type === 'dynamiczone') {
80
+ const { components: componentsUID } = attribute;
81
+ const on = {};
82
+ for (const componentUID of componentsUID){
83
+ const component = strapi.getModel(componentUID);
84
+ const subPopulate = getDeepPopulateComponentLikeQuery(component, params);
85
+ if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {
86
+ on[componentUID] = {
87
+ ...params,
88
+ populate: subPopulate
89
+ };
90
+ }
91
+ if (isArray(subPopulate) && isEmpty(subPopulate)) {
92
+ on[componentUID] = {
93
+ ...params
94
+ };
95
+ }
96
+ }
97
+ populate[key] = size(on) > 0 ? {
98
+ on
99
+ } : true;
100
+ }
101
+ }
102
+ const values = Object.values(populate);
103
+ if (values.every((value)=>value === true)) {
104
+ return Object.keys(populate);
105
+ }
106
+ return populate;
107
+ };
108
+ return {
109
+ create,
110
+ createMany,
111
+ deleteMany,
112
+ getDeepPopulateComponentLikeQuery,
113
+ get deepPopulateComponentLikeQuery () {
114
+ const contentType = strapi.getModel(uid);
115
+ return getDeepPopulateComponentLikeQuery(contentType);
116
+ }
117
+ };
118
+ };
119
+ return query;
120
+ };
121
+
122
+ export { createEntityQuery };
123
+ //# sourceMappingURL=entity.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity.mjs","sources":["../../../src/strapi/queries/entity.ts"],"sourcesContent":["import { assign, isArray, isEmpty, isObject, map, omit, size } from 'lodash/fp';\n\nimport type { Core, UID, Data, Struct } from '@strapi/types';\nimport * as componentsService from '../../utils/components';\n\nconst sanitizeComponentLikeAttributes = <T extends Struct.Schema>(\n model: T,\n data: Data.Entity<T['uid']>\n) => {\n const { attributes } = model;\n\n const componentLikeAttributesKey = Object.entries(attributes)\n .filter(([, attribute]) => attribute.type === 'component' || attribute.type === 'dynamiczone')\n .map(([key]) => key);\n\n return omit(componentLikeAttributesKey, data);\n};\n\nconst omitInvalidCreationAttributes = omit(['id']);\n\nconst createEntityQuery = (strapi: Core.Strapi): any => {\n const components = {\n async assignToEntity(uid: UID.Schema, data: any) {\n const model = strapi.getModel(uid);\n\n const entityComponents = await componentsService.createComponents(uid, data);\n const dataWithoutComponents = sanitizeComponentLikeAttributes(model, data);\n\n return assign(entityComponents, dataWithoutComponents);\n },\n\n async get<T extends object>(uid: string, entity: T) {\n return componentsService.getComponents(uid as UID.Schema, entity as any);\n },\n\n delete<T extends object>(uid: string, componentsToDelete: T) {\n return componentsService.deleteComponents(uid as UID.Schema, componentsToDelete as any, {\n loadComponents: false,\n });\n },\n };\n\n const query = (uid: UID.Schema) => {\n const create = async <T extends { data: U }, U extends object>(params: T) => {\n const dataWithComponents = await components.assignToEntity(uid, params.data);\n const sanitizedData = omitInvalidCreationAttributes(dataWithComponents);\n\n return strapi.db.query(uid).create({ ...params, data: sanitizedData });\n };\n\n const createMany = async <T extends { data: U[] }, U extends object>(params: T) => {\n return (\n Promise.resolve(params.data)\n // Create components for each entity\n .then(map((data) => components.assignToEntity(uid, data)))\n // Remove unwanted attributes\n .then(map(omitInvalidCreationAttributes))\n // Execute a strapi db createMany query with all the entities + their created components\n .then((data) => strapi.db.query(uid).createMany({ ...params, data }))\n );\n };\n\n const deleteMany = async <T extends object>(params?: T) => {\n const entitiesToDelete = await strapi.db.query(uid).findMany(params ?? {});\n\n if (!entitiesToDelete.length) {\n return null;\n }\n\n const componentsToDelete = await Promise.all(\n entitiesToDelete.map((entityToDelete) => components.get(uid, entityToDelete))\n );\n\n const deletedEntities = await strapi.db.query(uid).deleteMany(params);\n await Promise.all(componentsToDelete.map((compos) => components.delete(uid, compos)));\n\n return deletedEntities;\n };\n\n const getDeepPopulateComponentLikeQuery = (\n contentType: Struct.Schema,\n params = { select: '*' }\n ) => {\n const { attributes } = contentType;\n\n const populate: any = {};\n\n const entries: [string, any][] = Object.entries(attributes);\n\n for (const [key, attribute] of entries) {\n if (attribute.type === 'component') {\n const component = strapi.getModel(attribute.component);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n populate[key] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n populate[key] = { ...params };\n }\n }\n\n if (attribute.type === 'dynamiczone') {\n const { components: componentsUID } = attribute;\n\n const on: any = {};\n\n for (const componentUID of componentsUID) {\n const component = strapi.getModel(componentUID);\n const subPopulate = getDeepPopulateComponentLikeQuery(component, params);\n\n if ((isArray(subPopulate) || isObject(subPopulate)) && size(subPopulate) > 0) {\n on[componentUID] = { ...params, populate: subPopulate };\n }\n\n if (isArray(subPopulate) && isEmpty(subPopulate)) {\n on[componentUID] = { ...params };\n }\n }\n\n populate[key] = size(on) > 0 ? { on } : true;\n }\n }\n\n const values = Object.values(populate);\n\n if (values.every((value) => value === true)) {\n return Object.keys(populate);\n }\n\n return populate;\n };\n\n return {\n create,\n createMany,\n deleteMany,\n getDeepPopulateComponentLikeQuery,\n\n get deepPopulateComponentLikeQuery() {\n const contentType = strapi.getModel(uid);\n\n return getDeepPopulateComponentLikeQuery(contentType);\n },\n };\n };\n\n return query;\n};\n\nexport { createEntityQuery };\n"],"names":["sanitizeComponentLikeAttributes","model","data","attributes","componentLikeAttributesKey","Object","entries","filter","attribute","type","map","key","omit","omitInvalidCreationAttributes","createEntityQuery","strapi","components","assignToEntity","uid","getModel","entityComponents","componentsService","dataWithoutComponents","assign","get","entity","delete","componentsToDelete","loadComponents","query","create","params","dataWithComponents","sanitizedData","db","createMany","Promise","resolve","then","deleteMany","entitiesToDelete","findMany","length","all","entityToDelete","deletedEntities","compos","getDeepPopulateComponentLikeQuery","contentType","select","populate","component","subPopulate","isArray","isObject","size","isEmpty","componentsUID","on","componentUID","values","every","value","keys","deepPopulateComponentLikeQuery"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var entity = require('./entity.js');
4
+ var link = require('./link.js');
5
+
6
+
7
+
8
+ exports.entity = entity;
9
+ exports.link = link;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ import * as entity from './entity.mjs';
2
+ export { entity };
3
+ import * as link from './link.mjs';
4
+ export { link };
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}