codatta-frontier-sdk 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -291,4 +291,4 @@ self.addEventListener("message", async (A) => {
291
291
  self.postMessage(E);
292
292
  }
293
293
  });
294
- `,J=typeof self<"u"&&self.Blob&&new Blob(["URL.revokeObjectURL(import.meta.url);",b],{type:"text/javascript;charset=utf-8"});function O(n){let A;try{if(A=J&&(self.URL||self.webkitURL).createObjectURL(J),!A)throw"";const e=new Worker(A,{type:"module",name:n==null?void 0:n.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(b),{type:"module",name:n==null?void 0:n.name})}}const W=8*1024*1024,_=4,G=50,x=4*1024*1024,H=3;class f extends Error{constructor(A="Upload aborted"){super(A),this.name="AbortError"}}function j(n,A){return new Promise((e,I)=>{if(A!=null&&A.aborted){I(new f);return}const t=setTimeout(()=>{A==null||A.removeEventListener("abort",c),e()},n),c=()=>{clearTimeout(t),I(new f)};A==null||A.addEventListener("abort",c,{once:!0})})}function D(n){if(n!=null&&n.aborted)throw new f}async function $(n,A){return(await n.post("/api/file/upload/init",{original_name:A.name,content_type:A.type})).data.data}async function AA(n,A,e){return(await n.post("/api/file/upload/list-parts",{object_key:A,upload_id:e})).data.data.parts}async function X(n,A,e,I){const t={};for(let c=0;c<I.length;c+=G){const g=I.slice(c,c+G),i=await n.post("/api/file/upload/sign-parts",{object_key:A,upload_id:e,part_numbers:g});Object.assign(t,i.data.data.urls)}return t}async function eA(n,A,e,I,t,c){return(await n.post("/api/file/upload/complete",{object_key:A,upload_id:e,parts:I.slice().sort((i,o)=>i.partNumber-o.partNumber).map(i=>({part_number:i.partNumber,etag:i.etag})),original_name:t,sha256:c})).data.data}async function nA(n,A,e){const I=await fetch(n,{method:"PUT",body:A,signal:e});if(!I.ok){const c=new Error(`PUT part failed: ${I.status}`);throw c.status=I.status,c}const t=I.headers.get("ETag")||I.headers.get("etag");if(!t)throw new Error("Missing ETag header in OSS response (check CORS ExposeHeader)");return t.replace(/^"|"$/g,"")}async function tA(n,A,e,I,t,c,g){let i=c,o=!1,r;for(let B=0;B<=H;B++){D(g);try{return await nA(i,t,g)}catch(E){if(E.name==="AbortError")throw E;if(r=E,E.status===403&&!o){i=(await X(n,A,e,[I]))[String(I)],o=!0;continue}if(B>=H)break;const z=1e3*Math.pow(2,B);await j(z,g)}}throw r instanceof Error?r:new Error("Part upload failed")}function IA(n,A){return new Promise((e,I)=>{let t;try{t=new O}catch(i){I(i);return}let c=!1;const g=()=>{c=!0,t.terminate(),I(new f)};A==null||A.addEventListener("abort",g,{once:!0}),t.addEventListener("message",i=>{const o=i.data;o.type==="done"?(A==null||A.removeEventListener("abort",g),t.terminate(),e(o.hex)):o.type==="error"&&(A==null||A.removeEventListener("abort",g),t.terminate(),I(new Error(o.error)))}),t.addEventListener("error",i=>{A==null||A.removeEventListener("abort",g),t.terminate(),I(new Error(i.message||"Hash worker error"))}),(async()=>{try{for(let i=0;i<n.size;i+=x){if(c)return;const o=Math.min(i+x,n.size),r=await n.slice(i,o).arrayBuffer();if(c)return;t.postMessage({type:"update",chunk:r},[r])}c||t.postMessage({type:"finish"})}catch(i){A==null||A.removeEventListener("abort",g),t.terminate(),I(i instanceof Error?i:new Error(String(i)))}})()})}async function iA(n,A,e={}){const{onProgress:I,onCheckpoint:t,signal:c}=e,g=e.partSize??W,i=e.parallel??_;D(c);let o,r,B=[],E=g;if(e.checkpoint){const a=e.checkpoint;if(a.fileSize!==A.size)throw new Error("Checkpoint fileSize does not match current file");o=a.objectKey,r=a.uploadId,E=a.partSize;const y=await AA(n,o,r),p=new Map(y.map(d=>[d.part_number,d.etag])),C=new Map(a.completedParts.map(d=>[d.partNumber,d.etag])),l=[];for(const[d,N]of p)C.get(d)===N&&l.push({partNumber:d,etag:N});B=l}else{const a=await $(n,A);o=a.object_key,r=a.upload_id}const R=Math.max(1,Math.ceil(A.size/E)),z=new Set(B.map(a=>a.partNumber)),s=[];for(let a=1;a<=R;a++)z.has(a)||s.push(a);const u=new V;let Q=B.reduce((a,y)=>{const p=(y.partNumber-1)*E,C=Math.min(p+E,A.size);return a+(C-p)},0);u.addSample(Q,Date.now());const F=()=>{if(!I)return;const a={percent:A.size===0?100:Q/A.size*100,loaded:Q,total:A.size,speed:u.getSpeed(),etaSec:u.getEtaSec(A.size,Q)};I(a)},T=()=>{if(!t)return;const a={objectKey:o,uploadId:r,partSize:E,completedParts:B.slice(),fileSize:A.size,originalName:A.name};t(a)};F();const Z=IA(A,c);if(s.length>0){const a=await X(n,o,r,s);let y=0;const p=()=>y>=s.length?null:s[y++],C=[];for(let l=0;l<Math.min(i,s.length);l++)C.push((async()=>{for(;;){D(c);const d=p();if(d===null)return;const N=(d-1)*E,w=Math.min(N+E,A.size),v=A.slice(N,w),S=a[String(d)];if(!S)throw new Error(`Missing signed URL for part ${d}`);const L=await tA(n,o,r,d,v,S,c);B.push({partNumber:d,etag:L}),Q+=w-N,u.addSample(Q,Date.now()),T(),F()}})());await Promise.all(C)}const k=await Z;D(c);const M=await eA(n,o,r,B,A.name,k);return{file_path:M.file_path,original_name:M.original_name,object_key:o,sha256:k}}async function cA(n,A,e){await n.post("/api/file/upload/abort",{object_key:A,upload_id:e})}class gA{constructor(){this.request=q.create({timeout:3e4}),this.setupRequestInterceptor(),this.setupResponseInterceptor()}setupRequestInterceptor(){this.request.interceptors.request.use(A=>{var i;const e=navigator.userAgent.toLowerCase(),I=e.includes("codatta")||((i=location.hash)==null?void 0:i.toLowerCase().includes("codatta")),t=U.get("auth")||localStorage.getItem("auth"),c=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(e);t&&(A.headers.token=t);const g=U.get("uid")||localStorage.getItem("uid");return g&&(A.headers.uid=g),A.headers.channel=I?"codatta-ios-app":"codatta-platform-website",A.headers.device=c?"mobile":"web",A})}setupResponseInterceptor(){this.request.interceptors.response.use(A=>{const e=A.data,I=Object.getOwnPropertyNames(e).includes("code"),t=Object.getOwnPropertyNames(e).includes("success");return I&&(e==null?void 0:e.code)!=="000000"?Promise.reject(new q.AxiosError(e==null?void 0:e.message,e==null?void 0:e.code,A.config,A.request,A)):t&&(e==null?void 0:e.success)!==!0?Promise.reject(new q.AxiosError(e==null?void 0:e.errorMessage,e==null?void 0:e.errorCode,A.config,A.request,A)):A},A=>{if(A.status===401){localStorage.removeItem("uid"),localStorage.removeItem("token"),localStorage.removeItem("auth");const e=new URL(window.location.href),I=e.pathname+e.search;window.location.href=`/account/signin?from=${encodeURIComponent(I)}`}return Promise.reject(A)})}async getTaskDetail(A){return(await this.request.post("/api/v2/frontier/task/detail",{task_id:A})).data}async submitTask(A,e,I){return(await this.request.post("/api/v2/frontier/task/submit",{task_id:A,data_submission:{uid:I,data:e,task_id:A}})).data}async getTaskList(A){return(await this.request.post("/api/v2/frontier/task/list",A)).data}async getSubmissionList(A){return(await this.request.post("/api/v2/submission/list",A)).data}async getFrontierInfo(A){return(await this.request.get(`/api/v2/frontier/info?frontier_id=${A}`)).data}async getSubmissionDetail(A){return(await this.request.get("/api/v2/submission/user/detail",{params:{submission_id:A}})).data}async uploadFile(A,e){const I=new FormData;return I.append("file",A),(await this.request.post("/api/file/upload",I,{params:{content_type:A.type},onUploadProgress:e})).data}async uploadLargeFile(A,e){return iA(this.request,A,e)}async abortUpload(A,e){return cA(this.request,A,e)}async getSpecTaskInfo(A){return(await this.request.get(`/api/v2/spec/task/info?task_id=${A}`)).data}async getSpecTaskInfos(A){return(await this.request.get(`/api/v2/spec/task/infos?task_ids=${A}`)).data}async submitSpecTask(A,e,I){return(await this.request.post("/api/v2/spec/task/submit",{task_id:A,status:I??2,content:e})).data}async getVerificationCode({account_type:A,email:e,opt:I}){return(await this.request.post("/api/v2/user/get_code",{account_type:A??"email",email:e??"",opt:I??"verify"})).data.data}async checkEmail({email:A,code:e,task_id:I}){return(await this.request.post("/api/v2/frontier/email/check",{email:A,code:e,task_id:I})).data.data}}var K=(n=>(n.TWITTER="x",n.TELEGRAM="telegram",n.DISCORD="discord",n.WEBSITE="website",n.DOC="doc",n))(K||{});exports.FrontierSDK=gA;exports.MediaName=K;
294
+ `,J=typeof self<"u"&&self.Blob&&new Blob(["URL.revokeObjectURL(import.meta.url);",b],{type:"text/javascript;charset=utf-8"});function O(n){let A;try{if(A=J&&(self.URL||self.webkitURL).createObjectURL(J),!A)throw"";const e=new Worker(A,{type:"module",name:n==null?void 0:n.name});return e.addEventListener("error",()=>{(self.URL||self.webkitURL).revokeObjectURL(A)}),e}catch{return new Worker("data:text/javascript;charset=utf-8,"+encodeURIComponent(b),{type:"module",name:n==null?void 0:n.name})}}const W=8*1024*1024,_=4,G=50,x=4*1024*1024,H=3;class f extends Error{constructor(A="Upload aborted"){super(A),this.name="AbortError"}}function j(n,A){return new Promise((e,I)=>{if(A!=null&&A.aborted){I(new f);return}const t=setTimeout(()=>{A==null||A.removeEventListener("abort",c),e()},n),c=()=>{clearTimeout(t),I(new f)};A==null||A.addEventListener("abort",c,{once:!0})})}function D(n){if(n!=null&&n.aborted)throw new f}async function $(n,A){return(await n.post("/api/v2/file/upload/init",{original_name:A.name,content_type:A.type})).data.data}async function AA(n,A,e){return(await n.post("/api/v2/file/upload/list-parts",{object_key:A,upload_id:e})).data.data.parts}async function X(n,A,e,I){const t={};for(let c=0;c<I.length;c+=G){const g=I.slice(c,c+G),i=await n.post("/api/v2/file/upload/sign-parts",{object_key:A,upload_id:e,part_numbers:g});Object.assign(t,i.data.data.urls)}return t}async function eA(n,A,e,I,t,c){return(await n.post("/api/v2/file/upload/complete",{object_key:A,upload_id:e,parts:I.slice().sort((i,o)=>i.partNumber-o.partNumber).map(i=>({part_number:i.partNumber,etag:i.etag})),original_name:t,sha256:c})).data.data}async function nA(n,A,e){const I=await fetch(n,{method:"PUT",body:A,signal:e});if(!I.ok){const c=new Error(`PUT part failed: ${I.status}`);throw c.status=I.status,c}const t=I.headers.get("ETag")||I.headers.get("etag");if(!t)throw new Error("Missing ETag header in OSS response (check CORS ExposeHeader)");return t.replace(/^"|"$/g,"")}async function tA(n,A,e,I,t,c,g){let i=c,o=!1,r;for(let B=0;B<=H;B++){D(g);try{return await nA(i,t,g)}catch(E){if(E.name==="AbortError")throw E;if(r=E,E.status===403&&!o){i=(await X(n,A,e,[I]))[String(I)],o=!0;continue}if(B>=H)break;const z=1e3*Math.pow(2,B);await j(z,g)}}throw r instanceof Error?r:new Error("Part upload failed")}function IA(n,A){return new Promise((e,I)=>{let t;try{t=new O}catch(i){I(i);return}let c=!1;const g=()=>{c=!0,t.terminate(),I(new f)};A==null||A.addEventListener("abort",g,{once:!0}),t.addEventListener("message",i=>{const o=i.data;o.type==="done"?(A==null||A.removeEventListener("abort",g),t.terminate(),e(o.hex)):o.type==="error"&&(A==null||A.removeEventListener("abort",g),t.terminate(),I(new Error(o.error)))}),t.addEventListener("error",i=>{A==null||A.removeEventListener("abort",g),t.terminate(),I(new Error(i.message||"Hash worker error"))}),(async()=>{try{for(let i=0;i<n.size;i+=x){if(c)return;const o=Math.min(i+x,n.size),r=await n.slice(i,o).arrayBuffer();if(c)return;t.postMessage({type:"update",chunk:r},[r])}c||t.postMessage({type:"finish"})}catch(i){A==null||A.removeEventListener("abort",g),t.terminate(),I(i instanceof Error?i:new Error(String(i)))}})()})}async function iA(n,A,e={}){const{onProgress:I,onCheckpoint:t,signal:c}=e,g=e.partSize??W,i=e.parallel??_;D(c);let o,r,B=[],E=g;if(e.checkpoint){const a=e.checkpoint;if(a.fileSize!==A.size)throw new Error("Checkpoint fileSize does not match current file");o=a.objectKey,r=a.uploadId,E=a.partSize;const y=await AA(n,o,r),p=new Map(y.map(d=>[d.part_number,d.etag])),C=new Map(a.completedParts.map(d=>[d.partNumber,d.etag])),l=[];for(const[d,N]of p)C.get(d)===N&&l.push({partNumber:d,etag:N});B=l}else{const a=await $(n,A);o=a.object_key,r=a.upload_id}const R=Math.max(1,Math.ceil(A.size/E)),z=new Set(B.map(a=>a.partNumber)),s=[];for(let a=1;a<=R;a++)z.has(a)||s.push(a);const u=new V;let Q=B.reduce((a,y)=>{const p=(y.partNumber-1)*E,C=Math.min(p+E,A.size);return a+(C-p)},0);u.addSample(Q,Date.now());const F=()=>{if(!I)return;const a={percent:A.size===0?100:Q/A.size*100,loaded:Q,total:A.size,speed:u.getSpeed(),etaSec:u.getEtaSec(A.size,Q)};I(a)},v=()=>{if(!t)return;const a={objectKey:o,uploadId:r,partSize:E,completedParts:B.slice(),fileSize:A.size,originalName:A.name};t(a)};F();const T=IA(A,c);if(s.length>0){const a=await X(n,o,r,s);let y=0;const p=()=>y>=s.length?null:s[y++],C=[];for(let l=0;l<Math.min(i,s.length);l++)C.push((async()=>{for(;;){D(c);const d=p();if(d===null)return;const N=(d-1)*E,w=Math.min(N+E,A.size),Z=A.slice(N,w),S=a[String(d)];if(!S)throw new Error(`Missing signed URL for part ${d}`);const L=await tA(n,o,r,d,Z,S,c);B.push({partNumber:d,etag:L}),Q+=w-N,u.addSample(Q,Date.now()),v(),F()}})());await Promise.all(C)}const k=await T;D(c);const M=await eA(n,o,r,B,A.name,k);return{file_path:M.file_path,original_name:M.original_name,object_key:o,sha256:k}}async function cA(n,A,e){await n.post("/api/v2/file/upload/abort",{object_key:A,upload_id:e})}class gA{constructor(){this.request=q.create({timeout:3e4}),this.setupRequestInterceptor(),this.setupResponseInterceptor()}setupRequestInterceptor(){this.request.interceptors.request.use(A=>{var i;const e=navigator.userAgent.toLowerCase(),I=e.includes("codatta")||((i=location.hash)==null?void 0:i.toLowerCase().includes("codatta")),t=U.get("auth")||localStorage.getItem("auth"),c=/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(e);t&&(A.headers.token=t);const g=U.get("uid")||localStorage.getItem("uid");return g&&(A.headers.uid=g),A.headers.channel=I?"codatta-ios-app":"codatta-platform-website",A.headers.device=c?"mobile":"web",A})}setupResponseInterceptor(){this.request.interceptors.response.use(A=>{const e=A.data,I=Object.getOwnPropertyNames(e).includes("code"),t=Object.getOwnPropertyNames(e).includes("success");return I&&(e==null?void 0:e.code)!=="000000"?Promise.reject(new q.AxiosError(e==null?void 0:e.message,e==null?void 0:e.code,A.config,A.request,A)):t&&(e==null?void 0:e.success)!==!0?Promise.reject(new q.AxiosError(e==null?void 0:e.errorMessage,e==null?void 0:e.errorCode,A.config,A.request,A)):A},A=>{if(A.status===401){localStorage.removeItem("uid"),localStorage.removeItem("token"),localStorage.removeItem("auth");const e=new URL(window.location.href),I=e.pathname+e.search;window.location.href=`/account/signin?from=${encodeURIComponent(I)}`}return Promise.reject(A)})}async getTaskDetail(A){return(await this.request.post("/api/v2/frontier/task/detail",{task_id:A})).data}async submitTask(A,e,I){return(await this.request.post("/api/v2/frontier/task/submit",{task_id:A,data_submission:{uid:I,data:e,task_id:A}})).data}async getTaskList(A){return(await this.request.post("/api/v2/frontier/task/list",A)).data}async getSubmissionList(A){return(await this.request.post("/api/v2/submission/list",A)).data}async getFrontierInfo(A){return(await this.request.get(`/api/v2/frontier/info?frontier_id=${A}`)).data}async getSubmissionDetail(A){return(await this.request.get("/api/v2/submission/user/detail",{params:{submission_id:A}})).data}async uploadFile(A,e){const I=new FormData;return I.append("file",A),(await this.request.post("/api/file/upload",I,{params:{content_type:A.type},onUploadProgress:e})).data}async uploadLargeFile(A,e){return iA(this.request,A,e)}async abortUpload(A,e){return cA(this.request,A,e)}async getSpecTaskInfo(A){return(await this.request.get(`/api/v2/spec/task/info?task_id=${A}`)).data}async getSpecTaskInfos(A){return(await this.request.get(`/api/v2/spec/task/infos?task_ids=${A}`)).data}async submitSpecTask(A,e,I){return(await this.request.post("/api/v2/spec/task/submit",{task_id:A,status:I??2,content:e})).data}async getVerificationCode({account_type:A,email:e,opt:I}){return(await this.request.post("/api/v2/user/get_code",{account_type:A??"email",email:e??"",opt:I??"verify"})).data.data}async checkEmail({email:A,code:e,task_id:I}){return(await this.request.post("/api/v2/frontier/email/check",{email:A,code:e,task_id:I})).data.data}}var K=(n=>(n.TWITTER="x",n.TELEGRAM="telegram",n.DISCORD="discord",n.WEBSITE="website",n.DOC="doc",n))(K||{});exports.FrontierSDK=gA;exports.MediaName=K;
package/dist/index.mjs CHANGED
@@ -434,13 +434,13 @@ function D(e) {
434
434
  if (e != null && e.aborted) throw new f();
435
435
  }
