[{"data":1,"prerenderedAt":4491},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fapi\u002Fexamples-streams":3},{"id":4,"title":5,"body":6,"description":4482,"extension":4483,"meta":4484,"navigation":4485,"path":4486,"redirect":4487,"seo":4488,"stem":4489,"__hash__":4490},"docs\u002Fdocs\u002Fapi\u002Fexamples-streams.md","Stream API Code Examples",{"type":7,"value":8,"toc":4476},"minimark",[9,13,23,28,77,81,84,4301,4305,4308,4394,4397,4449,4453,4472],[10,11,5],"h1",{"id":12},"stream-api-code-examples",[14,15,16,17,22],"p",{},"Practical code examples for the DBConvert Streams Stream API. For the complete endpoint reference, see ",[18,19,21],"a",{"href":20},"\u002Fdocs\u002Fapi\u002Fstreams","Streams API Workflows",".",[24,25,27],"h2",{"id":26},"prerequisites","Prerequisites",[29,30,31,35,43,50],"ul",{},[32,33,34],"li",{},"A valid DBConvert Streams API key and Install ID",[32,36,37,38,42],{},"The API server running (default: ",[39,40,41],"code",{},"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1",")",[32,44,45,46,42],{},"At least one configured source and target connection (see ",[18,47,49],{"href":48},"\u002Fdocs\u002Fapi\u002Fexamples-connections","Connection API Examples",[32,51,52,53],{},"Language-specific dependencies:\n",[29,54,55,65,74],{},[32,56,57,58,61,62,42],{},"Python: ",[39,59,60],{},"requests"," (",[39,63,64],{},"pip install requests",[32,66,67,68,61,71,42],{},"Node.js: ",[39,69,70],{},"axios",[39,72,73],{},"npm install axios",[32,75,76],{},"PowerShell: Version 5.1 or later",[24,78,80],{"id":79},"examples-by-technology","Examples by technology",[14,82,83],{},"Select a tab to view the workflow in the client you use.",[85,86,87,1103,1847,3758],"api-example-tabs",{},[88,89,91],"template",{"v-slot:curl":90},"",[92,93,97],"pre",{"className":94,"code":95,"language":96,"meta":90,"style":90},"language-bash shiki shiki-themes github-light github-dark","# Set credentials\nexport API_KEY=\"your_api_key_here\"\nexport INSTALL_ID=\"your_install_id_here\"\nexport API_URL=\"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\"\n\n# Load user configurations (required before other endpoints)\ncurl \"$API_URL\u002Fuser\u002Fconfigs\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Create a stream configuration\nconfig_result=$(curl -s -X POST \"$API_URL\u002Fstream-configs\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"name\": \"mysql_to_postgresql\",\n    \"mode\": \"load\",\n    \"source\": {\n      \"connections\": [\n        {\n          \"connectionId\": \"conn_source_id\",\n          \"database\": \"sakila\",\n          \"tables\": [\n            {\"name\": \"actor\"},\n            {\"name\": \"film\"}\n          ]\n        }\n      ]\n    },\n    \"target\": {\n      \"id\": \"conn_target_id\",\n      \"spec\": {\n        \"db\": {\n          \"database\": \"postgres\",\n          \"writeMode\": \"truncate_and_load\",\n          \"structureOptions\": {\n            \"tables\": true,\n            \"indexes\": true,\n            \"foreignKeys\": true\n          }\n        }\n      }\n    }\n  }')\n\n# Extract configuration ID\nCONFIG_ID=$(echo $config_result | jq -r '.id')\necho \"Config ID: $CONFIG_ID\"  # config_...\n\n# List all configurations\ncurl \"$API_URL\u002Fstream-configs\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Start a stream from the configuration\nstream_result=$(curl -s -X POST \"$API_URL\u002Fstream-configs\u002F$CONFIG_ID\u002Fstart\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\")\n\n# Extract stream execution ID\nSTREAM_ID=$(echo $stream_result | jq -r '.id')\necho \"Stream ID: $STREAM_ID\"  # stream_...\n\n# Get stream statistics\ncurl \"$API_URL\u002Fstreams\u002F$STREAM_ID\u002Fstats\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Pause a running stream (returns 204 No Content)\ncurl -X POST \"$API_URL\u002Fstreams\u002F$STREAM_ID\u002Fpause\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Resume a paused stream (returns 204 No Content)\ncurl -X POST \"$API_URL\u002Fstreams\u002F$STREAM_ID\u002Fresume\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Stop a stream (returns 204 No Content)\ncurl -X POST \"$API_URL\u002Fstreams\u002F$STREAM_ID\u002Fstop\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Get run history for a configuration\ncurl \"$API_URL\u002Fstream-configs\u002F$CONFIG_ID\u002Fhistory\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Get persisted logs for a completed stream\ncurl \"$API_URL\u002Fstreams\u002F$STREAM_ID\u002Flogs\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\"\n\n# Delete a configuration (requires confirmation header)\ncurl -X DELETE \"$API_URL\u002Fstream-configs\u002F$CONFIG_ID\" \\\n  -H \"X-API-Key: $API_KEY\" \\\n  -H \"X-Install-ID: $INSTALL_ID\" \\\n  -H \"X-Confirm-Delete: true\"\n","bash",[39,98,99,108,126,139,152,159,165,185,202,216,221,227,258,271,284,294,303,309,315,321,327,333,339,345,351,357,363,369,375,381,387,393,399,405,411,417,423,429,435,441,447,453,458,464,470,479,484,490,520,536,541,547,560,573,584,589,595,627,640,653,658,664,689,705,710,716,735,748,759,764,770,792,805,816,821,827,849,862,873,878,884,906,919,930,935,941,959,972,983,988,994,1012,1025,1036,1041,1047,1069,1082,1095],{"__ignoreMap":90},[100,101,104],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"sJ8bj","# Set credentials\n",[100,109,111,115,119,122],{"class":102,"line":110},2,[100,112,114],{"class":113},"szBVR","export",[100,116,118],{"class":117},"sVt8B"," API_KEY",[100,120,121],{"class":113},"=",[100,123,125],{"class":124},"sZZnC","\"your_api_key_here\"\n",[100,127,129,131,134,136],{"class":102,"line":128},3,[100,130,114],{"class":113},[100,132,133],{"class":117}," INSTALL_ID",[100,135,121],{"class":113},[100,137,138],{"class":124},"\"your_install_id_here\"\n",[100,140,142,144,147,149],{"class":102,"line":141},4,[100,143,114],{"class":113},[100,145,146],{"class":117}," API_URL",[100,148,121],{"class":113},[100,150,151],{"class":124},"\"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\"\n",[100,153,155],{"class":102,"line":154},5,[100,156,158],{"emptyLinePlaceholder":157},true,"\n",[100,160,162],{"class":102,"line":161},6,[100,163,164],{"class":106},"# Load user configurations (required before other endpoints)\n",[100,166,168,172,175,178,181],{"class":102,"line":167},7,[100,169,171],{"class":170},"sScJk","curl",[100,173,174],{"class":124}," \"",[100,176,177],{"class":117},"$API_URL",[100,179,180],{"class":124},"\u002Fuser\u002Fconfigs\"",[100,182,184],{"class":183},"sj4cs"," \\\n",[100,186,188,191,194,197,200],{"class":102,"line":187},8,[100,189,190],{"class":183},"  -H",[100,192,193],{"class":124}," \"X-API-Key: ",[100,195,196],{"class":117},"$API_KEY",[100,198,199],{"class":124},"\"",[100,201,184],{"class":183},[100,203,205,207,210,213],{"class":102,"line":204},9,[100,206,190],{"class":183},[100,208,209],{"class":124}," \"X-Install-ID: ",[100,211,212],{"class":117},"$INSTALL_ID",[100,214,215],{"class":124},"\"\n",[100,217,219],{"class":102,"line":218},10,[100,220,158],{"emptyLinePlaceholder":157},[100,222,224],{"class":102,"line":223},11,[100,225,226],{"class":106},"# Create a stream configuration\n",[100,228,230,233,235,238,240,243,246,249,251,253,256],{"class":102,"line":229},12,[100,231,232],{"class":117},"config_result",[100,234,121],{"class":113},[100,236,237],{"class":117},"$(",[100,239,171],{"class":170},[100,241,242],{"class":183}," -s",[100,244,245],{"class":183}," -X",[100,247,248],{"class":124}," POST",[100,250,174],{"class":124},[100,252,177],{"class":117},[100,254,255],{"class":124},"\u002Fstream-configs\"",[100,257,184],{"class":183},[100,259,261,263,265,267,269],{"class":102,"line":260},13,[100,262,190],{"class":183},[100,264,193],{"class":124},[100,266,196],{"class":117},[100,268,199],{"class":124},[100,270,184],{"class":183},[100,272,274,276,278,280,282],{"class":102,"line":273},14,[100,275,190],{"class":183},[100,277,209],{"class":124},[100,279,212],{"class":117},[100,281,199],{"class":124},[100,283,184],{"class":183},[100,285,287,289,292],{"class":102,"line":286},15,[100,288,190],{"class":183},[100,290,291],{"class":124}," \"Content-Type: application\u002Fjson\"",[100,293,184],{"class":183},[100,295,297,300],{"class":102,"line":296},16,[100,298,299],{"class":183},"  -d",[100,301,302],{"class":124}," '{\n",[100,304,306],{"class":102,"line":305},17,[100,307,308],{"class":124},"    \"name\": \"mysql_to_postgresql\",\n",[100,310,312],{"class":102,"line":311},18,[100,313,314],{"class":124},"    \"mode\": \"load\",\n",[100,316,318],{"class":102,"line":317},19,[100,319,320],{"class":124},"    \"source\": {\n",[100,322,324],{"class":102,"line":323},20,[100,325,326],{"class":124},"      \"connections\": [\n",[100,328,330],{"class":102,"line":329},21,[100,331,332],{"class":124},"        {\n",[100,334,336],{"class":102,"line":335},22,[100,337,338],{"class":124},"          \"connectionId\": \"conn_source_id\",\n",[100,340,342],{"class":102,"line":341},23,[100,343,344],{"class":124},"          \"database\": \"sakila\",\n",[100,346,348],{"class":102,"line":347},24,[100,349,350],{"class":124},"          \"tables\": [\n",[100,352,354],{"class":102,"line":353},25,[100,355,356],{"class":124},"            {\"name\": \"actor\"},\n",[100,358,360],{"class":102,"line":359},26,[100,361,362],{"class":124},"            {\"name\": \"film\"}\n",[100,364,366],{"class":102,"line":365},27,[100,367,368],{"class":124},"          ]\n",[100,370,372],{"class":102,"line":371},28,[100,373,374],{"class":124},"        }\n",[100,376,378],{"class":102,"line":377},29,[100,379,380],{"class":124},"      ]\n",[100,382,384],{"class":102,"line":383},30,[100,385,386],{"class":124},"    },\n",[100,388,390],{"class":102,"line":389},31,[100,391,392],{"class":124},"    \"target\": {\n",[100,394,396],{"class":102,"line":395},32,[100,397,398],{"class":124},"      \"id\": \"conn_target_id\",\n",[100,400,402],{"class":102,"line":401},33,[100,403,404],{"class":124},"      \"spec\": {\n",[100,406,408],{"class":102,"line":407},34,[100,409,410],{"class":124},"        \"db\": {\n",[100,412,414],{"class":102,"line":413},35,[100,415,416],{"class":124},"          \"database\": \"postgres\",\n",[100,418,420],{"class":102,"line":419},36,[100,421,422],{"class":124},"          \"writeMode\": \"truncate_and_load\",\n",[100,424,426],{"class":102,"line":425},37,[100,427,428],{"class":124},"          \"structureOptions\": {\n",[100,430,432],{"class":102,"line":431},38,[100,433,434],{"class":124},"            \"tables\": true,\n",[100,436,438],{"class":102,"line":437},39,[100,439,440],{"class":124},"            \"indexes\": true,\n",[100,442,444],{"class":102,"line":443},40,[100,445,446],{"class":124},"            \"foreignKeys\": true\n",[100,448,450],{"class":102,"line":449},41,[100,451,452],{"class":124},"          }\n",[100,454,456],{"class":102,"line":455},42,[100,457,374],{"class":124},[100,459,461],{"class":102,"line":460},43,[100,462,463],{"class":124},"      }\n",[100,465,467],{"class":102,"line":466},44,[100,468,469],{"class":124},"    }\n",[100,471,473,476],{"class":102,"line":472},45,[100,474,475],{"class":124},"  }'",[100,477,478],{"class":117},")\n",[100,480,482],{"class":102,"line":481},46,[100,483,158],{"emptyLinePlaceholder":157},[100,485,487],{"class":102,"line":486},47,[100,488,489],{"class":106},"# Extract configuration ID\n",[100,491,493,496,498,500,503,506,509,512,515,518],{"class":102,"line":492},48,[100,494,495],{"class":117},"CONFIG_ID",[100,497,121],{"class":113},[100,499,237],{"class":117},[100,501,502],{"class":183},"echo",[100,504,505],{"class":117}," $config_result ",[100,507,508],{"class":113},"|",[100,510,511],{"class":170}," jq",[100,513,514],{"class":183}," -r",[100,516,517],{"class":124}," '.id'",[100,519,478],{"class":117},[100,521,523,525,528,531,533],{"class":102,"line":522},49,[100,524,502],{"class":183},[100,526,527],{"class":124}," \"Config ID: ",[100,529,530],{"class":117},"$CONFIG_ID",[100,532,199],{"class":124},[100,534,535],{"class":106},"  # config_...\n",[100,537,539],{"class":102,"line":538},50,[100,540,158],{"emptyLinePlaceholder":157},[100,542,544],{"class":102,"line":543},51,[100,545,546],{"class":106},"# List all configurations\n",[100,548,550,552,554,556,558],{"class":102,"line":549},52,[100,551,171],{"class":170},[100,553,174],{"class":124},[100,555,177],{"class":117},[100,557,255],{"class":124},[100,559,184],{"class":183},[100,561,563,565,567,569,571],{"class":102,"line":562},53,[100,564,190],{"class":183},[100,566,193],{"class":124},[100,568,196],{"class":117},[100,570,199],{"class":124},[100,572,184],{"class":183},[100,574,576,578,580,582],{"class":102,"line":575},54,[100,577,190],{"class":183},[100,579,209],{"class":124},[100,581,212],{"class":117},[100,583,215],{"class":124},[100,585,587],{"class":102,"line":586},55,[100,588,158],{"emptyLinePlaceholder":157},[100,590,592],{"class":102,"line":591},56,[100,593,594],{"class":106},"# Start a stream from the configuration\n",[100,596,598,601,603,605,607,609,611,613,615,617,620,622,625],{"class":102,"line":597},57,[100,599,600],{"class":117},"stream_result",[100,602,121],{"class":113},[100,604,237],{"class":117},[100,606,171],{"class":170},[100,608,242],{"class":183},[100,610,245],{"class":183},[100,612,248],{"class":124},[100,614,174],{"class":124},[100,616,177],{"class":117},[100,618,619],{"class":124},"\u002Fstream-configs\u002F",[100,621,530],{"class":117},[100,623,624],{"class":124},"\u002Fstart\"",[100,626,184],{"class":183},[100,628,630,632,634,636,638],{"class":102,"line":629},58,[100,631,190],{"class":183},[100,633,193],{"class":124},[100,635,196],{"class":117},[100,637,199],{"class":124},[100,639,184],{"class":183},[100,641,643,645,647,649,651],{"class":102,"line":642},59,[100,644,190],{"class":183},[100,646,209],{"class":124},[100,648,212],{"class":117},[100,650,199],{"class":124},[100,652,478],{"class":117},[100,654,656],{"class":102,"line":655},60,[100,657,158],{"emptyLinePlaceholder":157},[100,659,661],{"class":102,"line":660},61,[100,662,663],{"class":106},"# Extract stream execution ID\n",[100,665,667,670,672,674,676,679,681,683,685,687],{"class":102,"line":666},62,[100,668,669],{"class":117},"STREAM_ID",[100,671,121],{"class":113},[100,673,237],{"class":117},[100,675,502],{"class":183},[100,677,678],{"class":117}," $stream_result ",[100,680,508],{"class":113},[100,682,511],{"class":170},[100,684,514],{"class":183},[100,686,517],{"class":124},[100,688,478],{"class":117},[100,690,692,694,697,700,702],{"class":102,"line":691},63,[100,693,502],{"class":183},[100,695,696],{"class":124}," \"Stream ID: ",[100,698,699],{"class":117},"$STREAM_ID",[100,701,199],{"class":124},[100,703,704],{"class":106},"  # stream_...\n",[100,706,708],{"class":102,"line":707},64,[100,709,158],{"emptyLinePlaceholder":157},[100,711,713],{"class":102,"line":712},65,[100,714,715],{"class":106},"# Get stream statistics\n",[100,717,719,721,723,725,728,730,733],{"class":102,"line":718},66,[100,720,171],{"class":170},[100,722,174],{"class":124},[100,724,177],{"class":117},[100,726,727],{"class":124},"\u002Fstreams\u002F",[100,729,699],{"class":117},[100,731,732],{"class":124},"\u002Fstats\"",[100,734,184],{"class":183},[100,736,738,740,742,744,746],{"class":102,"line":737},67,[100,739,190],{"class":183},[100,741,193],{"class":124},[100,743,196],{"class":117},[100,745,199],{"class":124},[100,747,184],{"class":183},[100,749,751,753,755,757],{"class":102,"line":750},68,[100,752,190],{"class":183},[100,754,209],{"class":124},[100,756,212],{"class":117},[100,758,215],{"class":124},[100,760,762],{"class":102,"line":761},69,[100,763,158],{"emptyLinePlaceholder":157},[100,765,767],{"class":102,"line":766},70,[100,768,769],{"class":106},"# Pause a running stream (returns 204 No Content)\n",[100,771,773,775,777,779,781,783,785,787,790],{"class":102,"line":772},71,[100,774,171],{"class":170},[100,776,245],{"class":183},[100,778,248],{"class":124},[100,780,174],{"class":124},[100,782,177],{"class":117},[100,784,727],{"class":124},[100,786,699],{"class":117},[100,788,789],{"class":124},"\u002Fpause\"",[100,791,184],{"class":183},[100,793,795,797,799,801,803],{"class":102,"line":794},72,[100,796,190],{"class":183},[100,798,193],{"class":124},[100,800,196],{"class":117},[100,802,199],{"class":124},[100,804,184],{"class":183},[100,806,808,810,812,814],{"class":102,"line":807},73,[100,809,190],{"class":183},[100,811,209],{"class":124},[100,813,212],{"class":117},[100,815,215],{"class":124},[100,817,819],{"class":102,"line":818},74,[100,820,158],{"emptyLinePlaceholder":157},[100,822,824],{"class":102,"line":823},75,[100,825,826],{"class":106},"# Resume a paused stream (returns 204 No Content)\n",[100,828,830,832,834,836,838,840,842,844,847],{"class":102,"line":829},76,[100,831,171],{"class":170},[100,833,245],{"class":183},[100,835,248],{"class":124},[100,837,174],{"class":124},[100,839,177],{"class":117},[100,841,727],{"class":124},[100,843,699],{"class":117},[100,845,846],{"class":124},"\u002Fresume\"",[100,848,184],{"class":183},[100,850,852,854,856,858,860],{"class":102,"line":851},77,[100,853,190],{"class":183},[100,855,193],{"class":124},[100,857,196],{"class":117},[100,859,199],{"class":124},[100,861,184],{"class":183},[100,863,865,867,869,871],{"class":102,"line":864},78,[100,866,190],{"class":183},[100,868,209],{"class":124},[100,870,212],{"class":117},[100,872,215],{"class":124},[100,874,876],{"class":102,"line":875},79,[100,877,158],{"emptyLinePlaceholder":157},[100,879,881],{"class":102,"line":880},80,[100,882,883],{"class":106},"# Stop a stream (returns 204 No Content)\n",[100,885,887,889,891,893,895,897,899,901,904],{"class":102,"line":886},81,[100,888,171],{"class":170},[100,890,245],{"class":183},[100,892,248],{"class":124},[100,894,174],{"class":124},[100,896,177],{"class":117},[100,898,727],{"class":124},[100,900,699],{"class":117},[100,902,903],{"class":124},"\u002Fstop\"",[100,905,184],{"class":183},[100,907,909,911,913,915,917],{"class":102,"line":908},82,[100,910,190],{"class":183},[100,912,193],{"class":124},[100,914,196],{"class":117},[100,916,199],{"class":124},[100,918,184],{"class":183},[100,920,922,924,926,928],{"class":102,"line":921},83,[100,923,190],{"class":183},[100,925,209],{"class":124},[100,927,212],{"class":117},[100,929,215],{"class":124},[100,931,933],{"class":102,"line":932},84,[100,934,158],{"emptyLinePlaceholder":157},[100,936,938],{"class":102,"line":937},85,[100,939,940],{"class":106},"# Get run history for a configuration\n",[100,942,944,946,948,950,952,954,957],{"class":102,"line":943},86,[100,945,171],{"class":170},[100,947,174],{"class":124},[100,949,177],{"class":117},[100,951,619],{"class":124},[100,953,530],{"class":117},[100,955,956],{"class":124},"\u002Fhistory\"",[100,958,184],{"class":183},[100,960,962,964,966,968,970],{"class":102,"line":961},87,[100,963,190],{"class":183},[100,965,193],{"class":124},[100,967,196],{"class":117},[100,969,199],{"class":124},[100,971,184],{"class":183},[100,973,975,977,979,981],{"class":102,"line":974},88,[100,976,190],{"class":183},[100,978,209],{"class":124},[100,980,212],{"class":117},[100,982,215],{"class":124},[100,984,986],{"class":102,"line":985},89,[100,987,158],{"emptyLinePlaceholder":157},[100,989,991],{"class":102,"line":990},90,[100,992,993],{"class":106},"# Get persisted logs for a completed stream\n",[100,995,997,999,1001,1003,1005,1007,1010],{"class":102,"line":996},91,[100,998,171],{"class":170},[100,1000,174],{"class":124},[100,1002,177],{"class":117},[100,1004,727],{"class":124},[100,1006,699],{"class":117},[100,1008,1009],{"class":124},"\u002Flogs\"",[100,1011,184],{"class":183},[100,1013,1015,1017,1019,1021,1023],{"class":102,"line":1014},92,[100,1016,190],{"class":183},[100,1018,193],{"class":124},[100,1020,196],{"class":117},[100,1022,199],{"class":124},[100,1024,184],{"class":183},[100,1026,1028,1030,1032,1034],{"class":102,"line":1027},93,[100,1029,190],{"class":183},[100,1031,209],{"class":124},[100,1033,212],{"class":117},[100,1035,215],{"class":124},[100,1037,1039],{"class":102,"line":1038},94,[100,1040,158],{"emptyLinePlaceholder":157},[100,1042,1044],{"class":102,"line":1043},95,[100,1045,1046],{"class":106},"# Delete a configuration (requires confirmation header)\n",[100,1048,1050,1052,1054,1057,1059,1061,1063,1065,1067],{"class":102,"line":1049},96,[100,1051,171],{"class":170},[100,1053,245],{"class":183},[100,1055,1056],{"class":124}," DELETE",[100,1058,174],{"class":124},[100,1060,177],{"class":117},[100,1062,619],{"class":124},[100,1064,530],{"class":117},[100,1066,199],{"class":124},[100,1068,184],{"class":183},[100,1070,1072,1074,1076,1078,1080],{"class":102,"line":1071},97,[100,1073,190],{"class":183},[100,1075,193],{"class":124},[100,1077,196],{"class":117},[100,1079,199],{"class":124},[100,1081,184],{"class":183},[100,1083,1085,1087,1089,1091,1093],{"class":102,"line":1084},98,[100,1086,190],{"class":183},[100,1088,209],{"class":124},[100,1090,212],{"class":117},[100,1092,199],{"class":124},[100,1094,184],{"class":183},[100,1096,1098,1100],{"class":102,"line":1097},99,[100,1099,190],{"class":183},[100,1101,1102],{"class":124}," \"X-Confirm-Delete: true\"\n",[88,1104,1105],{"v-slot:python":90},[92,1106,1110],{"className":1107,"code":1108,"language":1109,"meta":90,"style":90},"language-python shiki shiki-themes github-light github-dark","import requests\n\n\nclass DBConvertStreamsAPI:\n    def __init__(self, api_key, install_id, base_url=\"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\"):\n        self.base_url = base_url\n        self.headers = {\n            \"X-API-Key\": api_key,\n            \"X-Install-ID\": install_id,\n            \"Content-Type\": \"application\u002Fjson\",\n        }\n\n    def load_user_configs(self):\n        \"\"\"Load user configurations (required before other endpoints).\"\"\"\n        response = requests.get(f\"{self.base_url}\u002Fuser\u002Fconfigs\", headers=self.headers)\n        response.raise_for_status()\n        return response.json()\n\n    def create_stream_config(self, config_data):\n        \"\"\"Create a stream configuration. Returns the full config with generated ID.\"\"\"\n        response = requests.post(\n            f\"{self.base_url}\u002Fstream-configs\", headers=self.headers, json=config_data\n        )\n        response.raise_for_status()\n        return response.json()\n\n    def list_stream_configs(self):\n        \"\"\"List all configurations. Returns {items, total, filtered}.\"\"\"\n        response = requests.get(\n            f\"{self.base_url}\u002Fstream-configs\", headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n\n    def start_stream(self, config_id, structure_only=False):\n        \"\"\"Start a stream from a configuration. Returns {id} with stream_ ID.\"\"\"\n        params = {}\n        if structure_only:\n            params[\"structureOnly\"] = \"true\"\n        response = requests.post(\n            f\"{self.base_url}\u002Fstream-configs\u002F{config_id}\u002Fstart\",\n            headers=self.headers,\n            params=params,\n        )\n        response.raise_for_status()\n        return response.json()\n\n    def get_stats(self, stream_id):\n        \"\"\"Get stream statistics. Returns {configID, streamID, status, nodes}.\"\"\"\n        response = requests.get(\n            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fstats\", headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n\n    def pause_stream(self, stream_id):\n        \"\"\"Pause a running stream. Returns 204 No Content.\"\"\"\n        response = requests.post(\n            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fpause\", headers=self.headers\n        )\n        response.raise_for_status()\n\n    def resume_stream(self, stream_id):\n        \"\"\"Resume a paused stream. Returns 204 No Content.\"\"\"\n        response = requests.post(\n            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fresume\", headers=self.headers\n        )\n        response.raise_for_status()\n\n    def stop_stream(self, stream_id):\n        \"\"\"Stop a stream. Returns 204 No Content.\"\"\"\n        response = requests.post(\n            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fstop\", headers=self.headers\n        )\n        response.raise_for_status()\n\n    def get_history(self, config_id):\n        \"\"\"Get run history for a configuration.\"\"\"\n        response = requests.get(\n            f\"{self.base_url}\u002Fstream-configs\u002F{config_id}\u002Fhistory\",\n            headers=self.headers,\n        )\n        response.raise_for_status()\n        return response.json()\n\n    def get_logs(self, stream_id):\n        \"\"\"Get persisted logs for a stream run.\"\"\"\n        response = requests.get(\n            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Flogs\", headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n\n\n# Usage\napi = DBConvertStreamsAPI(\"your_api_key\", \"your_install_id\")\napi.load_user_configs()\n\n# Create a stream configuration\nconfig = api.create_stream_config({\n    \"name\": \"mysql_to_postgresql\",\n    \"mode\": \"load\",\n    \"source\": {\n        \"connections\": [\n            {\n                \"connectionId\": \"conn_source_id\",\n                \"database\": \"sakila\",\n                \"tables\": [{\"name\": \"actor\"}, {\"name\": \"film\"}],\n            }\n        ]\n    },\n    \"target\": {\n        \"id\": \"conn_target_id\",\n        \"spec\": {\n            \"db\": {\n                \"database\": \"postgres\",\n                \"writeMode\": \"truncate_and_load\",\n                \"structureOptions\": {\n                    \"tables\": True,\n                    \"indexes\": True,\n                    \"foreignKeys\": True,\n                },\n            }\n        },\n    },\n})\nprint(f\"Config ID: {config['id']}\")\n\n# Start a stream\nresult = api.start_stream(config[\"id\"])\nstream_id = result[\"id\"]\nprint(f\"Stream ID: {stream_id}\")\n\n# Monitor statistics\nstats = api.get_stats(stream_id)\nprint(f\"Status: {stats['status']}\")\nfor node in stats[\"nodes\"]:\n    print(f\"  {node['id']}: {node['stat']['counter']} rows\")\n\n# Pause and resume\napi.pause_stream(stream_id)\nprint(\"Stream paused\")\n\napi.resume_stream(stream_id)\nprint(\"Stream resumed\")\n\n# Stop\napi.stop_stream(stream_id)\nprint(\"Stream stopped\")\n","python",[39,1111,1112,1117,1121,1125,1130,1135,1140,1145,1150,1155,1160,1164,1168,1173,1178,1183,1188,1193,1197,1202,1207,1212,1217,1222,1226,1230,1234,1239,1244,1249,1254,1258,1262,1266,1270,1275,1280,1285,1290,1295,1299,1304,1309,1314,1318,1322,1326,1330,1335,1340,1344,1349,1353,1357,1361,1365,1370,1375,1379,1384,1388,1392,1396,1401,1406,1410,1415,1419,1423,1427,1432,1437,1441,1446,1450,1454,1458,1463,1468,1472,1477,1481,1485,1489,1493,1497,1502,1507,1511,1516,1520,1524,1528,1532,1536,1541,1546,1551,1555,1559,1565,1570,1575,1580,1586,1592,1598,1604,1610,1616,1622,1627,1632,1638,1644,1650,1656,1662,1668,1674,1680,1686,1692,1697,1703,1708,1714,1720,1725,1731,1737,1743,1749,1754,1760,1766,1772,1778,1784,1789,1795,1801,1807,1812,1818,1824,1829,1835,1841],{"__ignoreMap":90},[100,1113,1114],{"class":102,"line":103},[100,1115,1116],{},"import requests\n",[100,1118,1119],{"class":102,"line":110},[100,1120,158],{"emptyLinePlaceholder":157},[100,1122,1123],{"class":102,"line":128},[100,1124,158],{"emptyLinePlaceholder":157},[100,1126,1127],{"class":102,"line":141},[100,1128,1129],{},"class DBConvertStreamsAPI:\n",[100,1131,1132],{"class":102,"line":154},[100,1133,1134],{},"    def __init__(self, api_key, install_id, base_url=\"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\"):\n",[100,1136,1137],{"class":102,"line":161},[100,1138,1139],{},"        self.base_url = base_url\n",[100,1141,1142],{"class":102,"line":167},[100,1143,1144],{},"        self.headers = {\n",[100,1146,1147],{"class":102,"line":187},[100,1148,1149],{},"            \"X-API-Key\": api_key,\n",[100,1151,1152],{"class":102,"line":204},[100,1153,1154],{},"            \"X-Install-ID\": install_id,\n",[100,1156,1157],{"class":102,"line":218},[100,1158,1159],{},"            \"Content-Type\": \"application\u002Fjson\",\n",[100,1161,1162],{"class":102,"line":223},[100,1163,374],{},[100,1165,1166],{"class":102,"line":229},[100,1167,158],{"emptyLinePlaceholder":157},[100,1169,1170],{"class":102,"line":260},[100,1171,1172],{},"    def load_user_configs(self):\n",[100,1174,1175],{"class":102,"line":273},[100,1176,1177],{},"        \"\"\"Load user configurations (required before other endpoints).\"\"\"\n",[100,1179,1180],{"class":102,"line":286},[100,1181,1182],{},"        response = requests.get(f\"{self.base_url}\u002Fuser\u002Fconfigs\", headers=self.headers)\n",[100,1184,1185],{"class":102,"line":296},[100,1186,1187],{},"        response.raise_for_status()\n",[100,1189,1190],{"class":102,"line":305},[100,1191,1192],{},"        return response.json()\n",[100,1194,1195],{"class":102,"line":311},[100,1196,158],{"emptyLinePlaceholder":157},[100,1198,1199],{"class":102,"line":317},[100,1200,1201],{},"    def create_stream_config(self, config_data):\n",[100,1203,1204],{"class":102,"line":323},[100,1205,1206],{},"        \"\"\"Create a stream configuration. Returns the full config with generated ID.\"\"\"\n",[100,1208,1209],{"class":102,"line":329},[100,1210,1211],{},"        response = requests.post(\n",[100,1213,1214],{"class":102,"line":335},[100,1215,1216],{},"            f\"{self.base_url}\u002Fstream-configs\", headers=self.headers, json=config_data\n",[100,1218,1219],{"class":102,"line":341},[100,1220,1221],{},"        )\n",[100,1223,1224],{"class":102,"line":347},[100,1225,1187],{},[100,1227,1228],{"class":102,"line":353},[100,1229,1192],{},[100,1231,1232],{"class":102,"line":359},[100,1233,158],{"emptyLinePlaceholder":157},[100,1235,1236],{"class":102,"line":365},[100,1237,1238],{},"    def list_stream_configs(self):\n",[100,1240,1241],{"class":102,"line":371},[100,1242,1243],{},"        \"\"\"List all configurations. Returns {items, total, filtered}.\"\"\"\n",[100,1245,1246],{"class":102,"line":377},[100,1247,1248],{},"        response = requests.get(\n",[100,1250,1251],{"class":102,"line":383},[100,1252,1253],{},"            f\"{self.base_url}\u002Fstream-configs\", headers=self.headers\n",[100,1255,1256],{"class":102,"line":389},[100,1257,1221],{},[100,1259,1260],{"class":102,"line":395},[100,1261,1187],{},[100,1263,1264],{"class":102,"line":401},[100,1265,1192],{},[100,1267,1268],{"class":102,"line":407},[100,1269,158],{"emptyLinePlaceholder":157},[100,1271,1272],{"class":102,"line":413},[100,1273,1274],{},"    def start_stream(self, config_id, structure_only=False):\n",[100,1276,1277],{"class":102,"line":419},[100,1278,1279],{},"        \"\"\"Start a stream from a configuration. Returns {id} with stream_ ID.\"\"\"\n",[100,1281,1282],{"class":102,"line":425},[100,1283,1284],{},"        params = {}\n",[100,1286,1287],{"class":102,"line":431},[100,1288,1289],{},"        if structure_only:\n",[100,1291,1292],{"class":102,"line":437},[100,1293,1294],{},"            params[\"structureOnly\"] = \"true\"\n",[100,1296,1297],{"class":102,"line":443},[100,1298,1211],{},[100,1300,1301],{"class":102,"line":449},[100,1302,1303],{},"            f\"{self.base_url}\u002Fstream-configs\u002F{config_id}\u002Fstart\",\n",[100,1305,1306],{"class":102,"line":455},[100,1307,1308],{},"            headers=self.headers,\n",[100,1310,1311],{"class":102,"line":460},[100,1312,1313],{},"            params=params,\n",[100,1315,1316],{"class":102,"line":466},[100,1317,1221],{},[100,1319,1320],{"class":102,"line":472},[100,1321,1187],{},[100,1323,1324],{"class":102,"line":481},[100,1325,1192],{},[100,1327,1328],{"class":102,"line":486},[100,1329,158],{"emptyLinePlaceholder":157},[100,1331,1332],{"class":102,"line":492},[100,1333,1334],{},"    def get_stats(self, stream_id):\n",[100,1336,1337],{"class":102,"line":522},[100,1338,1339],{},"        \"\"\"Get stream statistics. Returns {configID, streamID, status, nodes}.\"\"\"\n",[100,1341,1342],{"class":102,"line":538},[100,1343,1248],{},[100,1345,1346],{"class":102,"line":543},[100,1347,1348],{},"            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fstats\", headers=self.headers\n",[100,1350,1351],{"class":102,"line":549},[100,1352,1221],{},[100,1354,1355],{"class":102,"line":562},[100,1356,1187],{},[100,1358,1359],{"class":102,"line":575},[100,1360,1192],{},[100,1362,1363],{"class":102,"line":586},[100,1364,158],{"emptyLinePlaceholder":157},[100,1366,1367],{"class":102,"line":591},[100,1368,1369],{},"    def pause_stream(self, stream_id):\n",[100,1371,1372],{"class":102,"line":597},[100,1373,1374],{},"        \"\"\"Pause a running stream. Returns 204 No Content.\"\"\"\n",[100,1376,1377],{"class":102,"line":629},[100,1378,1211],{},[100,1380,1381],{"class":102,"line":642},[100,1382,1383],{},"            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fpause\", headers=self.headers\n",[100,1385,1386],{"class":102,"line":655},[100,1387,1221],{},[100,1389,1390],{"class":102,"line":660},[100,1391,1187],{},[100,1393,1394],{"class":102,"line":666},[100,1395,158],{"emptyLinePlaceholder":157},[100,1397,1398],{"class":102,"line":691},[100,1399,1400],{},"    def resume_stream(self, stream_id):\n",[100,1402,1403],{"class":102,"line":707},[100,1404,1405],{},"        \"\"\"Resume a paused stream. Returns 204 No Content.\"\"\"\n",[100,1407,1408],{"class":102,"line":712},[100,1409,1211],{},[100,1411,1412],{"class":102,"line":718},[100,1413,1414],{},"            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fresume\", headers=self.headers\n",[100,1416,1417],{"class":102,"line":737},[100,1418,1221],{},[100,1420,1421],{"class":102,"line":750},[100,1422,1187],{},[100,1424,1425],{"class":102,"line":761},[100,1426,158],{"emptyLinePlaceholder":157},[100,1428,1429],{"class":102,"line":766},[100,1430,1431],{},"    def stop_stream(self, stream_id):\n",[100,1433,1434],{"class":102,"line":772},[100,1435,1436],{},"        \"\"\"Stop a stream. Returns 204 No Content.\"\"\"\n",[100,1438,1439],{"class":102,"line":794},[100,1440,1211],{},[100,1442,1443],{"class":102,"line":807},[100,1444,1445],{},"            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Fstop\", headers=self.headers\n",[100,1447,1448],{"class":102,"line":818},[100,1449,1221],{},[100,1451,1452],{"class":102,"line":823},[100,1453,1187],{},[100,1455,1456],{"class":102,"line":829},[100,1457,158],{"emptyLinePlaceholder":157},[100,1459,1460],{"class":102,"line":851},[100,1461,1462],{},"    def get_history(self, config_id):\n",[100,1464,1465],{"class":102,"line":864},[100,1466,1467],{},"        \"\"\"Get run history for a configuration.\"\"\"\n",[100,1469,1470],{"class":102,"line":875},[100,1471,1248],{},[100,1473,1474],{"class":102,"line":880},[100,1475,1476],{},"            f\"{self.base_url}\u002Fstream-configs\u002F{config_id}\u002Fhistory\",\n",[100,1478,1479],{"class":102,"line":886},[100,1480,1308],{},[100,1482,1483],{"class":102,"line":908},[100,1484,1221],{},[100,1486,1487],{"class":102,"line":921},[100,1488,1187],{},[100,1490,1491],{"class":102,"line":932},[100,1492,1192],{},[100,1494,1495],{"class":102,"line":937},[100,1496,158],{"emptyLinePlaceholder":157},[100,1498,1499],{"class":102,"line":943},[100,1500,1501],{},"    def get_logs(self, stream_id):\n",[100,1503,1504],{"class":102,"line":961},[100,1505,1506],{},"        \"\"\"Get persisted logs for a stream run.\"\"\"\n",[100,1508,1509],{"class":102,"line":974},[100,1510,1248],{},[100,1512,1513],{"class":102,"line":985},[100,1514,1515],{},"            f\"{self.base_url}\u002Fstreams\u002F{stream_id}\u002Flogs\", headers=self.headers\n",[100,1517,1518],{"class":102,"line":990},[100,1519,1221],{},[100,1521,1522],{"class":102,"line":996},[100,1523,1187],{},[100,1525,1526],{"class":102,"line":1014},[100,1527,1192],{},[100,1529,1530],{"class":102,"line":1027},[100,1531,158],{"emptyLinePlaceholder":157},[100,1533,1534],{"class":102,"line":1038},[100,1535,158],{"emptyLinePlaceholder":157},[100,1537,1538],{"class":102,"line":1043},[100,1539,1540],{},"# Usage\n",[100,1542,1543],{"class":102,"line":1049},[100,1544,1545],{},"api = DBConvertStreamsAPI(\"your_api_key\", \"your_install_id\")\n",[100,1547,1548],{"class":102,"line":1071},[100,1549,1550],{},"api.load_user_configs()\n",[100,1552,1553],{"class":102,"line":1084},[100,1554,158],{"emptyLinePlaceholder":157},[100,1556,1557],{"class":102,"line":1097},[100,1558,226],{},[100,1560,1562],{"class":102,"line":1561},100,[100,1563,1564],{},"config = api.create_stream_config({\n",[100,1566,1568],{"class":102,"line":1567},101,[100,1569,308],{},[100,1571,1573],{"class":102,"line":1572},102,[100,1574,314],{},[100,1576,1578],{"class":102,"line":1577},103,[100,1579,320],{},[100,1581,1583],{"class":102,"line":1582},104,[100,1584,1585],{},"        \"connections\": [\n",[100,1587,1589],{"class":102,"line":1588},105,[100,1590,1591],{},"            {\n",[100,1593,1595],{"class":102,"line":1594},106,[100,1596,1597],{},"                \"connectionId\": \"conn_source_id\",\n",[100,1599,1601],{"class":102,"line":1600},107,[100,1602,1603],{},"                \"database\": \"sakila\",\n",[100,1605,1607],{"class":102,"line":1606},108,[100,1608,1609],{},"                \"tables\": [{\"name\": \"actor\"}, {\"name\": \"film\"}],\n",[100,1611,1613],{"class":102,"line":1612},109,[100,1614,1615],{},"            }\n",[100,1617,1619],{"class":102,"line":1618},110,[100,1620,1621],{},"        ]\n",[100,1623,1625],{"class":102,"line":1624},111,[100,1626,386],{},[100,1628,1630],{"class":102,"line":1629},112,[100,1631,392],{},[100,1633,1635],{"class":102,"line":1634},113,[100,1636,1637],{},"        \"id\": \"conn_target_id\",\n",[100,1639,1641],{"class":102,"line":1640},114,[100,1642,1643],{},"        \"spec\": {\n",[100,1645,1647],{"class":102,"line":1646},115,[100,1648,1649],{},"            \"db\": {\n",[100,1651,1653],{"class":102,"line":1652},116,[100,1654,1655],{},"                \"database\": \"postgres\",\n",[100,1657,1659],{"class":102,"line":1658},117,[100,1660,1661],{},"                \"writeMode\": \"truncate_and_load\",\n",[100,1663,1665],{"class":102,"line":1664},118,[100,1666,1667],{},"                \"structureOptions\": {\n",[100,1669,1671],{"class":102,"line":1670},119,[100,1672,1673],{},"                    \"tables\": True,\n",[100,1675,1677],{"class":102,"line":1676},120,[100,1678,1679],{},"                    \"indexes\": True,\n",[100,1681,1683],{"class":102,"line":1682},121,[100,1684,1685],{},"                    \"foreignKeys\": True,\n",[100,1687,1689],{"class":102,"line":1688},122,[100,1690,1691],{},"                },\n",[100,1693,1695],{"class":102,"line":1694},123,[100,1696,1615],{},[100,1698,1700],{"class":102,"line":1699},124,[100,1701,1702],{},"        },\n",[100,1704,1706],{"class":102,"line":1705},125,[100,1707,386],{},[100,1709,1711],{"class":102,"line":1710},126,[100,1712,1713],{},"})\n",[100,1715,1717],{"class":102,"line":1716},127,[100,1718,1719],{},"print(f\"Config ID: {config['id']}\")\n",[100,1721,1723],{"class":102,"line":1722},128,[100,1724,158],{"emptyLinePlaceholder":157},[100,1726,1728],{"class":102,"line":1727},129,[100,1729,1730],{},"# Start a stream\n",[100,1732,1734],{"class":102,"line":1733},130,[100,1735,1736],{},"result = api.start_stream(config[\"id\"])\n",[100,1738,1740],{"class":102,"line":1739},131,[100,1741,1742],{},"stream_id = result[\"id\"]\n",[100,1744,1746],{"class":102,"line":1745},132,[100,1747,1748],{},"print(f\"Stream ID: {stream_id}\")\n",[100,1750,1752],{"class":102,"line":1751},133,[100,1753,158],{"emptyLinePlaceholder":157},[100,1755,1757],{"class":102,"line":1756},134,[100,1758,1759],{},"# Monitor statistics\n",[100,1761,1763],{"class":102,"line":1762},135,[100,1764,1765],{},"stats = api.get_stats(stream_id)\n",[100,1767,1769],{"class":102,"line":1768},136,[100,1770,1771],{},"print(f\"Status: {stats['status']}\")\n",[100,1773,1775],{"class":102,"line":1774},137,[100,1776,1777],{},"for node in stats[\"nodes\"]:\n",[100,1779,1781],{"class":102,"line":1780},138,[100,1782,1783],{},"    print(f\"  {node['id']}: {node['stat']['counter']} rows\")\n",[100,1785,1787],{"class":102,"line":1786},139,[100,1788,158],{"emptyLinePlaceholder":157},[100,1790,1792],{"class":102,"line":1791},140,[100,1793,1794],{},"# Pause and resume\n",[100,1796,1798],{"class":102,"line":1797},141,[100,1799,1800],{},"api.pause_stream(stream_id)\n",[100,1802,1804],{"class":102,"line":1803},142,[100,1805,1806],{},"print(\"Stream paused\")\n",[100,1808,1810],{"class":102,"line":1809},143,[100,1811,158],{"emptyLinePlaceholder":157},[100,1813,1815],{"class":102,"line":1814},144,[100,1816,1817],{},"api.resume_stream(stream_id)\n",[100,1819,1821],{"class":102,"line":1820},145,[100,1822,1823],{},"print(\"Stream resumed\")\n",[100,1825,1827],{"class":102,"line":1826},146,[100,1828,158],{"emptyLinePlaceholder":157},[100,1830,1832],{"class":102,"line":1831},147,[100,1833,1834],{},"# Stop\n",[100,1836,1838],{"class":102,"line":1837},148,[100,1839,1840],{},"api.stop_stream(stream_id)\n",[100,1842,1844],{"class":102,"line":1843},149,[100,1845,1846],{},"print(\"Stream stopped\")\n",[88,1848,1849],{"v-slot:node":90},[92,1850,1854],{"className":1851,"code":1852,"language":1853,"meta":90,"style":90},"language-typescript shiki shiki-themes github-light github-dark","import axios, { AxiosInstance } from 'axios'\n\ninterface StreamConfigRequest {\n  name: string\n  mode: 'load' | 'cdc'\n  source: {\n    connections: Array\u003C{\n      connectionId: string\n      database: string\n      tables?: Array\u003C{ name: string }>\n    }>\n    options?: {\n      dataBundleSize?: number\n      operations?: Array\u003C'INSERT' | 'UPDATE' | 'DELETE'>\n    }\n  }\n  target: {\n    id: string\n    spec: {\n      db?: {\n        database: string\n        writeMode?: 'fail_if_not_empty' | 'append' | 'truncate_and_load' | 'upsert'\n        schemaPolicy?: string\n        structureOptions?: {\n          tables?: boolean\n          indexes?: boolean\n          foreignKeys?: boolean\n        }\n      }\n      s3?: {\n        fileFormat: 'csv' | 'json' | 'jsonl' | 'parquet'\n        upload: { bucket: string; prefix?: string }\n      }\n      files?: {\n        fileFormat: 'csv' | 'json' | 'jsonl' | 'parquet'\n      }\n    }\n  }\n  reportingInterval?: number\n  limits?: {\n    numberOfEvents?: number\n    elapsedTime?: number\n  }\n}\n\ninterface StartStreamResponse {\n  id: string\n}\n\ninterface StatResponse {\n  configID: string\n  streamID: string\n  status: string\n  nodes: Array\u003C{\n    id: string\n    type: string\n    stat: {\n      counter: number\n      failedCounter: number\n      sumDataSize: number\n      avgRate: number\n      status: string\n    }\n  }>\n}\n\ninterface StreamConfigListResponse {\n  items: StreamConfigRequest[]\n  total: number\n  filtered: number\n}\n\nclass DBConvertStreamsAPI {\n  private client: AxiosInstance\n\n  constructor(apiKey: string, installId: string, baseURL = 'http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1') {\n    this.client = axios.create({\n      baseURL,\n      headers: {\n        'X-API-Key': apiKey,\n        'X-Install-ID': installId,\n        'Content-Type': 'application\u002Fjson',\n      },\n    })\n  }\n\n  async loadUserConfigs(): Promise\u003Cvoid> {\n    await this.client.get('\u002Fuser\u002Fconfigs')\n  }\n\n  async createStreamConfig(config: StreamConfigRequest): Promise\u003CStreamConfigRequest & { id: string }> {\n    const { data } = await this.client.post('\u002Fstream-configs', config)\n    return data\n  }\n\n  async listStreamConfigs(): Promise\u003CStreamConfigListResponse> {\n    const { data } = await this.client.get('\u002Fstream-configs')\n    return data\n  }\n\n  async startStream(configId: string): Promise\u003CStartStreamResponse> {\n    const { data } = await this.client.post(`\u002Fstream-configs\u002F${configId}\u002Fstart`)\n    return data\n  }\n\n  async getStats(streamId: string): Promise\u003CStatResponse> {\n    const { data } = await this.client.get(`\u002Fstreams\u002F${streamId}\u002Fstats`)\n    return data\n  }\n\n  async pauseStream(streamId: string): Promise\u003Cvoid> {\n    await this.client.post(`\u002Fstreams\u002F${streamId}\u002Fpause`)\n  }\n\n  async resumeStream(streamId: string): Promise\u003Cvoid> {\n    await this.client.post(`\u002Fstreams\u002F${streamId}\u002Fresume`)\n  }\n\n  async stopStream(streamId: string): Promise\u003Cvoid> {\n    await this.client.post(`\u002Fstreams\u002F${streamId}\u002Fstop`)\n  }\n}\n\n\u002F\u002F Usage\nasync function main() {\n  const api = new DBConvertStreamsAPI('your_api_key', 'your_install_id')\n  await api.loadUserConfigs()\n\n  \u002F\u002F Create a stream configuration\n  const config = await api.createStreamConfig({\n    name: 'mysql_to_postgresql',\n    mode: 'load',\n    source: {\n      connections: [\n        {\n          connectionId: 'conn_source_id',\n          database: 'sakila',\n          tables: [{ name: 'actor' }, { name: 'film' }],\n        },\n      ],\n    },\n    target: {\n      id: 'conn_target_id',\n      spec: {\n        db: {\n          database: 'postgres',\n          writeMode: 'truncate_and_load',\n          structureOptions: { tables: true, indexes: true, foreignKeys: true },\n        },\n      },\n    },\n  })\n  console.log('Config ID:', config.id)\n\n  \u002F\u002F Start a stream\n  const { id: streamId } = await api.startStream(config.id)\n  console.log('Stream ID:', streamId)\n\n  \u002F\u002F Monitor statistics\n  const stats = await api.getStats(streamId)\n  console.log('Status:', stats.status)\n  for (const node of stats.nodes) {\n    console.log(`  ${node.id}: ${node.stat.counter} rows`)\n  }\n\n  \u002F\u002F Pause, resume, stop\n  await api.pauseStream(streamId)\n  console.log('Stream paused')\n\n  await api.resumeStream(streamId)\n  console.log('Stream resumed')\n\n  await api.stopStream(streamId)\n  console.log('Stream stopped')\n}\n\nmain().catch(console.error)\n","typescript",[39,1855,1856,1870,1874,1885,1897,1913,1922,1935,1944,1953,1977,1982,1991,2001,2029,2033,2038,2047,2056,2065,2074,2083,2108,2117,2126,2136,2145,2154,2158,2162,2171,2196,2226,2230,2239,2259,2263,2267,2271,2280,2289,2298,2307,2311,2316,2320,2329,2338,2342,2346,2355,2364,2373,2382,2393,2401,2410,2419,2428,2437,2446,2455,2464,2468,2473,2477,2481,2490,2502,2511,2520,2524,2528,2538,2551,2555,2594,2613,2618,2623,2631,2639,2653,2658,2663,2667,2671,2695,2716,2720,2724,2766,2799,2807,2811,2815,2835,2861,2867,2871,2875,2904,2936,2942,2946,2950,2979,3011,3017,3021,3025,3052,3073,3077,3081,3108,3129,3133,3137,3164,3185,3189,3193,3197,3202,3216,3243,3257,3261,3266,3284,3294,3304,3309,3314,3318,3328,3338,3355,3359,3364,3368,3373,3383,3388,3393,3402,3412,3433,3437,3442,3447,3453,3470,3475,3481,3508,3523,3528,3534,3554,3569,3589,3629,3634,3639,3645,3657,3671,3676,3688,3702,3707,3719,3733,3738,3743],{"__ignoreMap":90},[100,1857,1858,1861,1864,1867],{"class":102,"line":103},[100,1859,1860],{"class":113},"import",[100,1862,1863],{"class":117}," axios, { AxiosInstance } ",[100,1865,1866],{"class":113},"from",[100,1868,1869],{"class":124}," 'axios'\n",[100,1871,1872],{"class":102,"line":110},[100,1873,158],{"emptyLinePlaceholder":157},[100,1875,1876,1879,1882],{"class":102,"line":128},[100,1877,1878],{"class":113},"interface",[100,1880,1881],{"class":170}," StreamConfigRequest",[100,1883,1884],{"class":117}," {\n",[100,1886,1887,1891,1894],{"class":102,"line":141},[100,1888,1890],{"class":1889},"s4XuR","  name",[100,1892,1893],{"class":113},":",[100,1895,1896],{"class":183}," string\n",[100,1898,1899,1902,1904,1907,1910],{"class":102,"line":154},[100,1900,1901],{"class":1889},"  mode",[100,1903,1893],{"class":113},[100,1905,1906],{"class":124}," 'load'",[100,1908,1909],{"class":113}," |",[100,1911,1912],{"class":124}," 'cdc'\n",[100,1914,1915,1918,1920],{"class":102,"line":161},[100,1916,1917],{"class":1889},"  source",[100,1919,1893],{"class":113},[100,1921,1884],{"class":117},[100,1923,1924,1927,1929,1932],{"class":102,"line":167},[100,1925,1926],{"class":1889},"    connections",[100,1928,1893],{"class":113},[100,1930,1931],{"class":170}," Array",[100,1933,1934],{"class":117},"\u003C{\n",[100,1936,1937,1940,1942],{"class":102,"line":187},[100,1938,1939],{"class":1889},"      connectionId",[100,1941,1893],{"class":113},[100,1943,1896],{"class":183},[100,1945,1946,1949,1951],{"class":102,"line":204},[100,1947,1948],{"class":1889},"      database",[100,1950,1893],{"class":113},[100,1952,1896],{"class":183},[100,1954,1955,1958,1961,1963,1966,1969,1971,1974],{"class":102,"line":218},[100,1956,1957],{"class":1889},"      tables",[100,1959,1960],{"class":113},"?:",[100,1962,1931],{"class":170},[100,1964,1965],{"class":117},"\u003C{ ",[100,1967,1968],{"class":1889},"name",[100,1970,1893],{"class":113},[100,1972,1973],{"class":183}," string",[100,1975,1976],{"class":117}," }>\n",[100,1978,1979],{"class":102,"line":223},[100,1980,1981],{"class":117},"    }>\n",[100,1983,1984,1987,1989],{"class":102,"line":229},[100,1985,1986],{"class":1889},"    options",[100,1988,1960],{"class":113},[100,1990,1884],{"class":117},[100,1992,1993,1996,1998],{"class":102,"line":260},[100,1994,1995],{"class":1889},"      dataBundleSize",[100,1997,1960],{"class":113},[100,1999,2000],{"class":183}," number\n",[100,2002,2003,2006,2008,2010,2013,2016,2018,2021,2023,2026],{"class":102,"line":273},[100,2004,2005],{"class":1889},"      operations",[100,2007,1960],{"class":113},[100,2009,1931],{"class":170},[100,2011,2012],{"class":117},"\u003C",[100,2014,2015],{"class":124},"'INSERT'",[100,2017,1909],{"class":113},[100,2019,2020],{"class":124}," 'UPDATE'",[100,2022,1909],{"class":113},[100,2024,2025],{"class":124}," 'DELETE'",[100,2027,2028],{"class":117},">\n",[100,2030,2031],{"class":102,"line":286},[100,2032,469],{"class":117},[100,2034,2035],{"class":102,"line":296},[100,2036,2037],{"class":117},"  }\n",[100,2039,2040,2043,2045],{"class":102,"line":305},[100,2041,2042],{"class":1889},"  target",[100,2044,1893],{"class":113},[100,2046,1884],{"class":117},[100,2048,2049,2052,2054],{"class":102,"line":311},[100,2050,2051],{"class":1889},"    id",[100,2053,1893],{"class":113},[100,2055,1896],{"class":183},[100,2057,2058,2061,2063],{"class":102,"line":317},[100,2059,2060],{"class":1889},"    spec",[100,2062,1893],{"class":113},[100,2064,1884],{"class":117},[100,2066,2067,2070,2072],{"class":102,"line":323},[100,2068,2069],{"class":1889},"      db",[100,2071,1960],{"class":113},[100,2073,1884],{"class":117},[100,2075,2076,2079,2081],{"class":102,"line":329},[100,2077,2078],{"class":1889},"        database",[100,2080,1893],{"class":113},[100,2082,1896],{"class":183},[100,2084,2085,2088,2090,2093,2095,2098,2100,2103,2105],{"class":102,"line":335},[100,2086,2087],{"class":1889},"        writeMode",[100,2089,1960],{"class":113},[100,2091,2092],{"class":124}," 'fail_if_not_empty'",[100,2094,1909],{"class":113},[100,2096,2097],{"class":124}," 'append'",[100,2099,1909],{"class":113},[100,2101,2102],{"class":124}," 'truncate_and_load'",[100,2104,1909],{"class":113},[100,2106,2107],{"class":124}," 'upsert'\n",[100,2109,2110,2113,2115],{"class":102,"line":341},[100,2111,2112],{"class":1889},"        schemaPolicy",[100,2114,1960],{"class":113},[100,2116,1896],{"class":183},[100,2118,2119,2122,2124],{"class":102,"line":347},[100,2120,2121],{"class":1889},"        structureOptions",[100,2123,1960],{"class":113},[100,2125,1884],{"class":117},[100,2127,2128,2131,2133],{"class":102,"line":353},[100,2129,2130],{"class":1889},"          tables",[100,2132,1960],{"class":113},[100,2134,2135],{"class":183}," boolean\n",[100,2137,2138,2141,2143],{"class":102,"line":359},[100,2139,2140],{"class":1889},"          indexes",[100,2142,1960],{"class":113},[100,2144,2135],{"class":183},[100,2146,2147,2150,2152],{"class":102,"line":365},[100,2148,2149],{"class":1889},"          foreignKeys",[100,2151,1960],{"class":113},[100,2153,2135],{"class":183},[100,2155,2156],{"class":102,"line":371},[100,2157,374],{"class":117},[100,2159,2160],{"class":102,"line":377},[100,2161,463],{"class":117},[100,2163,2164,2167,2169],{"class":102,"line":383},[100,2165,2166],{"class":1889},"      s3",[100,2168,1960],{"class":113},[100,2170,1884],{"class":117},[100,2172,2173,2176,2178,2181,2183,2186,2188,2191,2193],{"class":102,"line":389},[100,2174,2175],{"class":1889},"        fileFormat",[100,2177,1893],{"class":113},[100,2179,2180],{"class":124}," 'csv'",[100,2182,1909],{"class":113},[100,2184,2185],{"class":124}," 'json'",[100,2187,1909],{"class":113},[100,2189,2190],{"class":124}," 'jsonl'",[100,2192,1909],{"class":113},[100,2194,2195],{"class":124}," 'parquet'\n",[100,2197,2198,2201,2203,2206,2209,2211,2213,2216,2219,2221,2223],{"class":102,"line":395},[100,2199,2200],{"class":1889},"        upload",[100,2202,1893],{"class":113},[100,2204,2205],{"class":117}," { ",[100,2207,2208],{"class":1889},"bucket",[100,2210,1893],{"class":113},[100,2212,1973],{"class":183},[100,2214,2215],{"class":117},"; ",[100,2217,2218],{"class":1889},"prefix",[100,2220,1960],{"class":113},[100,2222,1973],{"class":183},[100,2224,2225],{"class":117}," }\n",[100,2227,2228],{"class":102,"line":401},[100,2229,463],{"class":117},[100,2231,2232,2235,2237],{"class":102,"line":407},[100,2233,2234],{"class":1889},"      files",[100,2236,1960],{"class":113},[100,2238,1884],{"class":117},[100,2240,2241,2243,2245,2247,2249,2251,2253,2255,2257],{"class":102,"line":413},[100,2242,2175],{"class":1889},[100,2244,1893],{"class":113},[100,2246,2180],{"class":124},[100,2248,1909],{"class":113},[100,2250,2185],{"class":124},[100,2252,1909],{"class":113},[100,2254,2190],{"class":124},[100,2256,1909],{"class":113},[100,2258,2195],{"class":124},[100,2260,2261],{"class":102,"line":419},[100,2262,463],{"class":117},[100,2264,2265],{"class":102,"line":425},[100,2266,469],{"class":117},[100,2268,2269],{"class":102,"line":431},[100,2270,2037],{"class":117},[100,2272,2273,2276,2278],{"class":102,"line":437},[100,2274,2275],{"class":1889},"  reportingInterval",[100,2277,1960],{"class":113},[100,2279,2000],{"class":183},[100,2281,2282,2285,2287],{"class":102,"line":443},[100,2283,2284],{"class":1889},"  limits",[100,2286,1960],{"class":113},[100,2288,1884],{"class":117},[100,2290,2291,2294,2296],{"class":102,"line":449},[100,2292,2293],{"class":1889},"    numberOfEvents",[100,2295,1960],{"class":113},[100,2297,2000],{"class":183},[100,2299,2300,2303,2305],{"class":102,"line":455},[100,2301,2302],{"class":1889},"    elapsedTime",[100,2304,1960],{"class":113},[100,2306,2000],{"class":183},[100,2308,2309],{"class":102,"line":460},[100,2310,2037],{"class":117},[100,2312,2313],{"class":102,"line":466},[100,2314,2315],{"class":117},"}\n",[100,2317,2318],{"class":102,"line":472},[100,2319,158],{"emptyLinePlaceholder":157},[100,2321,2322,2324,2327],{"class":102,"line":481},[100,2323,1878],{"class":113},[100,2325,2326],{"class":170}," StartStreamResponse",[100,2328,1884],{"class":117},[100,2330,2331,2334,2336],{"class":102,"line":486},[100,2332,2333],{"class":1889},"  id",[100,2335,1893],{"class":113},[100,2337,1896],{"class":183},[100,2339,2340],{"class":102,"line":492},[100,2341,2315],{"class":117},[100,2343,2344],{"class":102,"line":522},[100,2345,158],{"emptyLinePlaceholder":157},[100,2347,2348,2350,2353],{"class":102,"line":538},[100,2349,1878],{"class":113},[100,2351,2352],{"class":170}," StatResponse",[100,2354,1884],{"class":117},[100,2356,2357,2360,2362],{"class":102,"line":543},[100,2358,2359],{"class":1889},"  configID",[100,2361,1893],{"class":113},[100,2363,1896],{"class":183},[100,2365,2366,2369,2371],{"class":102,"line":549},[100,2367,2368],{"class":1889},"  streamID",[100,2370,1893],{"class":113},[100,2372,1896],{"class":183},[100,2374,2375,2378,2380],{"class":102,"line":562},[100,2376,2377],{"class":1889},"  status",[100,2379,1893],{"class":113},[100,2381,1896],{"class":183},[100,2383,2384,2387,2389,2391],{"class":102,"line":575},[100,2385,2386],{"class":1889},"  nodes",[100,2388,1893],{"class":113},[100,2390,1931],{"class":170},[100,2392,1934],{"class":117},[100,2394,2395,2397,2399],{"class":102,"line":586},[100,2396,2051],{"class":1889},[100,2398,1893],{"class":113},[100,2400,1896],{"class":183},[100,2402,2403,2406,2408],{"class":102,"line":591},[100,2404,2405],{"class":1889},"    type",[100,2407,1893],{"class":113},[100,2409,1896],{"class":183},[100,2411,2412,2415,2417],{"class":102,"line":597},[100,2413,2414],{"class":1889},"    stat",[100,2416,1893],{"class":113},[100,2418,1884],{"class":117},[100,2420,2421,2424,2426],{"class":102,"line":629},[100,2422,2423],{"class":1889},"      counter",[100,2425,1893],{"class":113},[100,2427,2000],{"class":183},[100,2429,2430,2433,2435],{"class":102,"line":642},[100,2431,2432],{"class":1889},"      failedCounter",[100,2434,1893],{"class":113},[100,2436,2000],{"class":183},[100,2438,2439,2442,2444],{"class":102,"line":655},[100,2440,2441],{"class":1889},"      sumDataSize",[100,2443,1893],{"class":113},[100,2445,2000],{"class":183},[100,2447,2448,2451,2453],{"class":102,"line":660},[100,2449,2450],{"class":1889},"      avgRate",[100,2452,1893],{"class":113},[100,2454,2000],{"class":183},[100,2456,2457,2460,2462],{"class":102,"line":666},[100,2458,2459],{"class":1889},"      status",[100,2461,1893],{"class":113},[100,2463,1896],{"class":183},[100,2465,2466],{"class":102,"line":691},[100,2467,469],{"class":117},[100,2469,2470],{"class":102,"line":707},[100,2471,2472],{"class":117},"  }>\n",[100,2474,2475],{"class":102,"line":712},[100,2476,2315],{"class":117},[100,2478,2479],{"class":102,"line":718},[100,2480,158],{"emptyLinePlaceholder":157},[100,2482,2483,2485,2488],{"class":102,"line":737},[100,2484,1878],{"class":113},[100,2486,2487],{"class":170}," StreamConfigListResponse",[100,2489,1884],{"class":117},[100,2491,2492,2495,2497,2499],{"class":102,"line":750},[100,2493,2494],{"class":1889},"  items",[100,2496,1893],{"class":113},[100,2498,1881],{"class":170},[100,2500,2501],{"class":117},"[]\n",[100,2503,2504,2507,2509],{"class":102,"line":761},[100,2505,2506],{"class":1889},"  total",[100,2508,1893],{"class":113},[100,2510,2000],{"class":183},[100,2512,2513,2516,2518],{"class":102,"line":766},[100,2514,2515],{"class":1889},"  filtered",[100,2517,1893],{"class":113},[100,2519,2000],{"class":183},[100,2521,2522],{"class":102,"line":772},[100,2523,2315],{"class":117},[100,2525,2526],{"class":102,"line":794},[100,2527,158],{"emptyLinePlaceholder":157},[100,2529,2530,2533,2536],{"class":102,"line":807},[100,2531,2532],{"class":113},"class",[100,2534,2535],{"class":170}," DBConvertStreamsAPI",[100,2537,1884],{"class":117},[100,2539,2540,2543,2546,2548],{"class":102,"line":818},[100,2541,2542],{"class":113},"  private",[100,2544,2545],{"class":1889}," client",[100,2547,1893],{"class":113},[100,2549,2550],{"class":170}," AxiosInstance\n",[100,2552,2553],{"class":102,"line":823},[100,2554,158],{"emptyLinePlaceholder":157},[100,2556,2557,2560,2563,2566,2568,2570,2573,2576,2578,2580,2582,2585,2588,2591],{"class":102,"line":829},[100,2558,2559],{"class":113},"  constructor",[100,2561,2562],{"class":117},"(",[100,2564,2565],{"class":1889},"apiKey",[100,2567,1893],{"class":113},[100,2569,1973],{"class":183},[100,2571,2572],{"class":117},", ",[100,2574,2575],{"class":1889},"installId",[100,2577,1893],{"class":113},[100,2579,1973],{"class":183},[100,2581,2572],{"class":117},[100,2583,2584],{"class":1889},"baseURL",[100,2586,2587],{"class":113}," =",[100,2589,2590],{"class":124}," 'http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1'",[100,2592,2593],{"class":117},") {\n",[100,2595,2596,2599,2602,2604,2607,2610],{"class":102,"line":851},[100,2597,2598],{"class":183},"    this",[100,2600,2601],{"class":117},".client ",[100,2603,121],{"class":113},[100,2605,2606],{"class":117}," axios.",[100,2608,2609],{"class":170},"create",[100,2611,2612],{"class":117},"({\n",[100,2614,2615],{"class":102,"line":864},[100,2616,2617],{"class":117},"      baseURL,\n",[100,2619,2620],{"class":102,"line":875},[100,2621,2622],{"class":117},"      headers: {\n",[100,2624,2625,2628],{"class":102,"line":880},[100,2626,2627],{"class":124},"        'X-API-Key'",[100,2629,2630],{"class":117},": apiKey,\n",[100,2632,2633,2636],{"class":102,"line":886},[100,2634,2635],{"class":124},"        'X-Install-ID'",[100,2637,2638],{"class":117},": installId,\n",[100,2640,2641,2644,2647,2650],{"class":102,"line":908},[100,2642,2643],{"class":124},"        'Content-Type'",[100,2645,2646],{"class":117},": ",[100,2648,2649],{"class":124},"'application\u002Fjson'",[100,2651,2652],{"class":117},",\n",[100,2654,2655],{"class":102,"line":921},[100,2656,2657],{"class":117},"      },\n",[100,2659,2660],{"class":102,"line":932},[100,2661,2662],{"class":117},"    })\n",[100,2664,2665],{"class":102,"line":937},[100,2666,2037],{"class":117},[100,2668,2669],{"class":102,"line":943},[100,2670,158],{"emptyLinePlaceholder":157},[100,2672,2673,2676,2679,2682,2684,2687,2689,2692],{"class":102,"line":961},[100,2674,2675],{"class":113},"  async",[100,2677,2678],{"class":170}," loadUserConfigs",[100,2680,2681],{"class":117},"()",[100,2683,1893],{"class":113},[100,2685,2686],{"class":170}," Promise",[100,2688,2012],{"class":117},[100,2690,2691],{"class":183},"void",[100,2693,2694],{"class":117},"> {\n",[100,2696,2697,2700,2703,2706,2709,2711,2714],{"class":102,"line":974},[100,2698,2699],{"class":113},"    await",[100,2701,2702],{"class":183}," this",[100,2704,2705],{"class":117},".client.",[100,2707,2708],{"class":170},"get",[100,2710,2562],{"class":117},[100,2712,2713],{"class":124},"'\u002Fuser\u002Fconfigs'",[100,2715,478],{"class":117},[100,2717,2718],{"class":102,"line":985},[100,2719,2037],{"class":117},[100,2721,2722],{"class":102,"line":990},[100,2723,158],{"emptyLinePlaceholder":157},[100,2725,2726,2728,2731,2733,2736,2738,2740,2742,2744,2746,2748,2751,2754,2756,2759,2761,2763],{"class":102,"line":996},[100,2727,2675],{"class":113},[100,2729,2730],{"class":170}," createStreamConfig",[100,2732,2562],{"class":117},[100,2734,2735],{"class":1889},"config",[100,2737,1893],{"class":113},[100,2739,1881],{"class":170},[100,2741,42],{"class":117},[100,2743,1893],{"class":113},[100,2745,2686],{"class":170},[100,2747,2012],{"class":117},[100,2749,2750],{"class":170},"StreamConfigRequest",[100,2752,2753],{"class":113}," &",[100,2755,2205],{"class":117},[100,2757,2758],{"class":1889},"id",[100,2760,1893],{"class":113},[100,2762,1973],{"class":183},[100,2764,2765],{"class":117}," }> {\n",[100,2767,2768,2771,2773,2776,2779,2781,2784,2786,2788,2791,2793,2796],{"class":102,"line":1014},[100,2769,2770],{"class":113},"    const",[100,2772,2205],{"class":117},[100,2774,2775],{"class":183},"data",[100,2777,2778],{"class":117}," } ",[100,2780,121],{"class":113},[100,2782,2783],{"class":113}," await",[100,2785,2702],{"class":183},[100,2787,2705],{"class":117},[100,2789,2790],{"class":170},"post",[100,2792,2562],{"class":117},[100,2794,2795],{"class":124},"'\u002Fstream-configs'",[100,2797,2798],{"class":117},", config)\n",[100,2800,2801,2804],{"class":102,"line":1027},[100,2802,2803],{"class":113},"    return",[100,2805,2806],{"class":117}," data\n",[100,2808,2809],{"class":102,"line":1038},[100,2810,2037],{"class":117},[100,2812,2813],{"class":102,"line":1043},[100,2814,158],{"emptyLinePlaceholder":157},[100,2816,2817,2819,2822,2824,2826,2828,2830,2833],{"class":102,"line":1049},[100,2818,2675],{"class":113},[100,2820,2821],{"class":170}," listStreamConfigs",[100,2823,2681],{"class":117},[100,2825,1893],{"class":113},[100,2827,2686],{"class":170},[100,2829,2012],{"class":117},[100,2831,2832],{"class":170},"StreamConfigListResponse",[100,2834,2694],{"class":117},[100,2836,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2859],{"class":102,"line":1071},[100,2838,2770],{"class":113},[100,2840,2205],{"class":117},[100,2842,2775],{"class":183},[100,2844,2778],{"class":117},[100,2846,121],{"class":113},[100,2848,2783],{"class":113},[100,2850,2702],{"class":183},[100,2852,2705],{"class":117},[100,2854,2708],{"class":170},[100,2856,2562],{"class":117},[100,2858,2795],{"class":124},[100,2860,478],{"class":117},[100,2862,2863,2865],{"class":102,"line":1084},[100,2864,2803],{"class":113},[100,2866,2806],{"class":117},[100,2868,2869],{"class":102,"line":1097},[100,2870,2037],{"class":117},[100,2872,2873],{"class":102,"line":1561},[100,2874,158],{"emptyLinePlaceholder":157},[100,2876,2877,2879,2882,2884,2887,2889,2891,2893,2895,2897,2899,2902],{"class":102,"line":1567},[100,2878,2675],{"class":113},[100,2880,2881],{"class":170}," startStream",[100,2883,2562],{"class":117},[100,2885,2886],{"class":1889},"configId",[100,2888,1893],{"class":113},[100,2890,1973],{"class":183},[100,2892,42],{"class":117},[100,2894,1893],{"class":113},[100,2896,2686],{"class":170},[100,2898,2012],{"class":117},[100,2900,2901],{"class":170},"StartStreamResponse",[100,2903,2694],{"class":117},[100,2905,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2929,2931,2934],{"class":102,"line":1572},[100,2907,2770],{"class":113},[100,2909,2205],{"class":117},[100,2911,2775],{"class":183},[100,2913,2778],{"class":117},[100,2915,121],{"class":113},[100,2917,2783],{"class":113},[100,2919,2702],{"class":183},[100,2921,2705],{"class":117},[100,2923,2790],{"class":170},[100,2925,2562],{"class":117},[100,2927,2928],{"class":124},"`\u002Fstream-configs\u002F${",[100,2930,2886],{"class":117},[100,2932,2933],{"class":124},"}\u002Fstart`",[100,2935,478],{"class":117},[100,2937,2938,2940],{"class":102,"line":1577},[100,2939,2803],{"class":113},[100,2941,2806],{"class":117},[100,2943,2944],{"class":102,"line":1582},[100,2945,2037],{"class":117},[100,2947,2948],{"class":102,"line":1588},[100,2949,158],{"emptyLinePlaceholder":157},[100,2951,2952,2954,2957,2959,2962,2964,2966,2968,2970,2972,2974,2977],{"class":102,"line":1594},[100,2953,2675],{"class":113},[100,2955,2956],{"class":170}," getStats",[100,2958,2562],{"class":117},[100,2960,2961],{"class":1889},"streamId",[100,2963,1893],{"class":113},[100,2965,1973],{"class":183},[100,2967,42],{"class":117},[100,2969,1893],{"class":113},[100,2971,2686],{"class":170},[100,2973,2012],{"class":117},[100,2975,2976],{"class":170},"StatResponse",[100,2978,2694],{"class":117},[100,2980,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3004,3006,3009],{"class":102,"line":1600},[100,2982,2770],{"class":113},[100,2984,2205],{"class":117},[100,2986,2775],{"class":183},[100,2988,2778],{"class":117},[100,2990,121],{"class":113},[100,2992,2783],{"class":113},[100,2994,2702],{"class":183},[100,2996,2705],{"class":117},[100,2998,2708],{"class":170},[100,3000,2562],{"class":117},[100,3002,3003],{"class":124},"`\u002Fstreams\u002F${",[100,3005,2961],{"class":117},[100,3007,3008],{"class":124},"}\u002Fstats`",[100,3010,478],{"class":117},[100,3012,3013,3015],{"class":102,"line":1606},[100,3014,2803],{"class":113},[100,3016,2806],{"class":117},[100,3018,3019],{"class":102,"line":1612},[100,3020,2037],{"class":117},[100,3022,3023],{"class":102,"line":1618},[100,3024,158],{"emptyLinePlaceholder":157},[100,3026,3027,3029,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050],{"class":102,"line":1624},[100,3028,2675],{"class":113},[100,3030,3031],{"class":170}," pauseStream",[100,3033,2562],{"class":117},[100,3035,2961],{"class":1889},[100,3037,1893],{"class":113},[100,3039,1973],{"class":183},[100,3041,42],{"class":117},[100,3043,1893],{"class":113},[100,3045,2686],{"class":170},[100,3047,2012],{"class":117},[100,3049,2691],{"class":183},[100,3051,2694],{"class":117},[100,3053,3054,3056,3058,3060,3062,3064,3066,3068,3071],{"class":102,"line":1629},[100,3055,2699],{"class":113},[100,3057,2702],{"class":183},[100,3059,2705],{"class":117},[100,3061,2790],{"class":170},[100,3063,2562],{"class":117},[100,3065,3003],{"class":124},[100,3067,2961],{"class":117},[100,3069,3070],{"class":124},"}\u002Fpause`",[100,3072,478],{"class":117},[100,3074,3075],{"class":102,"line":1634},[100,3076,2037],{"class":117},[100,3078,3079],{"class":102,"line":1640},[100,3080,158],{"emptyLinePlaceholder":157},[100,3082,3083,3085,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106],{"class":102,"line":1646},[100,3084,2675],{"class":113},[100,3086,3087],{"class":170}," resumeStream",[100,3089,2562],{"class":117},[100,3091,2961],{"class":1889},[100,3093,1893],{"class":113},[100,3095,1973],{"class":183},[100,3097,42],{"class":117},[100,3099,1893],{"class":113},[100,3101,2686],{"class":170},[100,3103,2012],{"class":117},[100,3105,2691],{"class":183},[100,3107,2694],{"class":117},[100,3109,3110,3112,3114,3116,3118,3120,3122,3124,3127],{"class":102,"line":1652},[100,3111,2699],{"class":113},[100,3113,2702],{"class":183},[100,3115,2705],{"class":117},[100,3117,2790],{"class":170},[100,3119,2562],{"class":117},[100,3121,3003],{"class":124},[100,3123,2961],{"class":117},[100,3125,3126],{"class":124},"}\u002Fresume`",[100,3128,478],{"class":117},[100,3130,3131],{"class":102,"line":1658},[100,3132,2037],{"class":117},[100,3134,3135],{"class":102,"line":1664},[100,3136,158],{"emptyLinePlaceholder":157},[100,3138,3139,3141,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162],{"class":102,"line":1670},[100,3140,2675],{"class":113},[100,3142,3143],{"class":170}," stopStream",[100,3145,2562],{"class":117},[100,3147,2961],{"class":1889},[100,3149,1893],{"class":113},[100,3151,1973],{"class":183},[100,3153,42],{"class":117},[100,3155,1893],{"class":113},[100,3157,2686],{"class":170},[100,3159,2012],{"class":117},[100,3161,2691],{"class":183},[100,3163,2694],{"class":117},[100,3165,3166,3168,3170,3172,3174,3176,3178,3180,3183],{"class":102,"line":1676},[100,3167,2699],{"class":113},[100,3169,2702],{"class":183},[100,3171,2705],{"class":117},[100,3173,2790],{"class":170},[100,3175,2562],{"class":117},[100,3177,3003],{"class":124},[100,3179,2961],{"class":117},[100,3181,3182],{"class":124},"}\u002Fstop`",[100,3184,478],{"class":117},[100,3186,3187],{"class":102,"line":1682},[100,3188,2037],{"class":117},[100,3190,3191],{"class":102,"line":1688},[100,3192,2315],{"class":117},[100,3194,3195],{"class":102,"line":1694},[100,3196,158],{"emptyLinePlaceholder":157},[100,3198,3199],{"class":102,"line":1699},[100,3200,3201],{"class":106},"\u002F\u002F Usage\n",[100,3203,3204,3207,3210,3213],{"class":102,"line":1705},[100,3205,3206],{"class":113},"async",[100,3208,3209],{"class":113}," function",[100,3211,3212],{"class":170}," main",[100,3214,3215],{"class":117},"() {\n",[100,3217,3218,3221,3224,3226,3229,3231,3233,3236,3238,3241],{"class":102,"line":1710},[100,3219,3220],{"class":113},"  const",[100,3222,3223],{"class":183}," api",[100,3225,2587],{"class":113},[100,3227,3228],{"class":113}," new",[100,3230,2535],{"class":170},[100,3232,2562],{"class":117},[100,3234,3235],{"class":124},"'your_api_key'",[100,3237,2572],{"class":117},[100,3239,3240],{"class":124},"'your_install_id'",[100,3242,478],{"class":117},[100,3244,3245,3248,3251,3254],{"class":102,"line":1716},[100,3246,3247],{"class":113},"  await",[100,3249,3250],{"class":117}," api.",[100,3252,3253],{"class":170},"loadUserConfigs",[100,3255,3256],{"class":117},"()\n",[100,3258,3259],{"class":102,"line":1722},[100,3260,158],{"emptyLinePlaceholder":157},[100,3262,3263],{"class":102,"line":1727},[100,3264,3265],{"class":106},"  \u002F\u002F Create a stream configuration\n",[100,3267,3268,3270,3273,3275,3277,3279,3282],{"class":102,"line":1733},[100,3269,3220],{"class":113},[100,3271,3272],{"class":183}," config",[100,3274,2587],{"class":113},[100,3276,2783],{"class":113},[100,3278,3250],{"class":117},[100,3280,3281],{"class":170},"createStreamConfig",[100,3283,2612],{"class":117},[100,3285,3286,3289,3292],{"class":102,"line":1739},[100,3287,3288],{"class":117},"    name: ",[100,3290,3291],{"class":124},"'mysql_to_postgresql'",[100,3293,2652],{"class":117},[100,3295,3296,3299,3302],{"class":102,"line":1745},[100,3297,3298],{"class":117},"    mode: ",[100,3300,3301],{"class":124},"'load'",[100,3303,2652],{"class":117},[100,3305,3306],{"class":102,"line":1751},[100,3307,3308],{"class":117},"    source: {\n",[100,3310,3311],{"class":102,"line":1756},[100,3312,3313],{"class":117},"      connections: [\n",[100,3315,3316],{"class":102,"line":1762},[100,3317,332],{"class":117},[100,3319,3320,3323,3326],{"class":102,"line":1768},[100,3321,3322],{"class":117},"          connectionId: ",[100,3324,3325],{"class":124},"'conn_source_id'",[100,3327,2652],{"class":117},[100,3329,3330,3333,3336],{"class":102,"line":1774},[100,3331,3332],{"class":117},"          database: ",[100,3334,3335],{"class":124},"'sakila'",[100,3337,2652],{"class":117},[100,3339,3340,3343,3346,3349,3352],{"class":102,"line":1780},[100,3341,3342],{"class":117},"          tables: [{ name: ",[100,3344,3345],{"class":124},"'actor'",[100,3347,3348],{"class":117}," }, { name: ",[100,3350,3351],{"class":124},"'film'",[100,3353,3354],{"class":117}," }],\n",[100,3356,3357],{"class":102,"line":1786},[100,3358,1702],{"class":117},[100,3360,3361],{"class":102,"line":1791},[100,3362,3363],{"class":117},"      ],\n",[100,3365,3366],{"class":102,"line":1797},[100,3367,386],{"class":117},[100,3369,3370],{"class":102,"line":1803},[100,3371,3372],{"class":117},"    target: {\n",[100,3374,3375,3378,3381],{"class":102,"line":1809},[100,3376,3377],{"class":117},"      id: ",[100,3379,3380],{"class":124},"'conn_target_id'",[100,3382,2652],{"class":117},[100,3384,3385],{"class":102,"line":1814},[100,3386,3387],{"class":117},"      spec: {\n",[100,3389,3390],{"class":102,"line":1820},[100,3391,3392],{"class":117},"        db: {\n",[100,3394,3395,3397,3400],{"class":102,"line":1826},[100,3396,3332],{"class":117},[100,3398,3399],{"class":124},"'postgres'",[100,3401,2652],{"class":117},[100,3403,3404,3407,3410],{"class":102,"line":1831},[100,3405,3406],{"class":117},"          writeMode: ",[100,3408,3409],{"class":124},"'truncate_and_load'",[100,3411,2652],{"class":117},[100,3413,3414,3417,3420,3423,3425,3428,3430],{"class":102,"line":1837},[100,3415,3416],{"class":117},"          structureOptions: { tables: ",[100,3418,3419],{"class":183},"true",[100,3421,3422],{"class":117},", indexes: ",[100,3424,3419],{"class":183},[100,3426,3427],{"class":117},", foreignKeys: ",[100,3429,3419],{"class":183},[100,3431,3432],{"class":117}," },\n",[100,3434,3435],{"class":102,"line":1843},[100,3436,1702],{"class":117},[100,3438,3440],{"class":102,"line":3439},150,[100,3441,2657],{"class":117},[100,3443,3445],{"class":102,"line":3444},151,[100,3446,386],{"class":117},[100,3448,3450],{"class":102,"line":3449},152,[100,3451,3452],{"class":117},"  })\n",[100,3454,3456,3459,3462,3464,3467],{"class":102,"line":3455},153,[100,3457,3458],{"class":117},"  console.",[100,3460,3461],{"class":170},"log",[100,3463,2562],{"class":117},[100,3465,3466],{"class":124},"'Config ID:'",[100,3468,3469],{"class":117},", config.id)\n",[100,3471,3473],{"class":102,"line":3472},154,[100,3474,158],{"emptyLinePlaceholder":157},[100,3476,3478],{"class":102,"line":3477},155,[100,3479,3480],{"class":106},"  \u002F\u002F Start a stream\n",[100,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3505],{"class":102,"line":3483},156,[100,3485,3220],{"class":113},[100,3487,2205],{"class":117},[100,3489,2758],{"class":1889},[100,3491,2646],{"class":117},[100,3493,2961],{"class":183},[100,3495,2778],{"class":117},[100,3497,121],{"class":113},[100,3499,2783],{"class":113},[100,3501,3250],{"class":117},[100,3503,3504],{"class":170},"startStream",[100,3506,3507],{"class":117},"(config.id)\n",[100,3509,3511,3513,3515,3517,3520],{"class":102,"line":3510},157,[100,3512,3458],{"class":117},[100,3514,3461],{"class":170},[100,3516,2562],{"class":117},[100,3518,3519],{"class":124},"'Stream ID:'",[100,3521,3522],{"class":117},", streamId)\n",[100,3524,3526],{"class":102,"line":3525},158,[100,3527,158],{"emptyLinePlaceholder":157},[100,3529,3531],{"class":102,"line":3530},159,[100,3532,3533],{"class":106},"  \u002F\u002F Monitor statistics\n",[100,3535,3537,3539,3542,3544,3546,3548,3551],{"class":102,"line":3536},160,[100,3538,3220],{"class":113},[100,3540,3541],{"class":183}," stats",[100,3543,2587],{"class":113},[100,3545,2783],{"class":113},[100,3547,3250],{"class":117},[100,3549,3550],{"class":170},"getStats",[100,3552,3553],{"class":117},"(streamId)\n",[100,3555,3557,3559,3561,3563,3566],{"class":102,"line":3556},161,[100,3558,3458],{"class":117},[100,3560,3461],{"class":170},[100,3562,2562],{"class":117},[100,3564,3565],{"class":124},"'Status:'",[100,3567,3568],{"class":117},", stats.status)\n",[100,3570,3572,3575,3577,3580,3583,3586],{"class":102,"line":3571},162,[100,3573,3574],{"class":113},"  for",[100,3576,61],{"class":117},[100,3578,3579],{"class":113},"const",[100,3581,3582],{"class":183}," node",[100,3584,3585],{"class":113}," of",[100,3587,3588],{"class":117}," stats.nodes) {\n",[100,3590,3592,3595,3597,3599,3602,3605,3607,3609,3612,3614,3616,3619,3621,3624,3627],{"class":102,"line":3591},163,[100,3593,3594],{"class":117},"    console.",[100,3596,3461],{"class":170},[100,3598,2562],{"class":117},[100,3600,3601],{"class":124},"`  ${",[100,3603,3604],{"class":117},"node",[100,3606,22],{"class":124},[100,3608,2758],{"class":117},[100,3610,3611],{"class":124},"}: ${",[100,3613,3604],{"class":117},[100,3615,22],{"class":124},[100,3617,3618],{"class":117},"stat",[100,3620,22],{"class":124},[100,3622,3623],{"class":117},"counter",[100,3625,3626],{"class":124},"} rows`",[100,3628,478],{"class":117},[100,3630,3632],{"class":102,"line":3631},164,[100,3633,2037],{"class":117},[100,3635,3637],{"class":102,"line":3636},165,[100,3638,158],{"emptyLinePlaceholder":157},[100,3640,3642],{"class":102,"line":3641},166,[100,3643,3644],{"class":106},"  \u002F\u002F Pause, resume, stop\n",[100,3646,3648,3650,3652,3655],{"class":102,"line":3647},167,[100,3649,3247],{"class":113},[100,3651,3250],{"class":117},[100,3653,3654],{"class":170},"pauseStream",[100,3656,3553],{"class":117},[100,3658,3660,3662,3664,3666,3669],{"class":102,"line":3659},168,[100,3661,3458],{"class":117},[100,3663,3461],{"class":170},[100,3665,2562],{"class":117},[100,3667,3668],{"class":124},"'Stream paused'",[100,3670,478],{"class":117},[100,3672,3674],{"class":102,"line":3673},169,[100,3675,158],{"emptyLinePlaceholder":157},[100,3677,3679,3681,3683,3686],{"class":102,"line":3678},170,[100,3680,3247],{"class":113},[100,3682,3250],{"class":117},[100,3684,3685],{"class":170},"resumeStream",[100,3687,3553],{"class":117},[100,3689,3691,3693,3695,3697,3700],{"class":102,"line":3690},171,[100,3692,3458],{"class":117},[100,3694,3461],{"class":170},[100,3696,2562],{"class":117},[100,3698,3699],{"class":124},"'Stream resumed'",[100,3701,478],{"class":117},[100,3703,3705],{"class":102,"line":3704},172,[100,3706,158],{"emptyLinePlaceholder":157},[100,3708,3710,3712,3714,3717],{"class":102,"line":3709},173,[100,3711,3247],{"class":113},[100,3713,3250],{"class":117},[100,3715,3716],{"class":170},"stopStream",[100,3718,3553],{"class":117},[100,3720,3722,3724,3726,3728,3731],{"class":102,"line":3721},174,[100,3723,3458],{"class":117},[100,3725,3461],{"class":170},[100,3727,2562],{"class":117},[100,3729,3730],{"class":124},"'Stream stopped'",[100,3732,478],{"class":117},[100,3734,3736],{"class":102,"line":3735},175,[100,3737,2315],{"class":117},[100,3739,3741],{"class":102,"line":3740},176,[100,3742,158],{"emptyLinePlaceholder":157},[100,3744,3746,3749,3752,3755],{"class":102,"line":3745},177,[100,3747,3748],{"class":170},"main",[100,3750,3751],{"class":117},"().",[100,3753,3754],{"class":170},"catch",[100,3756,3757],{"class":117},"(console.error)\n",[88,3759,3760],{"v-slot:powershell":90},[92,3761,3765],{"className":3762,"code":3763,"language":3764,"meta":90,"style":90},"language-powershell shiki shiki-themes github-light github-dark","class DBConvertStreamsAPI {\n    [string]$BaseURL\n    [hashtable]$Headers\n\n    DBConvertStreamsAPI([string]$ApiKey, [string]$InstallId,\n                       [string]$BaseURL = \"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\") {\n        $this.BaseURL = $BaseURL\n        $this.Headers = @{\n            \"X-API-Key\"    = $ApiKey\n            \"X-Install-ID\" = $InstallId\n            \"Content-Type\" = \"application\u002Fjson\"\n        }\n    }\n\n    [void] LoadUserConfigs() {\n        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fuser\u002Fconfigs\" `\n            -Headers $this.Headers -Method Get\n    }\n\n    [object] CreateStreamConfig([hashtable]$Data) {\n        $body = $Data | ConvertTo-Json -Depth 10\n        return Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstream-configs\" `\n            -Headers $this.Headers -Method Post -Body $body\n    }\n\n    [object] ListStreamConfigs() {\n        return Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstream-configs\" `\n            -Headers $this.Headers -Method Get\n    }\n\n    [object] StartStream([string]$ConfigId) {\n        return Invoke-RestMethod `\n            -Uri \"$($this.BaseURL)\u002Fstream-configs\u002F$ConfigId\u002Fstart\" `\n            -Headers $this.Headers -Method Post\n    }\n\n    [object] GetStats([string]$StreamId) {\n        return Invoke-RestMethod `\n            -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fstats\" `\n            -Headers $this.Headers -Method Get\n    }\n\n    [void] PauseStream([string]$StreamId) {\n        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fpause\" `\n            -Headers $this.Headers -Method Post\n    }\n\n    [void] ResumeStream([string]$StreamId) {\n        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fresume\" `\n            -Headers $this.Headers -Method Post\n    }\n\n    [void] StopStream([string]$StreamId) {\n        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fstop\" `\n            -Headers $this.Headers -Method Post\n    }\n}\n\n# Usage\n$api = [DBConvertStreamsAPI]::new(\"your_api_key\", \"your_install_id\")\n$api.LoadUserConfigs()\n\n# Create a stream configuration\n$config = $api.CreateStreamConfig(@{\n    name = \"mysql_to_postgresql\"\n    mode = \"load\"\n    source = @{\n        connections = @(\n            @{\n                connectionId = \"conn_source_id\"\n                database     = \"sakila\"\n                tables       = @(\n                    @{ name = \"actor\" }\n                    @{ name = \"film\" }\n                )\n            }\n        )\n    }\n    target = @{\n        id   = \"conn_target_id\"\n        spec = @{\n            db = @{\n                database         = \"postgres\"\n                writeMode        = \"truncate_and_load\"\n                structureOptions = @{\n                    tables      = $true\n                    indexes     = $true\n                    foreignKeys = $true\n                }\n            }\n        }\n    }\n})\nWrite-Host \"Config ID: $($config.id)\"\n\n# Start a stream\n$result = $api.StartStream($config.id)\n$streamId = $result.id\nWrite-Host \"Stream ID: $streamId\"\n\n# Monitor statistics\n$stats = $api.GetStats($streamId)\nWrite-Host \"Status: $($stats.status)\"\nforeach ($node in $stats.nodes) {\n    Write-Host \"  $($node.id): $($node.stat.counter) rows\"\n}\n\n# Pause, resume, stop\n$api.PauseStream($streamId)\nWrite-Host \"Stream paused\"\n\n$api.ResumeStream($streamId)\nWrite-Host \"Stream resumed\"\n\n$api.StopStream($streamId)\nWrite-Host \"Stream stopped\"\n","powershell",[39,3766,3767,3772,3777,3782,3786,3791,3796,3801,3806,3811,3816,3821,3825,3829,3833,3838,3843,3848,3852,3856,3861,3866,3871,3876,3880,3884,3889,3893,3897,3901,3905,3910,3915,3920,3925,3929,3933,3938,3942,3947,3951,3955,3959,3964,3969,3973,3977,3981,3986,3991,3995,3999,4003,4008,4013,4017,4021,4025,4029,4033,4038,4043,4047,4051,4056,4061,4066,4071,4076,4081,4086,4091,4096,4101,4106,4111,4115,4119,4123,4128,4133,4138,4143,4148,4153,4158,4163,4168,4173,4178,4182,4186,4190,4194,4199,4203,4207,4212,4217,4222,4226,4230,4235,4240,4245,4250,4254,4258,4263,4268,4273,4277,4282,4287,4291,4296],{"__ignoreMap":90},[100,3768,3769],{"class":102,"line":103},[100,3770,3771],{},"class DBConvertStreamsAPI {\n",[100,3773,3774],{"class":102,"line":110},[100,3775,3776],{},"    [string]$BaseURL\n",[100,3778,3779],{"class":102,"line":128},[100,3780,3781],{},"    [hashtable]$Headers\n",[100,3783,3784],{"class":102,"line":141},[100,3785,158],{"emptyLinePlaceholder":157},[100,3787,3788],{"class":102,"line":154},[100,3789,3790],{},"    DBConvertStreamsAPI([string]$ApiKey, [string]$InstallId,\n",[100,3792,3793],{"class":102,"line":161},[100,3794,3795],{},"                       [string]$BaseURL = \"http:\u002F\u002F127.0.0.1:8020\u002Fapi\u002Fv1\") {\n",[100,3797,3798],{"class":102,"line":167},[100,3799,3800],{},"        $this.BaseURL = $BaseURL\n",[100,3802,3803],{"class":102,"line":187},[100,3804,3805],{},"        $this.Headers = @{\n",[100,3807,3808],{"class":102,"line":204},[100,3809,3810],{},"            \"X-API-Key\"    = $ApiKey\n",[100,3812,3813],{"class":102,"line":218},[100,3814,3815],{},"            \"X-Install-ID\" = $InstallId\n",[100,3817,3818],{"class":102,"line":223},[100,3819,3820],{},"            \"Content-Type\" = \"application\u002Fjson\"\n",[100,3822,3823],{"class":102,"line":229},[100,3824,374],{},[100,3826,3827],{"class":102,"line":260},[100,3828,469],{},[100,3830,3831],{"class":102,"line":273},[100,3832,158],{"emptyLinePlaceholder":157},[100,3834,3835],{"class":102,"line":286},[100,3836,3837],{},"    [void] LoadUserConfigs() {\n",[100,3839,3840],{"class":102,"line":296},[100,3841,3842],{},"        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fuser\u002Fconfigs\" `\n",[100,3844,3845],{"class":102,"line":305},[100,3846,3847],{},"            -Headers $this.Headers -Method Get\n",[100,3849,3850],{"class":102,"line":311},[100,3851,469],{},[100,3853,3854],{"class":102,"line":317},[100,3855,158],{"emptyLinePlaceholder":157},[100,3857,3858],{"class":102,"line":323},[100,3859,3860],{},"    [object] CreateStreamConfig([hashtable]$Data) {\n",[100,3862,3863],{"class":102,"line":329},[100,3864,3865],{},"        $body = $Data | ConvertTo-Json -Depth 10\n",[100,3867,3868],{"class":102,"line":335},[100,3869,3870],{},"        return Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstream-configs\" `\n",[100,3872,3873],{"class":102,"line":341},[100,3874,3875],{},"            -Headers $this.Headers -Method Post -Body $body\n",[100,3877,3878],{"class":102,"line":347},[100,3879,469],{},[100,3881,3882],{"class":102,"line":353},[100,3883,158],{"emptyLinePlaceholder":157},[100,3885,3886],{"class":102,"line":359},[100,3887,3888],{},"    [object] ListStreamConfigs() {\n",[100,3890,3891],{"class":102,"line":365},[100,3892,3870],{},[100,3894,3895],{"class":102,"line":371},[100,3896,3847],{},[100,3898,3899],{"class":102,"line":377},[100,3900,469],{},[100,3902,3903],{"class":102,"line":383},[100,3904,158],{"emptyLinePlaceholder":157},[100,3906,3907],{"class":102,"line":389},[100,3908,3909],{},"    [object] StartStream([string]$ConfigId) {\n",[100,3911,3912],{"class":102,"line":395},[100,3913,3914],{},"        return Invoke-RestMethod `\n",[100,3916,3917],{"class":102,"line":401},[100,3918,3919],{},"            -Uri \"$($this.BaseURL)\u002Fstream-configs\u002F$ConfigId\u002Fstart\" `\n",[100,3921,3922],{"class":102,"line":407},[100,3923,3924],{},"            -Headers $this.Headers -Method Post\n",[100,3926,3927],{"class":102,"line":413},[100,3928,469],{},[100,3930,3931],{"class":102,"line":419},[100,3932,158],{"emptyLinePlaceholder":157},[100,3934,3935],{"class":102,"line":425},[100,3936,3937],{},"    [object] GetStats([string]$StreamId) {\n",[100,3939,3940],{"class":102,"line":431},[100,3941,3914],{},[100,3943,3944],{"class":102,"line":437},[100,3945,3946],{},"            -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fstats\" `\n",[100,3948,3949],{"class":102,"line":443},[100,3950,3847],{},[100,3952,3953],{"class":102,"line":449},[100,3954,469],{},[100,3956,3957],{"class":102,"line":455},[100,3958,158],{"emptyLinePlaceholder":157},[100,3960,3961],{"class":102,"line":460},[100,3962,3963],{},"    [void] PauseStream([string]$StreamId) {\n",[100,3965,3966],{"class":102,"line":466},[100,3967,3968],{},"        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fpause\" `\n",[100,3970,3971],{"class":102,"line":472},[100,3972,3924],{},[100,3974,3975],{"class":102,"line":481},[100,3976,469],{},[100,3978,3979],{"class":102,"line":486},[100,3980,158],{"emptyLinePlaceholder":157},[100,3982,3983],{"class":102,"line":492},[100,3984,3985],{},"    [void] ResumeStream([string]$StreamId) {\n",[100,3987,3988],{"class":102,"line":522},[100,3989,3990],{},"        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fresume\" `\n",[100,3992,3993],{"class":102,"line":538},[100,3994,3924],{},[100,3996,3997],{"class":102,"line":543},[100,3998,469],{},[100,4000,4001],{"class":102,"line":549},[100,4002,158],{"emptyLinePlaceholder":157},[100,4004,4005],{"class":102,"line":562},[100,4006,4007],{},"    [void] StopStream([string]$StreamId) {\n",[100,4009,4010],{"class":102,"line":575},[100,4011,4012],{},"        Invoke-RestMethod -Uri \"$($this.BaseURL)\u002Fstreams\u002F$StreamId\u002Fstop\" `\n",[100,4014,4015],{"class":102,"line":586},[100,4016,3924],{},[100,4018,4019],{"class":102,"line":591},[100,4020,469],{},[100,4022,4023],{"class":102,"line":597},[100,4024,2315],{},[100,4026,4027],{"class":102,"line":629},[100,4028,158],{"emptyLinePlaceholder":157},[100,4030,4031],{"class":102,"line":642},[100,4032,1540],{},[100,4034,4035],{"class":102,"line":655},[100,4036,4037],{},"$api = [DBConvertStreamsAPI]::new(\"your_api_key\", \"your_install_id\")\n",[100,4039,4040],{"class":102,"line":660},[100,4041,4042],{},"$api.LoadUserConfigs()\n",[100,4044,4045],{"class":102,"line":666},[100,4046,158],{"emptyLinePlaceholder":157},[100,4048,4049],{"class":102,"line":691},[100,4050,226],{},[100,4052,4053],{"class":102,"line":707},[100,4054,4055],{},"$config = $api.CreateStreamConfig(@{\n",[100,4057,4058],{"class":102,"line":712},[100,4059,4060],{},"    name = \"mysql_to_postgresql\"\n",[100,4062,4063],{"class":102,"line":718},[100,4064,4065],{},"    mode = \"load\"\n",[100,4067,4068],{"class":102,"line":737},[100,4069,4070],{},"    source = @{\n",[100,4072,4073],{"class":102,"line":750},[100,4074,4075],{},"        connections = @(\n",[100,4077,4078],{"class":102,"line":761},[100,4079,4080],{},"            @{\n",[100,4082,4083],{"class":102,"line":766},[100,4084,4085],{},"                connectionId = \"conn_source_id\"\n",[100,4087,4088],{"class":102,"line":772},[100,4089,4090],{},"                database     = \"sakila\"\n",[100,4092,4093],{"class":102,"line":794},[100,4094,4095],{},"                tables       = @(\n",[100,4097,4098],{"class":102,"line":807},[100,4099,4100],{},"                    @{ name = \"actor\" }\n",[100,4102,4103],{"class":102,"line":818},[100,4104,4105],{},"                    @{ name = \"film\" }\n",[100,4107,4108],{"class":102,"line":823},[100,4109,4110],{},"                )\n",[100,4112,4113],{"class":102,"line":829},[100,4114,1615],{},[100,4116,4117],{"class":102,"line":851},[100,4118,1221],{},[100,4120,4121],{"class":102,"line":864},[100,4122,469],{},[100,4124,4125],{"class":102,"line":875},[100,4126,4127],{},"    target = @{\n",[100,4129,4130],{"class":102,"line":880},[100,4131,4132],{},"        id   = \"conn_target_id\"\n",[100,4134,4135],{"class":102,"line":886},[100,4136,4137],{},"        spec = @{\n",[100,4139,4140],{"class":102,"line":908},[100,4141,4142],{},"            db = @{\n",[100,4144,4145],{"class":102,"line":921},[100,4146,4147],{},"                database         = \"postgres\"\n",[100,4149,4150],{"class":102,"line":932},[100,4151,4152],{},"                writeMode        = \"truncate_and_load\"\n",[100,4154,4155],{"class":102,"line":937},[100,4156,4157],{},"                structureOptions = @{\n",[100,4159,4160],{"class":102,"line":943},[100,4161,4162],{},"                    tables      = $true\n",[100,4164,4165],{"class":102,"line":961},[100,4166,4167],{},"                    indexes     = $true\n",[100,4169,4170],{"class":102,"line":974},[100,4171,4172],{},"                    foreignKeys = $true\n",[100,4174,4175],{"class":102,"line":985},[100,4176,4177],{},"                }\n",[100,4179,4180],{"class":102,"line":990},[100,4181,1615],{},[100,4183,4184],{"class":102,"line":996},[100,4185,374],{},[100,4187,4188],{"class":102,"line":1014},[100,4189,469],{},[100,4191,4192],{"class":102,"line":1027},[100,4193,1713],{},[100,4195,4196],{"class":102,"line":1038},[100,4197,4198],{},"Write-Host \"Config ID: $($config.id)\"\n",[100,4200,4201],{"class":102,"line":1043},[100,4202,158],{"emptyLinePlaceholder":157},[100,4204,4205],{"class":102,"line":1049},[100,4206,1730],{},[100,4208,4209],{"class":102,"line":1071},[100,4210,4211],{},"$result = $api.StartStream($config.id)\n",[100,4213,4214],{"class":102,"line":1084},[100,4215,4216],{},"$streamId = $result.id\n",[100,4218,4219],{"class":102,"line":1097},[100,4220,4221],{},"Write-Host \"Stream ID: $streamId\"\n",[100,4223,4224],{"class":102,"line":1561},[100,4225,158],{"emptyLinePlaceholder":157},[100,4227,4228],{"class":102,"line":1567},[100,4229,1759],{},[100,4231,4232],{"class":102,"line":1572},[100,4233,4234],{},"$stats = $api.GetStats($streamId)\n",[100,4236,4237],{"class":102,"line":1577},[100,4238,4239],{},"Write-Host \"Status: $($stats.status)\"\n",[100,4241,4242],{"class":102,"line":1582},[100,4243,4244],{},"foreach ($node in $stats.nodes) {\n",[100,4246,4247],{"class":102,"line":1588},[100,4248,4249],{},"    Write-Host \"  $($node.id): $($node.stat.counter) rows\"\n",[100,4251,4252],{"class":102,"line":1594},[100,4253,2315],{},[100,4255,4256],{"class":102,"line":1600},[100,4257,158],{"emptyLinePlaceholder":157},[100,4259,4260],{"class":102,"line":1606},[100,4261,4262],{},"# Pause, resume, stop\n",[100,4264,4265],{"class":102,"line":1612},[100,4266,4267],{},"$api.PauseStream($streamId)\n",[100,4269,4270],{"class":102,"line":1618},[100,4271,4272],{},"Write-Host \"Stream paused\"\n",[100,4274,4275],{"class":102,"line":1624},[100,4276,158],{"emptyLinePlaceholder":157},[100,4278,4279],{"class":102,"line":1629},[100,4280,4281],{},"$api.ResumeStream($streamId)\n",[100,4283,4284],{"class":102,"line":1634},[100,4285,4286],{},"Write-Host \"Stream resumed\"\n",[100,4288,4289],{"class":102,"line":1640},[100,4290,158],{"emptyLinePlaceholder":157},[100,4292,4293],{"class":102,"line":1646},[100,4294,4295],{},"$api.StopStream($streamId)\n",[100,4297,4298],{"class":102,"line":1652},[100,4299,4300],{},"Write-Host \"Stream stopped\"\n",[24,4302,4304],{"id":4303},"error-handling","Error handling",[14,4306,4307],{},"The API returns structured errors:",[92,4309,4313],{"className":4310,"code":4311,"language":4312,"meta":90,"style":90},"language-json shiki shiki-themes github-light github-dark","{\n  \"error\": \"Cannot start new stream: found active streams that need attention\",\n  \"type\": \"validation\",\n  \"code\": \"VALIDATION_FAILED\",\n  \"details\": {\n    \"field\": \"stream_state\",\n    \"reason\": \"Cannot start new stream: found active streams that need attention\"\n  }\n}\n","json",[39,4314,4315,4320,4332,4344,4356,4364,4376,4386,4390],{"__ignoreMap":90},[100,4316,4317],{"class":102,"line":103},[100,4318,4319],{"class":117},"{\n",[100,4321,4322,4325,4327,4330],{"class":102,"line":110},[100,4323,4324],{"class":183},"  \"error\"",[100,4326,2646],{"class":117},[100,4328,4329],{"class":124},"\"Cannot start new stream: found active streams that need attention\"",[100,4331,2652],{"class":117},[100,4333,4334,4337,4339,4342],{"class":102,"line":128},[100,4335,4336],{"class":183},"  \"type\"",[100,4338,2646],{"class":117},[100,4340,4341],{"class":124},"\"validation\"",[100,4343,2652],{"class":117},[100,4345,4346,4349,4351,4354],{"class":102,"line":141},[100,4347,4348],{"class":183},"  \"code\"",[100,4350,2646],{"class":117},[100,4352,4353],{"class":124},"\"VALIDATION_FAILED\"",[100,4355,2652],{"class":117},[100,4357,4358,4361],{"class":102,"line":154},[100,4359,4360],{"class":183},"  \"details\"",[100,4362,4363],{"class":117},": {\n",[100,4365,4366,4369,4371,4374],{"class":102,"line":161},[100,4367,4368],{"class":183},"    \"field\"",[100,4370,2646],{"class":117},[100,4372,4373],{"class":124},"\"stream_state\"",[100,4375,2652],{"class":117},[100,4377,4378,4381,4383],{"class":102,"line":167},[100,4379,4380],{"class":183},"    \"reason\"",[100,4382,2646],{"class":117},[100,4384,4385],{"class":124},"\"Cannot start new stream: found active streams that need attention\"\n",[100,4387,4388],{"class":102,"line":187},[100,4389,2037],{"class":117},[100,4391,4392],{"class":102,"line":204},[100,4393,2315],{"class":117},[14,4395,4396],{},"Common status codes:",[4398,4399,4400,4413],"table",{},[4401,4402,4403],"thead",{},[4404,4405,4406,4410],"tr",{},[4407,4408,4409],"th",{},"Code",[4407,4411,4412],{},"Meaning",[4414,4415,4416,4425,4433,4441],"tbody",{},[4404,4417,4418,4422],{},[4419,4420,4421],"td",{},"400",[4419,4423,4424],{},"Validation error (missing fields, invalid config)",[4404,4426,4427,4430],{},[4419,4428,4429],{},"401",[4419,4431,4432],{},"Invalid or missing API key",[4404,4434,4435,4438],{},[4419,4436,4437],{},"404",[4419,4439,4440],{},"Configuration or stream not found",[4404,4442,4443,4446],{},[4419,4444,4445],{},"503",[4419,4447,4448],{},"Service error",[24,4450,4452],{"id":4451},"related-docs","Related docs",[29,4454,4455,4460,4465],{},[32,4456,4457,4459],{},[18,4458,21],{"href":20}," — Endpoint reference",[32,4461,4462,4464],{},[18,4463,49],{"href":48}," — Connection examples",[32,4466,4467,4471],{},[18,4468,4470],{"href":4469},"\u002Fdocs\u002Fapi\u002Flogs-and-monitoring","Logs And Monitoring"," — Stream stats and log retrieval",[4473,4474,4475],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":90,"searchDepth":110,"depth":110,"links":4477},[4478,4479,4480,4481],{"id":26,"depth":110,"text":27},{"id":79,"depth":110,"text":80},{"id":4303,"depth":110,"text":4304},{"id":4451,"depth":110,"text":4452},"Programming examples for working with the DBConvert Streams Stream API","md",{},false,"\u002Fdocs\u002Fapi\u002Fexamples-streams",null,{"title":5,"description":4482},"docs\u002Fapi\u002Fexamples-streams","5lCAbGjalMytZ1_q7vXJZaBrl63gQMcbwNM0qE0B37A",1783896285203]