PageSourceSearch

https://elastos-wiki.netlify.app/assets/js/7659c0a9.ffc7aedf.js

js elastos-wiki.netlify.app collected 2026-10-03 10:42:02 UTC 9,703 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[2163],{3905:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>d});var r=t(7294);function i(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?s(Object(t),!0).forEach((function(n){i(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function o(e,n){if(null==e)return{};var t,r,i=function(e,n){if(null==e)return{};var t,r,i={},s=Object.keys(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||(i[t]=e[t]);return i}(e,n);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r<s.length;r++)t=s[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=r.createContext({}),c=function(e){var n=r.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},p=function(e){var n=c(e.components);return r.createElement(l.Provider,{value:n},e.children)},f="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return r.createElement(r.Fragment,{},n)}},m=r.forwardRef((function(e,n){var t=e.components,i=e.mdxType,s=e.originalType,l=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),f=c(t),m=i,d=f["".concat(l,".").concat(m)]||f[m]||u[m]||s;return t?r.createElement(d,a(a({ref:n},p),{},{components:t})):r.createElement(d,a({ref:n},p))}));function d(e,n){var t=arguments,i=n&&n.mdxType;if("string"==typeof e||i){var s=t.length,a=new Array(s);a[0]=m;var o={};for(var l in n)hasOwnProperty.call(n,l)&&(o[l]=n[l]);o.originalType=e,o[f]="string"==typeof e?e:i,a[1]=o;for(var c=2;c<s;c++)a[c]=t[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,t)}m.displayName="MDXCreateElement"},2624:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>f});var r=t(7462),i=t(3366),s=(t(7294),t(3905)),a=["components"],o={title:"Write"},l=void 0,c={unversionedId:"develop/hive/write",id:"develop/hive/write",title:"Write",description:"The following code is an example of how a dApp could store some files to a users Hive vault courtesy of ela.city.",source:"@site/../docs/3.develop/hive/write.md",sourceDirName:"3.develop/hive",slug:"/develop/hive/write",permalink:"/develop/hive/write",draft:!1,editUrl:"https://github.com/elastos/Elastos.Wiki/edit/master/website/../docs/3.develop/hive/write.md",tags:[],version:"current",lastUpdatedBy:"racollette",lastUpdatedAt:1678819255,formattedLastUpdatedAt:"Mar 14, 2023",frontMatter:{title:"Write"},sidebar:"developSidebar",previous:{title:"Connect",permalink:"/develop/hive/connect"},next:{title:"Mainchain-Sidechain Transfer",permalink:"/develop/crosschain"}},p={},f=[],u={toc:f},m="wrapper";function d(e){var n=e.components,t=(0,i.Z)(e,a);return(0,s.kt)(m,(0,r.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"The following code is an example of how a dApp could store some files to a users Hive vault courtesy of ",(0,s.kt)("a",{parentName:"p",href:"https://ela.city/"},"ela.city"),"."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-ts"},'import {\n  promiseAllStepN,\n  Waitable,\n  Waiter,\n  CollectionOf,\n  uid,\n} from "@elacity-js/lib";\nimport { FileInfo } from "@elastosfoundation/hive-js-sdk";\nimport { IUploadResult } from "../../nfts/types";\nimport { BrowserConnectivitySDKHiveAuthHelper } from "./hive.auth.helper";\nimport { resolverURLs } from "../connector";\nimport { APP_DID } from "../constants";\n\ninterface FileQuery {\n  offset?: number;\n  limit?: number;\n  reverse?: boolean;\n  path?: string;\n}\n\ninterface HiveFileResponse {\n  url?: string;\n  path?: string;\n  content?: Uint8Array;\n}\n\nexport class HiveFileHelper extends BrowserConnectivitySDKHiveAuthHelper {\n  /**\n   * Upload a file as NFT\n   *\n   * @param userDid\n   * @param formData\n   * @returns\n   */\n  static async uploadNFTByUser(\n    userDid: string,\n    formData: FormData\n  ): Promise<IUploadResult> {\n    const helper = new HiveFileHelper(resolverURLs[20], APP_DID);\n    const fileService = (\n      await helper.getVaultServices(userDid)\n    ).getFilesService();\n\n    const subFolder = uid();\n\n    const metadataJson: Record<string, any> = Array.from(formData).reduce(\n      (r: Record<string, any>, [key, value]: [string, any]) => ({\n        ...r,\n        ...(key !== "image" && {\n          [key]: value,\n        }),\n      }),\n      {}\n    );\n\n    const imageHash = `nfts/elacity/${subFolder}/media.raw`;\n    await fileService.upload(\n      imageHash,\n      Buffer.from(formData.get("image").toString().split(",").pop(), "base64")\n    );\n\n    const jsonHash = `nfts/elacity/${subFolder}/metadata.json`;\n    await fileService.upload(\n      jsonHash,\n      Buffer.from(\n        JSON.stringify({ ...metadataJson, image: imageHash, uid: subFolder })\n      )\n    );\n\n    return { data: { jsonHash, imageHash }, status: "success" };\n  }\n\n  static async uploadFileToUserVault(\n    userDid: string,\n    file: Blob,\n    path?: string\n  ): Promise<HiveFileResponse> {\n    console.log("uploadFileToUserVault", { userDid, file });\n    const helper = new HiveFileHelper(resolverURLs[20], APP_DID);\n    const fileService = (\n      await helper.getVaultServices(userDid)\n    ).getFilesService();\n\n    const fileName = uid();\n    const imagePath = `${path || "elacity/ai"}/${fileName}`;\n    const buffer = await file.arrayBuffer();\n    await fileService.upload(imagePath, Buffer.from(buffer));\n\n    return {\n      path: imagePath,\n      content: new Uint8Array(buffer),\n    };\n  }\n\n  static async uploadByURLToUserVault(\n    userDid: string,\n    url: string,\n    path?: string\n  ): Promise<HiveFileResponse> {\n    const response = await fetch(url, { method: "GET" });\n\n    return HiveFileHelper.uploadFileToUserVault(\n      userDid,\n      await response.blob(),\n      path\n    );\n  }\n\n  static async listAssets(\n    userDid: string,\n    path?: string\n  ): Promise<HiveFileResponse[]> {\n    const helper = new HiveFileHelper(resolverURLs[20], APP_DID);\n    const fileService = (\n      await helper.getVaultServices(userDid)\n    ).getFilesService();\n\n    const files: FileInfo[] = await fileService.list(path || "elacity/ai");\n\n    return promiseAllStepN(\n      20,\n      files.map((file) => async () => {\n        const content: Uint8Array = await fileService.download(file.getName());\n        return {\n          url: URL.createObjectURL(\n            new Blob([content.buffer], { type: "image/png" })\n          ),\n          path: file.getName(),\n          content,\n        };\n      })\n    );\n  }\n\n  static fetchAssets(\n    userDid: string,\n    { offset = 0, limit = Infinity, path, reverse }: FileQuery\n  ): Waitable<CollectionOf<HiveFileResponse>> {\n    return new Waitable(async (w: Waiter<CollectionOf<HiveFileResponse>>) => {\n      const helper = new HiveFileHelper(resolverURLs[20], APP_DID);\n      const fileService = (\n        await helper.getVaultServices(userDid)\n      ).getFilesService();\n\n      let files: FileInfo[] = await fileService.list(path || "elacity/ai");\n      w.emit("count", files.length);
1\n\n      const result = {\n        total: files.length,\n        offset: offset || 0,\n        limit: limit || Infinity,\n      };\n\n      if (files.length === 0) {\n        w.emit("result", {\n          ...result,\n          items: [],\n          isLast: true,\n        });\n\n        return {\n          ...result,\n          isLast: true,\n          items: [],\n        };\n      }\n\n      if (reverse) {\n        files = files.reverse();\n      }\n\n      const items = (await promiseAllStepN)<HiveFileResponse>(\n        10,\n        files.slice(offset, offset + limit).map((file, index) => async () => {\n          const content: Uint8Array = await fileService.download(\n            file.getName()\n          );\n          const response = {\n            url: URL.createObjectURL(\n              new Blob([content.buffer], { type: "image/png" })\n            ),\n            path: file.getName(),\n            content,\n          };\n\n          w.emit("file", { ...response, index });\n\n          return response;\n        })\n      );\n\n      w.emit("result", {\n        ...result,\n        items,\n        isLast: files.length === offset + items.length,\n      });\n\n      return {\n        ...result,\n        items,\n        isLast: files.length === offset + items.length,\n      };\n    });\n  }\n\n  static async removeFile(userDid: string, fullpath?: string): Promise<void> {\n    console.log("removeFile", { userDid, fullpath });\n    const helper = new HiveFileHelper(resolverURLs[20], APP_DID);\n    const fileService = (\n      await helper.getVaultServices(userDid)\n    ).getFilesService();\n\n    return fileService.delete(fullpath);\n  }\n}\n')),(0,s.kt)("admonition",{type:"info"},(0,s.kt)("p",{parentName:"admonition"},"A full Hive sample application built using Angular & Ionic is available at ",(0,s.kt)("a",{parentName:"p",href:"https://github.com/elastos/Elastos.Hive.JS.SDK/tree/master/samples/ionic"},"https://github.com/elastos/Elastos.Hive.JS.SDK/tree/master/samples/ionic"),".")))}d.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.