{"version":3,"file":"file-COsoqLsS.mjs","names":["createServerFn","Upload","uuidv7","z","serverEnv","getAppToken","apiMiddleware","FileMeta","FileMetaSchema","GetFileMetasSchema","object","appName","string","min","max","subId","uuid","FileSchema","id","UpdateFileMetaSchema","extend","fileName","DeleteFileSchema","BatchDeleteFilesSchema","UploadFileResult","UploadFileMetaSchema","file","instanceof","File","getFileMetas","method","validator","middleware","baseURL","scopeKey","handler","data","context","queryParams","URLSearchParams","append","fileMetas","api","request","Array","url","toString","getFileThumbnail","response","ArrayBuffer","responseType","Response","headers","getFile","downloadFile","updateFileMeta","deleteFile","batchDeleteFiles","uploadFile","Promise","accessToken","buffer","Buffer","from","arrayBuffer","resolve","reject","upload","endpoint","FILE_BASE_URL","chunkSize","metadata","name","fileExtension","type","Authorization","onError","onSuccess","start"],"sources":["../src/data/server/file.ts"],"sourcesContent":["import { createServerFn } from \"@tanstack/react-start\";\nimport { Upload } from \"tus-js-client\";\nimport { uuidv7 } from \"uuidv7\";\nimport { z } from \"zod\";\nimport { serverEnv } from \"~/env\";\nimport { getAppToken } from \"~/lib/auth/msalServer\";\nimport { apiMiddleware } from \"~/middleware/apiMiddleware\";\nimport type { FileMeta } from \"~/models/file/FileMeta\";\nimport { FileMetaSchema } from \"~/models/file/FileMeta\";\n\nexport const GetFileMetasSchema = z.object({\n  appName: z.string().min(1).max(255),\n  subId: z.uuid(),\n});\n\nexport const FileSchema = z.object({\n  appName: z.string().min(1).max(255),\n  id: z.uuid(),\n});\n\nexport const UpdateFileMetaSchema = FileMetaSchema.extend({\n  fileName: z.string().min(1).max(255),\n});\n\nconst DeleteFileSchema = FileSchema;\n\nconst BatchDeleteFilesSchema = GetFileMetasSchema;\n\nexport interface UploadFileResult {\n  id: string;\n  appName: string;\n  subId: string;\n  fileName: string;\n}\n\nexport const UploadFileMetaSchema = z.object({\n  appName: z.string().min(1).max(255),\n  subId: z.uuid(),\n  file: z.instanceof(File),\n});\n\nexport const getFileMetas = createServerFn({ method: \"GET\" })\n  .validator(GetFileMetasSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"subId\", data.subId);\n\n    const { data: fileMetas } = await context.api.request<Array<FileMeta>>({\n      url: `/v1/meta?${queryParams.toString()}`,\n      method: \"GET\",\n    });\n    return fileMetas;\n  });\n\nexport const getFileThumbnail = createServerFn({ method: \"GET\" })\n  .validator(FileSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"id\", data.id);\n\n    const response = await context.api.request<ArrayBuffer>({\n      url: `/v1/thumbnail?${queryParams.toString()}`,\n      method: \"GET\",\n      responseType: \"arraybuffer\",\n    });\n\n    return new Response(response.data, {\n      headers: {\n        \"Content-Type\": response.headers[\"content-type\"] as string,\n      },\n    });\n  });\n\nexport const getFile = createServerFn({ method: \"GET\" })\n  .validator(FileSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"id\", data.id);\n\n    const response = await context.api.request<ArrayBuffer>({\n      url: `/v1?${queryParams.toString()}`,\n      method: \"GET\",\n      responseType: \"arraybuffer\",\n    });\n\n    return new Response(response.data, {\n      headers: {\n        \"Content-Type\": response.headers[\"content-type\"] as string,\n      },\n    });\n  });\n\nexport const downloadFile = createServerFn({ method: \"GET\" })\n  .validator(FileSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"id\", data.id);\n\n    const response = await context.api.request<ArrayBuffer>({\n      url: `/v1/download?${queryParams.toString()}`,\n      method: \"GET\",\n      responseType: \"arraybuffer\",\n    });\n\n    return new Response(response.data, {\n      headers: {\n        \"Content-Type\": response.headers[\"content-type\"] as string,\n      },\n    });\n  });\n\nexport const updateFileMeta = createServerFn({ method: \"POST\" })\n  .validator(UpdateFileMetaSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"id\", data.id);\n\n    await context.api.request({ url: `/v1/meta?${queryParams.toString()}`, method: \"PUT\", data });\n  });\n\nexport const deleteFile = createServerFn({ method: \"POST\" })\n  .validator(DeleteFileSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"id\", data.id);\n\n    await context.api.request({ url: `/v1?${queryParams.toString()}`, method: \"DELETE\" });\n  });\n\nexport const batchDeleteFiles = createServerFn({ method: \"POST\" })\n  .validator(BatchDeleteFilesSchema)\n  .middleware([apiMiddleware({ baseURL: \"FILE_BASE_URL\", scopeKey: \"file\" })])\n  .handler(async ({ data, context }) => {\n    const queryParams = new URLSearchParams();\n    queryParams.append(\"appName\", data.appName);\n    queryParams.append(\"subId\", data.subId);\n\n    await context.api.request({ url: `/v1?${queryParams.toString()}`, method: \"DELETE\" });\n  });\n\nexport const uploadFile = createServerFn({ method: \"POST\" })\n  .validator(UploadFileMetaSchema)\n  .handler(async ({ data }): Promise<UploadFileResult> => {\n    const accessToken = await getAppToken(\"file\");\n    const buffer = Buffer.from(await data.file.arrayBuffer());\n    const id = uuidv7();\n\n    await new Promise<void>((resolve, reject) => {\n      const upload = new Upload(buffer, {\n        endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload`,\n        chunkSize: 1_048_576,\n        metadata: {\n          id,\n          appName: data.appName,\n          subId: data.subId,\n          fileName: data.file.name,\n          fileExtension: data.file.type,\n        },\n        headers: { Authorization: `Bearer ${accessToken}` },\n        onError: reject,\n        onSuccess: () => resolve(),\n      });\n      upload.start();\n    });\n\n    return { id, appName: data.appName, subId: data.subId, fileName: data.file.name };\n  });\n"],"mappings":";;;;;;;;;AAUA,MAAaS,qBAAqBN,EAAEO,OAAO;CACzCC,SAASR,EAAES,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,GAAG;CAClCC,OAAOZ,EAAEa,KAAK;AAChB,CAAC;AAED,MAAaC,aAAad,EAAEO,OAAO;CACjCC,SAASR,EAAES,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,GAAG;CAClCI,IAAIf,EAAEa,KAAK;AACb,CAAC;AAED,MAAaG,uBAAuBX,eAAeY,OAAO,EACxDC,UAAUlB,EAAES,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,GAAG,EACrC,CAAC;AAED,MAAMQ,mBAAmBL;AAEzB,MAAMM,yBAAyBd;AAS/B,MAAagB,uBAAuBtB,EAAEO,OAAO;CAC3CC,SAASR,EAAES,OAAO,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,IAAI,GAAG;CAClCC,OAAOZ,EAAEa,KAAK;CACdU,MAAMvB,EAAEwB,WAAWC,IAAI;AACzB,CAAC;AAED,MAAaC,eAAe7B,eAAe,EAAE8B,QAAQ,MAAM,CAAC,CAAC,CAC1DC,UAAUtB,kBAAkB,CAAC,CAC7BuB,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,SAASJ,KAAKrB,KAAK;CAEtC,MAAM,EAAEqB,MAAMK,cAAc,MAAMJ,QAAQK,IAAIC,QAAyB;EACrEE,KAAK,YAAYP,YAAYQ,SAAS;EACtChB,QAAQ;CACV,CAAC;CACD,OAAOW;AACT,CAAC;AAEH,MAAaM,mBAAmB/C,eAAe,EAAE8B,QAAQ,MAAM,CAAC,CAAC,CAC9DC,UAAUd,UAAU,CAAC,CACrBe,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,MAAMJ,KAAKlB,EAAE;CAEhC,MAAM8B,WAAW,MAAMX,QAAQK,IAAIC,QAAqB;EACtDE,KAAK,iBAAiBP,YAAYQ,SAAS;EAC3ChB,QAAQ;EACRoB,cAAc;CAChB,CAAC;CAED,OAAO,IAAIC,SAASH,SAASZ,MAAM,EACjCgB,SAAS,EACP,gBAAgBJ,SAASI,QAAQ,gBACnC,EACF,CAAC;AACH,CAAC;AAEH,MAAaC,UAAUrD,eAAe,EAAE8B,QAAQ,MAAM,CAAC,CAAC,CACrDC,UAAUd,UAAU,CAAC,CACrBe,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,MAAMJ,KAAKlB,EAAE;CAEhC,MAAM8B,WAAW,MAAMX,QAAQK,IAAIC,QAAqB;EACtDE,KAAK,OAAOP,YAAYQ,SAAS;EACjChB,QAAQ;EACRoB,cAAc;CAChB,CAAC;CAED,OAAO,IAAIC,SAASH,SAASZ,MAAM,EACjCgB,SAAS,EACP,gBAAgBJ,SAASI,QAAQ,gBACnC,EACF,CAAC;AACH,CAAC;AAEH,MAAaE,eAAetD,eAAe,EAAE8B,QAAQ,MAAM,CAAC,CAAC,CAC1DC,UAAUd,UAAU,CAAC,CACrBe,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,MAAMJ,KAAKlB,EAAE;CAEhC,MAAM8B,WAAW,MAAMX,QAAQK,IAAIC,QAAqB;EACtDE,KAAK,gBAAgBP,YAAYQ,SAAS;EAC1ChB,QAAQ;EACRoB,cAAc;CAChB,CAAC;CAED,OAAO,IAAIC,SAASH,SAASZ,MAAM,EACjCgB,SAAS,EACP,gBAAgBJ,SAASI,QAAQ,gBACnC,EACF,CAAC;AACH,CAAC;AAEH,MAAaG,iBAAiBvD,eAAe,EAAE8B,QAAQ,OAAO,CAAC,CAAC,CAC7DC,UAAUZ,oBAAoB,CAAC,CAC/Ba,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,MAAMJ,KAAKlB,EAAE;CAEhC,MAAMmB,QAAQK,IAAIC,QAAQ;EAAEE,KAAK,YAAYP,YAAYQ,SAAS;EAAKhB,QAAQ;EAAOM;CAAK,CAAC;AAC9F,CAAC;AAEH,MAAaoB,aAAaxD,eAAe,EAAE8B,QAAQ,OAAO,CAAC,CAAC,CACzDC,UAAUT,gBAAgB,CAAC,CAC3BU,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,MAAMJ,KAAKlB,EAAE;CAEhC,MAAMmB,QAAQK,IAAIC,QAAQ;EAAEE,KAAK,OAAOP,YAAYQ,SAAS;EAAKhB,QAAQ;CAAS,CAAC;AACtF,CAAC;AAEH,MAAa2B,mBAAmBzD,eAAe,EAAE8B,QAAQ,OAAO,CAAC,CAAC,CAC/DC,UAAUR,sBAAsB,CAAC,CACjCS,WAAW,CAAC1B,cAAc;CAAE2B,SAAS;CAAiBC,UAAU;AAAO,CAAC,CAAC,CAAC,CAAC,CAC3EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMC,cAAc,IAAIC,gBAAgB;CACxCD,YAAYE,OAAO,WAAWJ,KAAKzB,OAAO;CAC1C2B,YAAYE,OAAO,SAASJ,KAAKrB,KAAK;CAEtC,MAAMsB,QAAQK,IAAIC,QAAQ;EAAEE,KAAK,OAAOP,YAAYQ,SAAS;EAAKhB,QAAQ;CAAS,CAAC;AACtF,CAAC;AAEH,MAAa4B,aAAa1D,eAAe,EAAE8B,QAAQ,OAAO,CAAC,CAAC,CACzDC,UAAUN,oBAAoB,CAAC,CAC/BU,QAAQ,OAAO,EAAEC,WAAsC;CACtD,MAAMwB,cAAc,MAAMvD,YAAY,MAAM;CAC5C,MAAMwD,SAASC,OAAOC,KAAK,MAAM3B,KAAKV,KAAKsC,YAAY,CAAC;CACxD,MAAM9C,KAAKhB,OAAO;CAElB,MAAM,IAAIyD,SAAeM,SAASC,WAAW;EAe3CC,IAdmBlE,OAAO4D,QAAQ;GAChCO,UAAU,GAAGhE,UAAUiE,cAAa;GACpCC,WAAW;GACXC,UAAU;IACRrD;IACAP,SAASyB,KAAKzB;IACdI,OAAOqB,KAAKrB;IACZM,UAAUe,KAAKV,KAAK8C;IACpBC,eAAerC,KAAKV,KAAKgD;GAC3B;GACAtB,SAAS,EAAEuB,eAAe,UAAUf,cAAc;GAClDgB,SAASV;GACTW,iBAAiBZ,QAAQ;EAC3B,CACAE,CAAM,CAACW,MAAM;CACf,CAAC;CAED,OAAO;EAAE5D;EAAIP,SAASyB,KAAKzB;EAASI,OAAOqB,KAAKrB;EAAOM,UAAUe,KAAKV,KAAK8C;CAAK;AAClF,CAAC"}