[{"data":1,"prerenderedAt":620},["ShallowReactive",2],{"/docs/base/jobs-base/server-exports/gallery":3,"/docs/base/jobs-base/server-exports/gallery-surround":608,"/docs/base/jobs-base/server-exports/gallery-implemented-suggestions":619},{"id":4,"title":5,"body":6,"description":599,"extension":600,"head":601,"implementedSuggestions":601,"meta":602,"navigation":222,"path":603,"schemaOrg":601,"seo":604,"sitemap":605,"stem":606,"__hash__":607},"docs/1.docs/base/2.jobs-base/4.server-exports/8.gallery.md","Gallery",{"type":7,"value":8,"toc":590},"minimark",[9,17,21,34,41,131,274,280,299,372,378,423,487,493,509,546,552,567,586],[10,11,12],"p",{},[13,14,16],"a",{"href":15},"/docs/base/jobs-base/server-exports","All server exports",[18,19,5],"h2",{"id":20},"gallery",[10,22,23,24,28,29,33],{},"All gallery exports use the media provider selected in ",[25,26,27],"code",{},"sky_jobs_base/config/webhooks.lua",". See ",[13,30,32],{"href":31},"/docs/base/jobs-base/media-providers","Media Providers"," for FiveManage, Qbox CDN, and custom adapter setup.",[35,36,38],"h3",{"id":37},"takeserverimagesourceid-metadata-timeoutms-uploadconfig",[25,39,40],{},"takeServerImage(sourceId, metadata?, timeoutMs?, uploadConfig?)",[42,43,44,52,100],"ul",{},[45,46,47,51],"li",{},[48,49,50],"strong",{},"Purpose",": Requests a client capture from a player and uploads it through the configured provider.",[45,53,54,57,58],{},[48,55,56],{},"Arguments",":\n",[42,59,60,70,79,88],{},[45,61,62,65,66,69],{},[25,63,64],{},"sourceId"," (",[25,67,68],{},"number",") — server ID of the player whose client performs the capture.",[45,71,72,65,75,78],{},[25,73,74],{},"metadata",[25,76,77],{},"table?",") — optional capture metadata forwarded to the client.",[45,80,81,65,84,87],{},[25,82,83],{},"timeoutMs",[25,85,86],{},"number?",") — optional capture timeout in milliseconds.",[45,89,90,65,93,95,96,99],{},[25,91,92],{},"uploadConfig",[25,94,77],{},") — optional trusted server-side media options, including ",[25,97,98],{},"provider",".",[45,101,102,57,105],{},[48,103,104],{},"Returns",[42,106,107,121],{},[45,108,109,112,113,116,117,120],{},[25,110,111],{},"boolean"," — ",[25,114,115],{},"true"," on success, ",[25,118,119],{},"false"," on failure.",[45,122,123,126,127,130],{},[25,124,125],{},"table | string"," — on success: ",[25,128,129],{},"{ data = { url, id, image_id } }",". On failure: error message.",[132,133,138],"pre",{"className":134,"code":135,"language":136,"meta":137,"style":137},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","local ok, result = exports[\"sky_jobs_base\"]:takeServerImage(source, {\n    type = \"bodycam\",\n    timestamp = os.time()\n})\n\nif ok then\n    print(\"Uploaded:\", result.data.url)\nend\n","lua","",[25,139,140,178,197,211,217,224,237,268],{"__ignoreMap":137},[141,142,145,149,153,156,159,162,166,168,171,175],"span",{"class":143,"line":144},"line",1,[141,146,148],{"class":147},"sMK4o","local",[141,150,152],{"class":151},"sTEyZ"," ok, result ",[141,154,155],{"class":147},"=",[141,157,158],{"class":151}," exports[",[141,160,161],{"class":147},"\"",[141,163,165],{"class":164},"sfazB","sky_jobs_base",[141,167,161],{"class":147},[141,169,170],{"class":151},"]:",[141,172,174],{"class":173},"s2Zo4","takeServerImage",[141,176,177],{"class":151},"(source, {\n",[141,179,181,184,186,189,192,194],{"class":143,"line":180},2,[141,182,183],{"class":151},"    type ",[141,185,155],{"class":147},[141,187,188],{"class":147}," \"",[141,190,191],{"class":164},"bodycam",[141,193,161],{"class":147},[141,195,196],{"class":151},",\n",[141,198,200,203,205,208],{"class":143,"line":199},3,[141,201,202],{"class":151},"    timestamp ",[141,204,155],{"class":147},[141,206,207],{"class":173}," os.time",[141,209,210],{"class":151},"()\n",[141,212,214],{"class":143,"line":213},4,[141,215,216],{"class":151},"})\n",[141,218,220],{"class":143,"line":219},5,[141,221,223],{"emptyLinePlaceholder":222},true,"\n",[141,225,227,231,234],{"class":143,"line":226},6,[141,228,230],{"class":229},"s7zQu","if",[141,232,233],{"class":151}," ok ",[141,235,236],{"class":229},"then\n",[141,238,240,243,246,248,251,253,256,260,262,265],{"class":143,"line":239},7,[141,241,242],{"class":173},"    print",[141,244,245],{"class":151},"(",[141,247,161],{"class":147},[141,249,250],{"class":164},"Uploaded:",[141,252,161],{"class":147},[141,254,255],{"class":151},", result.",[141,257,259],{"class":258},"sBMFI","data",[141,261,99],{"class":151},[141,263,264],{"class":258},"url",[141,266,267],{"class":151},")\n",[141,269,271],{"class":143,"line":270},8,[141,272,273],{"class":229},"end\n",[35,275,277],{"id":276},"getmediauploadurl",[25,278,279],{},"getMediaUploadUrl()",[42,281,282,287],{},[45,283,284,286],{},[48,285,50],{},": Requests a temporary browser-safe upload URL from the selected provider.",[45,288,289,291,292,295,296,99],{},[48,290,104],{},": ",[25,293,294],{},"{ success = true, data = { presignedUrl, expiresIn?, provider, timeoutMs } }"," or ",[25,297,298],{},"{ success = false, error }",[132,300,302],{"className":134,"code":301,"language":136,"meta":137,"style":137},"local result = exports[\"sky_jobs_base\"]:getMediaUploadUrl()\n\nif result.success then\n    print(\"Provider:\", result.data.provider)\nend\n",[25,303,304,328,332,345,368],{"__ignoreMap":137},[141,305,306,308,311,313,315,317,319,321,323,326],{"class":143,"line":144},[141,307,148],{"class":147},[141,309,310],{"class":151}," result ",[141,312,155],{"class":147},[141,314,158],{"class":151},[141,316,161],{"class":147},[141,318,165],{"class":164},[141,320,161],{"class":147},[141,322,170],{"class":151},[141,324,325],{"class":173},"getMediaUploadUrl",[141,327,210],{"class":151},[141,329,330],{"class":143,"line":180},[141,331,223],{"emptyLinePlaceholder":222},[141,333,334,336,339,342],{"class":143,"line":199},[141,335,230],{"class":229},[141,337,338],{"class":151}," result.",[141,340,341],{"class":258},"success",[141,343,344],{"class":229}," then\n",[141,346,347,349,351,353,356,358,360,362,364,366],{"class":143,"line":213},[141,348,242],{"class":173},[141,350,245],{"class":151},[141,352,161],{"class":147},[141,354,355],{"class":164},"Provider:",[141,357,161],{"class":147},[141,359,255],{"class":151},[141,361,259],{"class":258},[141,363,99],{"class":151},[141,365,98],{"class":258},[141,367,267],{"class":151},[141,369,370],{"class":143,"line":219},[141,371,273],{"class":229},[35,373,375],{"id":374},"uploadmediadataurldataurl-options",[25,376,377],{},"uploadMediaDataUrl(dataUrl, options?)",[42,379,380,385,414],{},[45,381,382,384],{},[48,383,50],{},": Uploads a base64 data URL from a trusted server resource.",[45,386,387,57,389],{},[48,388,56],{},[42,390,391,400],{},[45,392,393,65,396,399],{},[25,394,395],{},"dataUrl",[25,397,398],{},"string",") — complete base64 data URL.",[45,401,402,65,405,407,408,295,411,99],{},[25,403,404],{},"options",[25,406,77],{},") — optional provider override and provider-specific fields such as ",[25,409,410],{},"filename",[25,412,413],{},"path",[45,415,416,291,418,295,421,99],{},[48,417,104],{},[25,419,420],{},"{ success = true, data = { url, id, image_id, provider } }",[25,422,298],{},[132,424,426],{"className":134,"code":425,"language":136,"meta":137,"style":137},"local result = exports[\"sky_jobs_base\"]:uploadMediaDataUrl(dataUrl, {\n    filename = \"evidence.png\",\n    path = \"cases/42\"\n})\n",[25,427,428,452,468,483],{"__ignoreMap":137},[141,429,430,432,434,436,438,440,442,444,446,449],{"class":143,"line":144},[141,431,148],{"class":147},[141,433,310],{"class":151},[141,435,155],{"class":147},[141,437,158],{"class":151},[141,439,161],{"class":147},[141,441,165],{"class":164},[141,443,161],{"class":147},[141,445,170],{"class":151},[141,447,448],{"class":173},"uploadMediaDataUrl",[141,450,451],{"class":151},"(dataUrl, {\n",[141,453,454,457,459,461,464,466],{"class":143,"line":180},[141,455,456],{"class":151},"    filename ",[141,458,155],{"class":147},[141,460,188],{"class":147},[141,462,463],{"class":164},"evidence.png",[141,465,161],{"class":147},[141,467,196],{"class":151},[141,469,470,473,475,477,480],{"class":143,"line":199},[141,471,472],{"class":151},"    path ",[141,474,155],{"class":147},[141,476,188],{"class":147},[141,478,479],{"class":164},"cases/42",[141,481,482],{"class":147},"\"\n",[141,484,485],{"class":143,"line":213},[141,486,216],{"class":151},[35,488,490],{"id":489},"deletemediafilefileid-options",[25,491,492],{},"deleteMediaFile(fileId, options?)",[42,494,495,500],{},[45,496,497,499],{},[48,498,50],{},": Deletes a remote media object using its provider ID or storage key.",[45,501,502,291,504,295,507,99],{},[48,503,104],{},[25,505,506],{},"{ success = true }",[25,508,298],{},[132,510,512],{"className":134,"code":511,"language":136,"meta":137,"style":137},"local result = exports[\"sky_jobs_base\"]:deleteMediaFile(\"provider-file-id\")\n",[25,513,514],{"__ignoreMap":137},[141,515,516,518,520,522,524,526,528,530,532,535,537,539,542,544],{"class":143,"line":144},[141,517,148],{"class":147},[141,519,310],{"class":151},[141,521,155],{"class":147},[141,523,158],{"class":151},[141,525,161],{"class":147},[141,527,165],{"class":164},[141,529,161],{"class":147},[141,531,170],{"class":151},[141,533,534],{"class":173},"deleteMediaFile",[141,536,245],{"class":151},[141,538,161],{"class":147},[141,540,541],{"class":164},"provider-file-id",[141,543,161],{"class":147},[141,545,267],{"class":151},[35,547,549],{"id":548},"registermediaprovidername-adapter",[25,550,551],{},"registerMediaProvider(name, adapter)",[42,553,554,559],{},[45,555,556,558],{},[48,557,50],{},": Registers or replaces a custom server-side media provider adapter.",[45,560,561,291,563,295,565,99],{},[48,562,104],{},[25,564,506],{},[25,566,298],{},[10,568,569,570,573,574,577,578,581,582,99],{},"The adapter must implement ",[25,571,572],{},"requestUploadUrl",", ",[25,575,576],{},"uploadDataUrl",", and ",[25,579,580],{},"deleteFile",". See the complete ",[13,583,585],{"href":584},"/docs/base/jobs-base/media-providers#register-a-custom-provider","custom provider contract",[587,588,589],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}",{"title":137,"searchDepth":144,"depth":180,"links":591},[592],{"id":20,"depth":180,"text":5,"children":593},[594,595,596,597,598],{"id":37,"depth":199,"text":40},{"id":276,"depth":199,"text":279},{"id":374,"depth":199,"text":377},{"id":489,"depth":199,"text":492},{"id":548,"depth":199,"text":551},"Reference for Gallery in sky_jobs_base.","md",null,{},"/docs/base/jobs-base/server-exports/gallery",{"title":5,"description":599},{"loc":603},"1.docs/base/2.jobs-base/4.server-exports/8.gallery","RaGvBWMVmkZ2QUSQURnQsbO7fAh7LUxB61W3FY79Jtw",[609,614],{"title":610,"path":611,"stem":612,"description":613,"children":-1},"Player Interaction Actions","/docs/base/jobs-base/server-exports/player-interaction-actions","1.docs/base/2.jobs-base/4.server-exports/7.player-interaction-actions","Reference for Player Interaction Actions in sky_jobs_base.",{"title":615,"path":616,"stem":617,"description":618,"children":-1},"Creator","/docs/base/jobs-base/server-exports/creator","1.docs/base/2.jobs-base/4.server-exports/9.creator","Reference for Creator in sky_jobs_base.",[],1791814182397]