436
436
  async function $(e, A) {
437
- return (await e.post("/api/file/upload/init", {
437
+ return (await e.post("/api/v2/file/upload/init", {
438
438
  original_name: A.name,
439
439
  content_type: A.type
440
440
  })).data.data;
441
441
  }
442
442
  async function AA(e, A, n) {
443
- return (await e.post("/api/file/upload/list-parts", {
443
+ return (await e.post("/api/v2/file/upload/list-parts", {
444
444
  object_key: A,
445
445
  upload_id: n
446
446
  })).data.data.parts;
@@ -448,7 +448,7 @@ async function AA(e, A, n) {
448
448
  async function X(e, A, n, I) {
449
449
  const t = {};
450
450
  for (let c = 0; c < I.length; c += G) {
451
- const g = I.slice(c, c + G), i = await e.post("/api/file/upload/sign-parts", {
451
+ const g = I.slice(c, c + G), i = await e.post("/api/v2/file/upload/sign-parts", {
452
452
  object_key: A,
453
453
  upload_id: n,
454
454
  part_numbers: g
@@ -458,7 +458,7 @@ async function X(e, A, n, I) {
458
458
  return t;
459
459
  }
460
460
  async function nA(e, A, n, I, t, c) {
461
- return (await e.post("/api/file/upload/complete", {
461
+ return (await e.post("/api/v2/file/upload/complete", {
462
462
  object_key: A,
463
463
  upload_id: n,
464
464
  parts: I.slice().sort((i, o) => i.partNumber - o.partNumber).map((i) => ({ part_number: i.partNumber, etag: i.etag })),
@@ -577,7 +577,7 @@ async function iA(e, A, n = {}) {
577
577
  t(a);
578
578
  };
579
579
  R();
580
- const Z = IA(A, c);
580
+ const v = IA(A, c);
581
581
  if (s.length > 0) {
582
582
  const a = await X(e, o, r, s);
583
583
  let y = 0;
@@ -589,16 +589,16 @@ async function iA(e, A, n = {}) {
589
589
  D(c);
590
590
  const E = p();
591
591
  if (E === null) return;
592
- const N = (E - 1) * d, M = Math.min(N + d, A.size), T = A.slice(N, M), w = a[String(E)];
592
+ const N = (E - 1) * d, M = Math.min(N + d, A.size), Z = A.slice(N, M), w = a[String(E)];
593
593
  if (!w) throw new Error(`Missing signed URL for part ${E}`);
594
- const v = await tA(e, o, r, E, T, w, c);
595
- B.push({ partNumber: E, etag: v }), Q += M - N, u.addSample(Q, Date.now()), K(), R();
594
+ const T = await tA(e, o, r, E, Z, w, c);
595
+ B.push({ partNumber: E, etag: T }), Q += M - N, u.addSample(Q, Date.now()), K(), R();
596
596
  }
597
597
  })()
598
598
  );
599
599
  await Promise.all(C);
600
600
  }
601
- const F = await Z;
601
+ const F = await v;
602
602
  D(c);
603
603
  const k = await nA(
604
604
  e,
@@ -616,7 +616,7 @@ async function iA(e, A, n = {}) {
616
616
  };
617
617
  }
618
618
  async function cA(e, A, n) {
619
- await e.post("/api/file/upload/abort", {
619
+ await e.post("/api/v2/file/upload/abort", {
620
620
  object_key: A,
621
621
  upload_id: n
622
622
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codatta-frontier-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Codatta Frontier SDK - API client for Codatta Frontier platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",