@transcend-io/cli 7.0.0-alpha.1 → 7.0.0-alpha.11

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 (186) hide show
  1. package/README.md +1007 -2565
  2. package/dist/bin/bash-complete.d.ts +1 -0
  3. package/dist/bin/bash-complete.js +4 -0
  4. package/dist/bin/bash-complete.js.map +1 -0
  5. package/dist/bin/cli.d.ts +1 -0
  6. package/dist/bin/cli.js +3 -0
  7. package/dist/bin/cli.js.map +1 -0
  8. package/dist/bin/deprecated-command.d.ts +1 -0
  9. package/dist/bin/deprecated-command.js +7 -0
  10. package/dist/bin/deprecated-command.js.map +1 -0
  11. package/dist/chunk-347UQP43.js +2 -0
  12. package/dist/chunk-347UQP43.js.map +1 -0
  13. package/dist/chunk-43JWXG77.js +2 -0
  14. package/dist/chunk-43JWXG77.js.map +1 -0
  15. package/dist/chunk-4GLITB3Y.js +2 -0
  16. package/dist/chunk-4GLITB3Y.js.map +1 -0
  17. package/dist/chunk-6WKTY4YQ.js +4 -0
  18. package/dist/chunk-6WKTY4YQ.js.map +1 -0
  19. package/dist/{chunk-CG4A43HM.mjs → chunk-72U6ETHG.js} +1 -0
  20. package/dist/chunk-72U6ETHG.js.map +1 -0
  21. package/dist/chunk-AB4DHWRB.js +2 -0
  22. package/dist/chunk-AB4DHWRB.js.map +1 -0
  23. package/dist/{chunk-BGXZA4EM.mjs → chunk-ARVEJERC.js} +1 -0
  24. package/dist/chunk-ARVEJERC.js.map +1 -0
  25. package/dist/chunk-CBAHSBSW.js +2 -0
  26. package/dist/chunk-CBAHSBSW.js.map +1 -0
  27. package/dist/chunk-FSJPJZNH.js +2 -0
  28. package/dist/chunk-FSJPJZNH.js.map +1 -0
  29. package/dist/chunk-GD7WEHDA.js +9 -0
  30. package/dist/chunk-GD7WEHDA.js.map +1 -0
  31. package/dist/chunk-GSXHJEKW.js +75 -0
  32. package/dist/chunk-GSXHJEKW.js.map +1 -0
  33. package/dist/chunk-HGLIJXXG.js +3 -0
  34. package/dist/chunk-HGLIJXXG.js.map +1 -0
  35. package/dist/chunk-JXPGBZXN.js +94 -0
  36. package/dist/chunk-JXPGBZXN.js.map +1 -0
  37. package/dist/chunk-L5ULN3IT.js +2 -0
  38. package/dist/chunk-L5ULN3IT.js.map +1 -0
  39. package/dist/chunk-L7ZIX4SU.js +2 -0
  40. package/dist/chunk-L7ZIX4SU.js.map +1 -0
  41. package/dist/chunk-LAYHULHH.js +2 -0
  42. package/dist/chunk-LAYHULHH.js.map +1 -0
  43. package/dist/chunk-MA4JWWRO.js +6 -0
  44. package/dist/chunk-MA4JWWRO.js.map +1 -0
  45. package/dist/chunk-OEB7WG3G.js +4 -0
  46. package/dist/chunk-OEB7WG3G.js.map +1 -0
  47. package/dist/chunk-R6QTIUFA.js +2 -0
  48. package/dist/chunk-R6QTIUFA.js.map +1 -0
  49. package/dist/chunk-TR32ZRNC.js +2 -0
  50. package/dist/chunk-TR32ZRNC.js.map +1 -0
  51. package/dist/chunk-UK7OFHQR.js +12 -0
  52. package/dist/chunk-UK7OFHQR.js.map +1 -0
  53. package/dist/chunk-UUBO75GS.js +2 -0
  54. package/dist/chunk-UUBO75GS.js.map +1 -0
  55. package/dist/chunk-WEQUQAB7.js +2831 -0
  56. package/dist/chunk-WEQUQAB7.js.map +1 -0
  57. package/dist/chunk-XWOTEZCO.js +2 -0
  58. package/dist/chunk-XWOTEZCO.js.map +1 -0
  59. package/dist/impl-2TCAWTV7.js +2 -0
  60. package/dist/impl-2TCAWTV7.js.map +1 -0
  61. package/dist/impl-42N5BEEM.js +6 -0
  62. package/dist/impl-42N5BEEM.js.map +1 -0
  63. package/dist/impl-4CRAE4V6.js +2 -0
  64. package/dist/impl-4CRAE4V6.js.map +1 -0
  65. package/dist/impl-5N4IKF4U.js +2 -0
  66. package/dist/impl-5N4IKF4U.js.map +1 -0
  67. package/dist/impl-5NAYXPAC.js +2 -0
  68. package/dist/impl-5NAYXPAC.js.map +1 -0
  69. package/dist/impl-5YV7K446.js +2 -0
  70. package/dist/impl-5YV7K446.js.map +1 -0
  71. package/dist/impl-645HDE5S.js +2 -0
  72. package/dist/impl-645HDE5S.js.map +1 -0
  73. package/dist/impl-7DL7ZS4K.js +9 -0
  74. package/dist/impl-7DL7ZS4K.js.map +1 -0
  75. package/dist/impl-7JFWBWQZ.js +2 -0
  76. package/dist/impl-7JFWBWQZ.js.map +1 -0
  77. package/dist/impl-B4WDU4OW.js +2 -0
  78. package/dist/impl-B4WDU4OW.js.map +1 -0
  79. package/dist/impl-B5C37V2L.js +2 -0
  80. package/dist/impl-B5C37V2L.js.map +1 -0
  81. package/dist/impl-BWZUWHVF.js +2 -0
  82. package/dist/impl-BWZUWHVF.js.map +1 -0
  83. package/dist/impl-D47U6GWY.js +2 -0
  84. package/dist/impl-D47U6GWY.js.map +1 -0
  85. package/dist/impl-FAOTDDQ5.js +2 -0
  86. package/dist/impl-FAOTDDQ5.js.map +1 -0
  87. package/dist/impl-FYAEBZIM.js +2 -0
  88. package/dist/impl-FYAEBZIM.js.map +1 -0
  89. package/dist/impl-GGEEIOQF.js +2 -0
  90. package/dist/impl-GGEEIOQF.js.map +1 -0
  91. package/dist/impl-IAKEYWMV.js +2 -0
  92. package/dist/impl-IAKEYWMV.js.map +1 -0
  93. package/dist/impl-IFLVVVBT.js +2 -0
  94. package/dist/impl-IFLVVVBT.js.map +1 -0
  95. package/dist/impl-JFHF7SF7.js +2 -0
  96. package/dist/impl-JFHF7SF7.js.map +1 -0
  97. package/dist/impl-JPOE7MKX.js +2 -0
  98. package/dist/impl-JPOE7MKX.js.map +1 -0
  99. package/dist/impl-KRV7L5SP.js +2 -0
  100. package/dist/impl-KRV7L5SP.js.map +1 -0
  101. package/dist/impl-MGARGP2M.js +2 -0
  102. package/dist/impl-MGARGP2M.js.map +1 -0
  103. package/dist/impl-N3R63BI4.js +2 -0
  104. package/dist/impl-N3R63BI4.js.map +1 -0
  105. package/dist/impl-NCWU4WVO.js +2 -0
  106. package/dist/impl-NCWU4WVO.js.map +1 -0
  107. package/dist/impl-NE4OGF7U.js +2 -0
  108. package/dist/impl-NE4OGF7U.js.map +1 -0
  109. package/dist/impl-NNBY4R6T.js +2 -0
  110. package/dist/impl-NNBY4R6T.js.map +1 -0
  111. package/dist/impl-PERB6GYW.js +6 -0
  112. package/dist/impl-PERB6GYW.js.map +1 -0
  113. package/dist/impl-QSO5YEU5.js +2 -0
  114. package/dist/impl-QSO5YEU5.js.map +1 -0
  115. package/dist/impl-R3SREBHK.js +2 -0
  116. package/dist/impl-R3SREBHK.js.map +1 -0
  117. package/dist/impl-RCQ2XX63.js +2 -0
  118. package/dist/impl-RCQ2XX63.js.map +1 -0
  119. package/dist/impl-TKRPL6CJ.js +12 -0
  120. package/dist/impl-TKRPL6CJ.js.map +1 -0
  121. package/dist/impl-TMKWWJKO.js +2 -0
  122. package/dist/impl-TMKWWJKO.js.map +1 -0
  123. package/dist/impl-TOLP53IM.js +2 -0
  124. package/dist/impl-TOLP53IM.js.map +1 -0
  125. package/dist/impl-VDNSV4OU.js +6 -0
  126. package/dist/impl-VDNSV4OU.js.map +1 -0
  127. package/dist/impl-VUKRE7OK.js +2 -0
  128. package/dist/impl-VUKRE7OK.js.map +1 -0
  129. package/dist/impl-XGFKUJGX.js +7 -0
  130. package/dist/impl-XGFKUJGX.js.map +1 -0
  131. package/dist/impl-Z4G3R4DW.js +4 -0
  132. package/dist/impl-Z4G3R4DW.js.map +1 -0
  133. package/dist/impl-ZN4EG5UY.js +2 -0
  134. package/dist/impl-ZN4EG5UY.js.map +1 -0
  135. package/dist/impl-ZX6PDQW6.js +2 -0
  136. package/dist/impl-ZX6PDQW6.js.map +1 -0
  137. package/dist/index.d.ts +117643 -0
  138. package/dist/index.js +5 -0
  139. package/dist/index.js.map +1 -0
  140. package/package.json +57 -54
  141. package/dist/bin/bash-complete.mjs +0 -3
  142. package/dist/bin/cli.mjs +0 -2
  143. package/dist/bin/deprecated-command.mjs +0 -6
  144. package/dist/chunk-BWXKSYTY.mjs +0 -1
  145. package/dist/chunk-N4KHG2LT.mjs +0 -3
  146. package/dist/chunk-RTBRALWU.mjs +0 -48
  147. package/dist/chunk-WVOQBBD4.mjs +0 -1
  148. package/dist/impl-2SXC6DB5.mjs +0 -1
  149. package/dist/impl-3WS4KAXC.mjs +0 -1
  150. package/dist/impl-573JHF5Q.mjs +0 -1
  151. package/dist/impl-5G2VT3GE.mjs +0 -1
  152. package/dist/impl-5M2JICLA.mjs +0 -1
  153. package/dist/impl-6HCHXNYK.mjs +0 -1
  154. package/dist/impl-6HYSKLJA.mjs +0 -1
  155. package/dist/impl-6ZEB6Z2K.mjs +0 -1
  156. package/dist/impl-7R553APD.mjs +0 -1
  157. package/dist/impl-7YBBGEJS.mjs +0 -1
  158. package/dist/impl-AE4WVFKM.mjs +0 -1
  159. package/dist/impl-BUP5GVYQ.mjs +0 -1
  160. package/dist/impl-DDSJFH7O.mjs +0 -1
  161. package/dist/impl-EAWZEQHP.mjs +0 -1
  162. package/dist/impl-EBN6UN6B.mjs +0 -1
  163. package/dist/impl-F3GN5QBQ.mjs +0 -1
  164. package/dist/impl-F7EIWKOK.mjs +0 -1
  165. package/dist/impl-GOITDIYO.mjs +0 -1
  166. package/dist/impl-GWDASXMF.mjs +0 -1
  167. package/dist/impl-I2HNOFXK.mjs +0 -1
  168. package/dist/impl-J6TM5I2T.mjs +0 -1
  169. package/dist/impl-JKKLZIWW.mjs +0 -1
  170. package/dist/impl-L32NAFWG.mjs +0 -1
  171. package/dist/impl-LTXXHRJN.mjs +0 -1
  172. package/dist/impl-NFGCPTZ6.mjs +0 -1
  173. package/dist/impl-NFKMASFN.mjs +0 -1
  174. package/dist/impl-OCKVP3CG.mjs +0 -1
  175. package/dist/impl-ORZO5DKU.mjs +0 -1
  176. package/dist/impl-TMYFQHHJ.mjs +0 -1
  177. package/dist/impl-TN3TNFJ3.mjs +0 -1
  178. package/dist/impl-TY543E6H.mjs +0 -1
  179. package/dist/impl-U5YMWF3E.mjs +0 -1
  180. package/dist/impl-V26VW5PW.mjs +0 -1
  181. package/dist/impl-V75HSG53.mjs +0 -1
  182. package/dist/impl-VTEL3Q42.mjs +0 -1
  183. package/dist/impl-WJX6QJZG.mjs +0 -1
  184. package/dist/impl-YF6RKW6X.mjs +0 -1
  185. package/dist/impl-ZHAW5DO6.mjs +0 -1
  186. package/dist/index.mjs +0 -2923
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/cron/pullCronPageOfIdentifiers.ts","../src/lib/cron/markCronIdentifierCompleted.ts","../src/lib/cron/pushCronIdentifiersFromCsv.ts","../src/lib/cron/markRequestDataSiloIdsCompleted.ts","../src/lib/cron/pullChunkedCustomSiloOutstandingIdentifiers.ts"],"sourcesContent":["import * as t from 'io-ts';\nimport { decodeCodec } from '@transcend-io/type-utils';\nimport { RequestAction } from '@transcend-io/privacy-types';\nimport type { Got } from 'got';\n\nexport const CronIdentifier = t.type({\n /** The identifier value */\n identifier: t.string,\n /** The type of identifier */\n type: t.string,\n /** The core identifier of the request */\n coreIdentifier: t.string,\n /** The ID of the underlying data silo */\n dataSiloId: t.string,\n /** The ID of the underlying request */\n requestId: t.string,\n /** The request nonce */\n nonce: t.string,\n /** The time the request was created */\n requestCreatedAt: t.string,\n /** The number of days until the request is overdue */\n daysUntilOverdue: t.number,\n /** Request attributes */\n attributes: t.array(\n t.type({\n key: t.string,\n values: t.array(t.string),\n }),\n ),\n});\n\n/** Type override */\nexport type CronIdentifier = t.TypeOf<typeof CronIdentifier>;\n\n/**\n * Pull a offset of identifiers for a cron job\n *\n * @see https://docs.transcend.io/docs/api-reference/GET/v1/data-silo/(id)/pending-requests/(type)\n * @param sombra - Sombra instance configured to make requests\n * @param options - Additional options\n * @returns Successfully submitted request\n */\nexport async function pullCronPageOfIdentifiers(\n sombra: Got,\n {\n dataSiloId,\n limit = 100,\n offset = 0,\n requestType,\n }: {\n /** Data Silo ID */\n dataSiloId: string;\n /** Type of request */\n requestType: RequestAction;\n /** Number of identifiers to pull in */\n limit?: number;\n /** Page to pull in */\n offset?: number;\n },\n): Promise<CronIdentifier[]> {\n try {\n // Make the GraphQL request\n const response = await sombra\n .get(`v1/data-silo/${dataSiloId}/pending-requests/${requestType}`, {\n searchParams: {\n offset,\n limit,\n },\n })\n .json();\n\n const { items } = decodeCodec(\n t.type({\n items: t.array(CronIdentifier),\n }),\n response,\n );\n return items;\n } catch (err) {\n throw new Error(\n `Received an error from server: ${err?.response?.body || err?.message}`,\n );\n }\n}\n","import type { Got } from 'got';\nimport * as t from 'io-ts';\n\n/**\n * Minimal set required to mark as completed\n */\nexport const CronIdentifierPush = t.type({\n nonce: t.string,\n identifier: t.string,\n});\n\n/** Type override */\nexport type CronIdentifierPush = t.TypeOf<typeof CronIdentifierPush>;\n\n/**\n * Mark an identifier output by the cron job as completed.\n *\n * @see https://docs.transcend.io/docs/api-reference/PUT/v1/data-silo\n * @param sombra - Sombra instance configured to make requests\n * @param options - Additional options\n * @returns Successfully submitted request, false if not in a state to update\n */\nexport async function markCronIdentifierCompleted(\n sombra: Got,\n { nonce, identifier }: CronIdentifierPush,\n): Promise<boolean> {\n try {\n // Make the GraphQL request\n await sombra.put('v1/data-silo', {\n headers: {\n 'x-transcend-nonce': nonce,\n },\n json: {\n profiles: [\n {\n profileId: identifier,\n },\n ],\n },\n });\n return true;\n } catch (err) {\n // handle gracefully\n if (err.response?.statusCode === 409) {\n return false;\n }\n throw new Error(\n `Received an error from server: ${err?.response?.body || err?.message}`,\n );\n }\n}\n","import { map, mapSeries } from '@/lib/bluebird-replace';\nimport { chunk } from 'lodash-es';\nimport { createSombraGotInstance } from '../graphql';\nimport colors from 'colors';\nimport {\n markCronIdentifierCompleted,\n CronIdentifierPush,\n} from './markCronIdentifierCompleted';\nimport cliProgress from 'cli-progress';\nimport { logger } from '../../logger';\nimport { readCsv } from '../requests';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\n\n/**\n * Given a CSV of cron job outputs, mark all requests as completed in Transcend\n *\n * @param options - Options\n * @returns Number of items marked as completed\n */\nexport async function pushCronIdentifiersFromCsv({\n file,\n dataSiloId,\n auth,\n sombraAuth,\n concurrency = 100,\n transcendUrl = DEFAULT_TRANSCEND_API,\n sleepSeconds = 10,\n}: {\n /** CSV file path */\n file: string;\n /** Transcend API key authentication */\n auth: string;\n /** Data Silo ID to pull down jobs for */\n dataSiloId: string;\n /** Upload concurrency */\n concurrency?: number;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Sombra API key authentication */\n sombraAuth?: string;\n /** Sleep time in seconds between chunks of concurrent calls */\n sleepSeconds?: number;\n}): Promise<number> {\n // Create sombra instance to communicate with\n const sombra = await createSombraGotInstance(transcendUrl, auth, sombraAuth);\n\n // Read from CSV\n logger.info(colors.magenta(`Reading \"${file}\" from disk`));\n const activeResults = readCsv(file, CronIdentifierPush);\n\n // Notify Transcend\n logger.info(\n colors.magenta(\n `Notifying Transcend for data silo \"${dataSiloId}\" marking \"${activeResults.length}\" identifiers as completed.`,\n ),\n );\n\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar(\n {},\n cliProgress.Presets.shades_classic,\n );\n\n let successCount = 0;\n let failureCount = 0;\n let errorCount = 0;\n progressBar.start(activeResults.length, 0);\n\n // Process in chunks with sleep intervals\n const chunks = chunk(activeResults, concurrency);\n const totalChunks = chunks.length;\n const processChunk = async (\n items: CronIdentifierPush[],\n chunkIndex: number,\n ): Promise<void> => {\n logger.info(\n colors.blue(\n `Processing chunk ${chunkIndex + 1}/${totalChunks} (${\n chunk.length\n } items)`,\n ),\n );\n\n // Process the items of the chunk concurrently\n await map(items, async (identifier) => {\n try {\n const success = await markCronIdentifierCompleted(sombra, identifier);\n if (success) {\n successCount += 1;\n } else {\n failureCount += 1;\n }\n } catch (e) {\n logger.error(\n colors.red(\n `Error notifying Transcend for identifier \"${identifier.identifier}\" - ${e?.message}`,\n ),\n );\n errorCount += 1;\n }\n progressBar.update(successCount + failureCount);\n });\n\n // Sleep between chunks (except for the last chunk)\n if (sleepSeconds > 0 && chunkIndex < totalChunks - 1) {\n logger.info(\n colors.yellow(`Sleeping for ${sleepSeconds}s before next chunk...`),\n );\n\n await new Promise((resolve) => {\n setTimeout(resolve, sleepSeconds * 1000);\n });\n }\n };\n\n // Process all chunks sequentially\n await mapSeries(chunks, processChunk);\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n logger.info(\n colors.green(\n `Successfully notified Transcend for ${successCount} identifiers in \"${\n totalTime / 1000\n }\" seconds!`,\n ),\n );\n if (failureCount) {\n logger.info(\n colors.magenta(\n `There were ${failureCount} identifiers that were not in a state to be updated.` +\n 'They likely have already been resolved.',\n ),\n );\n }\n if (errorCount) {\n logger.error(\n colors.red(\n `There were ${errorCount} identifiers that failed to be updated. Please review the logs for more information.`,\n ),\n );\n throw new Error('Failed to update all identifiers');\n }\n return activeResults.length;\n}\n","import { map } from '@/lib/bluebird-replace';\nimport colors from 'colors';\nimport { logger } from '../../logger';\nimport {\n CHANGE_REQUEST_DATA_SILO_STATUS,\n fetchRequestDataSilo,\n makeGraphQLRequest,\n buildTranscendGraphQLClient,\n} from '../graphql';\nimport cliProgress from 'cli-progress';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\nimport { RequestDataSiloStatus } from '@transcend-io/privacy-types';\n\n/**\n * Given a CSV of Request IDs, mark associated RequestDataSilos as completed\n *\n * @param options - Options\n * @returns Number of items marked as completed\n */\nexport async function markRequestDataSiloIdsCompleted({\n requestIds,\n dataSiloId,\n auth,\n concurrency = 100,\n status = RequestDataSiloStatus.Resolved,\n transcendUrl = DEFAULT_TRANSCEND_API,\n}: {\n /** The list of request ids to mark as completed */\n requestIds: string[];\n /** Transcend API key authentication */\n auth: string;\n /** Data Silo ID to pull down jobs for */\n dataSiloId: string;\n /** Status to update requests to */\n status?: RequestDataSiloStatus;\n /** Upload concurrency */\n concurrency?: number;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n}): Promise<number> {\n // Find all requests made before createdAt that are in a removing data state\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar(\n {},\n cliProgress.Presets.shades_classic,\n );\n\n // Notify Transcend\n logger.info(\n colors.magenta(\n `Notifying Transcend for data silo \"${dataSiloId}\" marking \"${requestIds.length}\" requests as completed.`,\n ),\n );\n\n let total = 0;\n progressBar.start(requestIds.length, 0);\n await map(\n requestIds,\n async (requestId) => {\n const requestDataSilo = await fetchRequestDataSilo(client, {\n requestId,\n dataSiloId,\n });\n\n try {\n await makeGraphQLRequest<{\n /** Whether we successfully uploaded the results */\n success: boolean;\n }>(client, CHANGE_REQUEST_DATA_SILO_STATUS, {\n requestDataSiloId: requestDataSilo.id,\n status,\n });\n } catch (err) {\n if (!err.message.includes('Client error: Request must be active:')) {\n throw err;\n }\n }\n\n total += 1;\n progressBar.update(total);\n },\n { concurrency },\n );\n\n progressBar.stop();\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n logger.info(\n colors.green(\n `Successfully notified Transcend in \"${totalTime / 1000}\" seconds!`,\n ),\n );\n return requestIds.length;\n}\n","import {\n buildTranscendGraphQLClient,\n createSombraGotInstance,\n fetchRequestDataSiloActiveCount,\n} from '../graphql';\nimport colors from 'colors';\nimport cliProgress from 'cli-progress';\nimport {\n pullCronPageOfIdentifiers,\n CronIdentifier,\n} from './pullCronPageOfIdentifiers';\nimport { RequestAction } from '@transcend-io/privacy-types';\n\nimport { logger } from '../../logger';\nimport { DEFAULT_TRANSCEND_API } from '../../constants';\nimport { mapSeries } from '@/lib/bluebird-replace';\n\n/**\n * A CSV formatted identifier\n */\nexport type CsvFormattedIdentifier = {\n [k in string]: string | null | boolean | number;\n};\n\nexport interface CronIdentifierWithAction extends CronIdentifier {\n /** The request action that the identifier relates to */\n action: RequestAction;\n}\n\n/**\n * Pull the set of identifiers outstanding for a cron or AVC integration\n *\n * This function is designed to be used in a loop, and will call the onSave callback\n * with a chunk of identifiers when the savePageSize is reached.\n *\n * @param options - Options\n * @returns The identifiers and identifiers formatted for CSV\n */\nexport async function pullChunkedCustomSiloOutstandingIdentifiers({\n dataSiloId,\n auth,\n sombraAuth,\n actions,\n apiPageSize = 100,\n savePageSize = 1000,\n onSave,\n transcendUrl = DEFAULT_TRANSCEND_API,\n skipRequestCount = false,\n}: {\n /** Transcend API key authentication */\n auth: string;\n /** Data Silo ID to pull down jobs for */\n dataSiloId: string;\n /** The request actions to fetch */\n actions: RequestAction[];\n /** How many identifiers to pull in a single call to the backend */\n apiPageSize: number;\n /** How many identifiers to save at a time (usually to a CSV file, should be a multiple of apiPageSize) */\n savePageSize: number;\n /** Callback function called when a chunk of identifiers is ready to be saved */\n onSave: (chunk: CsvFormattedIdentifier[]) => Promise<void>;\n /** API URL for Transcend backend */\n transcendUrl?: string;\n /** Sombra API key authentication */\n sombraAuth?: string;\n /** Skip request count */\n skipRequestCount?: boolean;\n}): Promise<{\n /** Raw Identifiers */\n identifiers: CronIdentifierWithAction[];\n}> {\n // Validate savePageSize\n if (savePageSize % apiPageSize !== 0) {\n throw new Error(\n `savePageSize must be a multiple of apiPageSize. savePageSize: ${savePageSize}, apiPageSize: ${apiPageSize}`,\n );\n }\n\n // Create sombra instance to communicate with\n const sombra = await createSombraGotInstance(transcendUrl, auth, sombraAuth);\n\n // Create GraphQL client to connect to Transcend backend\n const client = buildTranscendGraphQLClient(transcendUrl, auth);\n\n let totalRequestCount = 0;\n if (!skipRequestCount) {\n totalRequestCount = await fetchRequestDataSiloActiveCount(client, {\n dataSiloId,\n });\n }\n\n logger.info(\n colors.magenta(\n `Pulling ${\n skipRequestCount ? 'all' : totalRequestCount\n } outstanding request identifiers ` +\n `for data silo: \"${dataSiloId}\" for requests of types \"${actions.join(\n '\", \"',\n )}\"`,\n ),\n );\n\n // Time duration\n const t0 = new Date().getTime();\n // create a new progress bar instance and use shades_classic theme\n const progressBar = new cliProgress.SingleBar(\n {},\n cliProgress.Presets.shades_classic,\n );\n const foundRequestIds = new Set<string>();\n\n // identifiers found in total\n const identifiers: CronIdentifierWithAction[] = [];\n // current chunk of identifiers to be saved\n let currentChunk: CsvFormattedIdentifier[] = [];\n\n // map over each action\n if (!skipRequestCount) {\n progressBar.start(totalRequestCount, 0);\n }\n await mapSeries(actions, async (action) => {\n let offset = 0;\n let shouldContinue = true;\n\n // Fetch a page of identifiers\n while (shouldContinue) {\n const pageIdentifiers = await pullCronPageOfIdentifiers(sombra, {\n dataSiloId,\n limit: apiPageSize,\n offset,\n requestType: action,\n });\n\n const identifiersWithAction: CronIdentifierWithAction[] =\n pageIdentifiers.map((identifier) => {\n foundRequestIds.add(identifier.requestId);\n return {\n ...identifier,\n action,\n };\n });\n\n const csvFormattedIdentifiers = identifiersWithAction.map(\n ({ attributes, ...identifier }) => ({\n ...identifier,\n ...attributes.reduce(\n (acc, val) =>\n Object.assign(acc, {\n [val.key]: val.values.join(','),\n }),\n {},\n ),\n }),\n );\n\n identifiers.push(...identifiersWithAction);\n currentChunk.push(...csvFormattedIdentifiers);\n\n // Check if we've reached the savePageSize and call the onSave callback\n if (currentChunk.length >= savePageSize) {\n await onSave(currentChunk);\n currentChunk = [];\n }\n\n shouldContinue = pageIdentifiers.length === apiPageSize;\n offset += apiPageSize;\n if (!skipRequestCount) {\n progressBar.update(foundRequestIds.size);\n } else {\n logger.info(\n colors.magenta(\n `Pulled ${pageIdentifiers.length} outstanding identifiers for ${foundRequestIds.size} requests`,\n ),\n );\n }\n }\n });\n\n // Save any remaining identifiers in the current chunk\n if (currentChunk.length > 0) {\n await onSave(currentChunk);\n }\n\n if (!skipRequestCount) {\n progressBar.stop();\n }\n const t1 = new Date().getTime();\n const totalTime = t1 - t0;\n\n logger.info(\n colors.green(\n `Successfully pulled ${identifiers.length} outstanding identifiers from ${\n foundRequestIds.size\n } requests in \"${totalTime / 1000}\" seconds!`,\n ),\n );\n\n return { identifiers };\n}\n"],"mappings":"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","names":["t","decodeCodec","CronIdentifier","pullCronPageOfIdentifiers","sombra","dataSiloId","limit","offset","requestType","response","items","err","t","CronIdentifierPush","markCronIdentifierCompleted","sombra","nonce","identifier","err","chunk","colors","cliProgress","pushCronIdentifiersFromCsv","file","dataSiloId","auth","sombraAuth","concurrency","transcendUrl","DEFAULT_TRANSCEND_API","sleepSeconds","sombra","createSombraGotInstance","logger","colors","activeResults","readCsv","CronIdentifierPush","t0","progressBar","cliProgress","successCount","failureCount","errorCount","chunks","chunk","totalChunks","mapSeries","items","chunkIndex","map","identifier","markCronIdentifierCompleted","e","resolve","totalTime","colors","cliProgress","RequestDataSiloStatus","markRequestDataSiloIdsCompleted","requestIds","dataSiloId","auth","concurrency","status","transcendUrl","DEFAULT_TRANSCEND_API","client","buildTranscendGraphQLClient","t0","progressBar","cliProgress","logger","colors","total","map","requestId","requestDataSilo","fetchRequestDataSilo","makeGraphQLRequest","CHANGE_REQUEST_DATA_SILO_STATUS","err","totalTime","colors","cliProgress","pullChunkedCustomSiloOutstandingIdentifiers","dataSiloId","auth","sombraAuth","actions","apiPageSize","savePageSize","onSave","transcendUrl","DEFAULT_TRANSCEND_API","skipRequestCount","sombra","createSombraGotInstance","client","buildTranscendGraphQLClient","totalRequestCount","fetchRequestDataSiloActiveCount","logger","colors","t0","progressBar","cliProgress","foundRequestIds","identifiers","currentChunk","mapSeries","action","offset","shouldContinue","pageIdentifiers","pullCronPageOfIdentifiers","identifiersWithAction","identifier","csvFormattedIdentifiers","attributes","acc","val","totalTime"]}