@shelby-protocol/react 0.0.3 → 0.0.5

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/components/ShelbyClientProvider.d.ts +8 -0
  3. package/dist/components/ShelbyClientProvider.d.ts.map +1 -0
  4. package/dist/components/index.d.ts +2 -0
  5. package/dist/components/index.d.ts.map +1 -0
  6. package/dist/index.cjs +1 -1
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/index.js.map +1 -1
  12. package/dist/mutations/index.d.ts +2 -0
  13. package/dist/mutations/index.d.ts.map +1 -1
  14. package/dist/mutations/useCommitBlobs.d.ts +1 -1
  15. package/dist/mutations/useCommitBlobs.d.ts.map +1 -1
  16. package/dist/mutations/useDeleteBlob.d.ts +60 -0
  17. package/dist/mutations/useDeleteBlob.d.ts.map +1 -0
  18. package/dist/mutations/useDeleteBlobs.d.ts +77 -0
  19. package/dist/mutations/useDeleteBlobs.d.ts.map +1 -0
  20. package/dist/mutations/useEncodeBlobs.d.ts +11 -8
  21. package/dist/mutations/useEncodeBlobs.d.ts.map +1 -1
  22. package/dist/mutations/useRegisterCommitments.d.ts +1 -1
  23. package/dist/mutations/useRegisterCommitments.d.ts.map +1 -1
  24. package/dist/mutations/useUploadBlobs.d.ts +1 -1
  25. package/dist/mutations/useUploadBlobs.d.ts.map +1 -1
  26. package/dist/queries/useAccountBlobs.d.ts +1 -1
  27. package/dist/queries/useAccountBlobs.d.ts.map +1 -1
  28. package/dist/queries/useBlobMetadata.d.ts +1 -1
  29. package/dist/queries/useBlobMetadata.d.ts.map +1 -1
  30. package/dist/types/index.d.ts +2 -0
  31. package/dist/types/index.d.ts.map +1 -0
  32. package/dist/types/mutations.d.ts +4 -3
  33. package/dist/types/mutations.d.ts.map +1 -1
  34. package/dist/types/queries.d.ts +1 -1
  35. package/dist/types/queries.d.ts.map +1 -1
  36. package/dist/types/signers.d.ts +21 -1
  37. package/dist/types/signers.d.ts.map +1 -1
  38. package/package.json +8 -4
  39. package/src/components/ShelbyClientProvider.tsx +26 -0
  40. package/src/components/index.ts +1 -0
  41. package/src/index.ts +2 -0
  42. package/src/mutations/index.ts +2 -0
  43. package/src/mutations/useCommitBlobs.tsx +3 -4
  44. package/src/mutations/useDeleteBlob.tsx +93 -0
  45. package/src/mutations/useDeleteBlobs.tsx +139 -0
  46. package/src/mutations/useEncodeBlobs.tsx +11 -11
  47. package/src/mutations/useRegisterCommitments.tsx +17 -3
  48. package/src/mutations/useUploadBlobs.tsx +25 -9
  49. package/src/queries/useAccountBlobs.tsx +3 -1
  50. package/src/queries/useBlobMetadata.tsx +3 -1
  51. package/src/types/index.ts +1 -0
  52. package/src/types/mutations.ts +13 -4
  53. package/src/types/queries.ts +1 -1
  54. package/src/types/signers.ts +19 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @shelby-protocol/react
2
2
 
3
+ ## 0.0.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 911887b: Remove unused client in useEncodeBlobs
8
+ - 2275853: Add useDeleteBlob
9
+ - 911887b: Add type compatibility to `WalletAdapterSigner['account']` to support the direct usage of the `useWallet` return type from `@aptos-labs/wallet-adapter-react`
10
+
11
+ ## 0.0.4
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [8202274]
16
+ - Updated dependencies [313eb10]
17
+ - @shelby-protocol/sdk@0.0.9
18
+
3
19
  ## 0.0.3
4
20
 
5
21
  ### Patch Changes
@@ -0,0 +1,8 @@
1
+ import type { ShelbyClient } from "@shelby-protocol/sdk/browser";
2
+ import { type PropsWithChildren } from "react";
3
+ export declare const ShelbyClientContext: import("react").Context<ShelbyClient | null>;
4
+ export declare function ShelbyClientProvider({ children, client, }: PropsWithChildren & {
5
+ client: ShelbyClient;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function useShelbyClient(client?: ShelbyClient | null): ShelbyClient;
8
+ //# sourceMappingURL=ShelbyClientProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShelbyClientProvider.d.ts","sourceRoot":"","sources":["../../src/components/ShelbyClientProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAiB,KAAK,iBAAiB,EAAc,MAAM,OAAO,CAAC;AAE1E,eAAO,MAAM,mBAAmB,8CAA2C,CAAC;AAE5E,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,GACP,EAAE,iBAAiB,GAAG;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,2CAM9C;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,gBAS3D"}
@@ -0,0 +1,2 @@
1
+ export * from "./ShelbyClientProvider";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _reactquery = require('@tanstack/react-query');var _plimit = require('p-limit'); var _plimit2 = _interopRequireDefault(_plimit);function I({client:t,...s}){return _reactquery.useMutation.call(void 0, {mutationFn:async({account:o,blobs:e,maxConcurrentUploads:n=3})=>{let r=_plimit2.default.call(void 0, n),m=e.map(i=>r(()=>t.rpc.putBlob({account:o,blobName:i.blobName,blobData:i.blobData})));await Promise.all(m)},...s})}var _browser = require('@shelby-protocol/sdk/browser');function Z({client:t,...s}){return _reactquery.useMutation.call(void 0, {mutationFn:async({blobs:o,provider:e,onChunk:n})=>{let r=await _asyncNullishCoalesce(e, async () => (await _browser.createDefaultErasureCodingProvider.call(void 0, ))),m=new Array(o.length);return await Promise.all(o.map(async({blobData:i},p)=>{let a=Math.ceil(i.length/r.config.chunkSizeBytes),c=await _browser.generateCommitments.call(void 0, r,i,(l,d,y)=>_optionalChain([n, 'optionalCall', _2 => _2({blobIndex:p,chunksetIndex:l,chunkIndex:d,chunkData:y,progress:l/a})]));m[p]=c})),m},...s})}var _tssdk = require('@aptos-labs/ts-sdk');function $({client:t,...s}){return _reactquery.useMutation.call(void 0, {mutationFn:async({commitments:o,expirationMicros:e,options:n,signer:r})=>{if(!("account"in r)){let a=r,{transaction:c}=await t.coordination.batchRegisterBlobs({account:a,expirationMicros:e,options:n,blobs:o.map(l=>({blobName:l.blobName,blobSize:l.commitment.raw_data_size,blobMerkleRoot:l.commitment.blob_merkle_root}))});return c}let{account:m,signAndSubmitTransaction:i}=r;return await i({data:_browser.ShelbyBlobClient.createBatchRegisterBlobsPayload({account:_tssdk.AccountAddress.from(m),expirationMicros:e,blobs:o.map(a=>({blobName:a.blobName,blobSize:a.commitment.raw_data_size,blobMerkleRoot:a.commitment.blob_merkle_root,numChunksets:_browser.expectedTotalChunksets.call(void 0, a.commitment.raw_data_size,_nullishCoalesce(_optionalChain([n, 'optionalAccess', _3 => _3.chunksetSizeBytes]), () => (_browser.DEFAULT_CHUNKSET_SIZE_BYTES)))}))}),options:_optionalChain([n, 'optionalAccess', _4 => _4.build, 'optionalAccess', _5 => _5.options])})},...s})}function it({client:t,...s}){return _reactquery.useMutation.call(void 0, {mutationFn:async({blobs:o,expirationMicros:e,options:n,signer:r,maxConcurrentUploads:m=3})=>{if("account"in r){let{account:i,signAndSubmitTransaction:p}=r,a=_nullishCoalesce(_optionalChain([n, 'optionalAccess', _6 => _6.chunksetSizeBytes]), () => (_browser.DEFAULT_CHUNKSET_SIZE_BYTES)),c=await t.coordination.getBlobs({where:{blob_name:{_in:o.map(b=>_browser.createBlobKey.call(void 0, {account:i,blobName:b.blobName}))}}}),l=o.filter(b=>!c.some(B=>B.name===_browser.createBlobKey.call(void 0, {account:i,blobName:b.blobName})));if(l.length>0){let b=await _browser.createDefaultErasureCodingProvider.call(void 0, ),B=await Promise.all(l.map(async u=>_browser.generateCommitments.call(void 0, b,u.blobData))),g=await p({data:_browser.ShelbyBlobClient.createBatchRegisterBlobsPayload({account:_tssdk.AccountAddress.from(i),expirationMicros:e,blobs:l.map((u,f)=>({blobName:u.blobName,blobSize:u.blobData.length,blobMerkleRoot:B[f].blob_merkle_root,numChunksets:_browser.expectedTotalChunksets.call(void 0, u.blobData.length,a)}))}),options:_optionalChain([n, 'optionalAccess', _7 => _7.build, 'optionalAccess', _8 => _8.options])});await t.coordination.aptos.waitForTransaction({transactionHash:g.hash})}let d=_plimit2.default.call(void 0, m),y=o.map(b=>d(()=>t.rpc.putBlob({account:i,blobName:b.blobName,blobData:b.blobData})));await Promise.all(y)}else{let i=r;await t.batchUpload({blobs:o.map(({blobData:p,blobName:a})=>({blobData:p,blobName:a})),expirationMicros:e,signer:i,options:n})}},...s})}var V=t=>["account-blobs",t.network,t.account.toString(),_optionalChain([t, 'access', _9 => _9.pagination, 'optionalAccess', _10 => _10.limit]),_optionalChain([t, 'access', _11 => _11.pagination, 'optionalAccess', _12 => _12.offset]),t.orderBy,t.where];function ut({account:t,pagination:s,orderBy:o,where:e,client:n,...r}){return _reactquery.useQuery.call(void 0, {queryKey:V({network:n.config.network,account:t,pagination:s,orderBy:o,where:e}),queryFn:async()=>await n.coordination.getAccountBlobs({account:t,pagination:s,orderBy:o,where:e}),...r})}var K=t=>["blob-metadata",t.network,t.account.toString(),t.name];function Bt({account:t,name:s,client:o,...e}){return _reactquery.useQuery.call(void 0, {queryKey:K({network:o.config.network,account:t,name:s}),queryFn:async()=>await _asyncNullishCoalesce(await o.coordination.getBlobMetadata({account:t,name:s}), async () => (null)),...e})}exports.getUseAccountBlobsQueryKey = V; exports.getUseBlobMetadataQueryKey = K; exports.useAccountBlobs = ut; exports.useBlobMetadata = Bt; exports.useCommitBlobs = I; exports.useEncodeBlobs = Z; exports.useRegisterCommitments = $; exports.useUploadBlobs = it;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } async function _asyncNullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return await rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _react = require('react');var _jsxruntime = require('react/jsx-runtime');var C=_react.createContext.call(void 0, null);function tt({children:t,client:r}){return _jsxruntime.jsx.call(void 0, C.Provider,{value:r,children:t})}function b(t){let r=_react.useContext.call(void 0, C),o=_nullishCoalesce(t, () => (r));if(!o)throw new Error("`useShelbyClient` requires a client or `ShelbyClientProvider`");return o}var _reactquery = require('@tanstack/react-query');var _plimit = require('p-limit'); var _plimit2 = _interopRequireDefault(_plimit);function lt({client:t,...r}){let o=b(t);return _reactquery.useMutation.call(void 0, {mutationFn:async({account:e,blobs:n,maxConcurrentUploads:i=3})=>{let s=_plimit2.default.call(void 0, i),l=n.map(a=>s(()=>o.rpc.putBlob({account:e,blobName:a.blobName,blobData:a.blobData})));await Promise.all(l)},...r})}var _browser = require('@shelby-protocol/sdk/browser');function ut({client:t,...r}){let o=b(t);return _reactquery.useMutation.call(void 0, {mutationFn:async({blobName:e,signer:n,options:i})=>{if(!("signAndSubmitTransaction"in n)){let a=n,{transaction:m}=await o.coordination.deleteBlob({account:a,blobName:e,options:i});return m}let{signAndSubmitTransaction:s}=n;return await s({data:_browser.ShelbyBlobClient.createDeleteBlobPayload({blobName:e}),options:i})},...r})}function Ct({client:t,...r}){let o=b(t);return _reactquery.useMutation.call(void 0, {mutationFn:async({blobNames:e,signer:n,options:i})=>{if(e.length===0)throw new Error("blobNames must contain at least one blob name");let s=e.length===1;if(!("signAndSubmitTransaction"in n)){let m=n;if(s){let{transaction:c}=await o.coordination.deleteBlob({account:m,blobName:e[0],options:i});return c}let{transaction:p}=await o.coordination.deleteMultipleBlobs({account:m,blobNames:e,options:i});return p}let{signAndSubmitTransaction:l}=n;return s?await l({data:_browser.ShelbyBlobClient.createDeleteBlobPayload({blobName:e[0]}),options:i}):await l({data:_browser.ShelbyBlobClient.createDeleteMultipleBlobsPayload({blobNames:e}),options:i})},...r})}function St({...t}={}){return _reactquery.useMutation.call(void 0, {mutationFn:async({blobs:r,provider:o,onChunk:e})=>{let n=await _asyncNullishCoalesce(o, async () => (await _browser.createDefaultErasureCodingProvider.call(void 0, ))),i=new Array(r.length);return await Promise.all(r.map(async({blobData:s},l)=>{let a=Math.ceil(s.length/n.config.chunkSizeBytes),m=await _browser.generateCommitments.call(void 0, n,s,(p,c,d)=>_optionalChain([e, 'optionalCall', _2 => _2({blobIndex:l,chunksetIndex:p,chunkIndex:c,chunkData:d,progress:p/a})]));i[l]=m})),i},...t})}var _tssdk = require('@aptos-labs/ts-sdk');function Ot({client:t,...r}){let o=b(t);return _reactquery.useMutation.call(void 0, {mutationFn:async({commitments:e,expirationMicros:n,options:i,signer:s})=>{if(!("signAndSubmitTransaction"in s)){let c=s,{transaction:d}=await o.coordination.batchRegisterBlobs({account:c,expirationMicros:n,options:i,blobs:e.map(y=>({blobName:y.blobName,blobSize:y.commitment.raw_data_size,blobMerkleRoot:y.commitment.blob_merkle_root}))});return d}let{account:l,signAndSubmitTransaction:a}=s;if(!l)throw new Error("'account' is required if using a wallet adapter signer with 'useRegisterCommitments'");let m=typeof l=="object"&&"address"in l?l.address:l;return await a({data:_browser.ShelbyBlobClient.createBatchRegisterBlobsPayload({account:_tssdk.AccountAddress.from(m),expirationMicros:n,blobs:e.map(c=>({blobName:c.blobName,blobSize:c.commitment.raw_data_size,blobMerkleRoot:c.commitment.blob_merkle_root,numChunksets:_browser.expectedTotalChunksets.call(void 0, c.commitment.raw_data_size,_nullishCoalesce(_optionalChain([i, 'optionalAccess', _3 => _3.chunksetSizeBytes]), () => (_browser.DEFAULT_CHUNKSET_SIZE_BYTES)))}))}),options:_optionalChain([i, 'optionalAccess', _4 => _4.build, 'optionalAccess', _5 => _5.options])})},...r})}function _t({client:t,...r}){let o=b(t);return _reactquery.useMutation.call(void 0, {mutationFn:async({blobs:e,expirationMicros:n,options:i,signer:s,maxConcurrentUploads:l=3})=>{if("signAndSubmitTransaction"in s){let{account:a,signAndSubmitTransaction:m}=s;if(!a)throw new Error("'account' is required if using a wallet adapter signer with 'useUploadBlobs'");let p=typeof a=="object"&&"address"in a?a.address:a,c=_nullishCoalesce(_optionalChain([i, 'optionalAccess', _6 => _6.chunksetSizeBytes]), () => (_browser.DEFAULT_CHUNKSET_SIZE_BYTES)),d=await o.coordination.getBlobs({where:{blob_name:{_in:e.map(u=>_browser.createBlobKey.call(void 0, {account:p,blobName:u.blobName}))}}}),y=e.filter(u=>!d.some(f=>f.name===_browser.createBlobKey.call(void 0, {account:p,blobName:u.blobName})));if(y.length>0){let u=await _browser.createDefaultErasureCodingProvider.call(void 0, ),f=await Promise.all(y.map(async h=>_browser.generateCommitments.call(void 0, u,h.blobData))),w=await m({data:_browser.ShelbyBlobClient.createBatchRegisterBlobsPayload({account:_tssdk.AccountAddress.from(p),expirationMicros:n,blobs:y.map((h,x)=>({blobName:h.blobName,blobSize:h.blobData.length,blobMerkleRoot:f[x].blob_merkle_root,numChunksets:_browser.expectedTotalChunksets.call(void 0, h.blobData.length,c)}))}),options:_optionalChain([i, 'optionalAccess', _7 => _7.build, 'optionalAccess', _8 => _8.options])});await o.coordination.aptos.waitForTransaction({transactionHash:w.hash})}let U=_plimit2.default.call(void 0, l),S=e.map(u=>U(()=>o.rpc.putBlob({account:p,blobName:u.blobName,blobData:u.blobData})));await Promise.all(S)}else{let a=s;await o.batchUpload({blobs:e.map(({blobData:m,blobName:p})=>({blobData:m,blobName:p})),expirationMicros:n,signer:a,options:i})}},...r})}var j=t=>["account-blobs",t.network,t.account.toString(),_optionalChain([t, 'access', _9 => _9.pagination, 'optionalAccess', _10 => _10.limit]),_optionalChain([t, 'access', _11 => _11.pagination, 'optionalAccess', _12 => _12.offset]),t.orderBy,t.where];function Ft({account:t,pagination:r,orderBy:o,where:e,client:n,...i}){let s=b(n);return _reactquery.useQuery.call(void 0, {queryKey:j({network:s.config.network,account:t,pagination:r,orderBy:o,where:e}),queryFn:async()=>await s.coordination.getAccountBlobs({account:t,pagination:r,orderBy:o,where:e}),...i})}var X=t=>["blob-metadata",t.network,t.account.toString(),t.name];function jt({account:t,name:r,client:o,...e}){let n=b(o);return _reactquery.useQuery.call(void 0, {queryKey:X({network:n.config.network,account:t,name:r}),queryFn:async()=>await _asyncNullishCoalesce(await n.coordination.getBlobMetadata({account:t,name:r}), async () => (null)),...e})}exports.ShelbyClientContext = C; exports.ShelbyClientProvider = tt; exports.getUseAccountBlobsQueryKey = j; exports.getUseBlobMetadataQueryKey = X; exports.useAccountBlobs = Ft; exports.useBlobMetadata = jt; exports.useCommitBlobs = lt; exports.useDeleteBlob = ut; exports.useDeleteBlobs = Ct; exports.useEncodeBlobs = St; exports.useRegisterCommitments = Ot; exports.useShelbyClient = b; exports.useUploadBlobs = _t;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mutations/useCommitBlobs.tsx","../src/mutations/useEncodeBlobs.tsx","../src/mutations/useRegisterCommitments.tsx","../src/mutations/useUploadBlobs.tsx","../src/queries/useAccountBlobs.tsx","../src/queries/useBlobMetadata.tsx"],"names":["useCommitBlobs","shelbyClient","options","useMutation","account","blobs","maxConcurrentUploads","limit","pLimit","uploadPromises","blob","useEncodeBlobs","provider","onChunk","activeProvider","createDefaultErasureCodingProvider","results","blobData","blobIndex","chunksetCount","blobCommitments","generateCommitments","chunksetIndex","chunkIndex","chunkData","useRegisterCommitments","commitments","expirationMicros","signerOrFn","accountSigner","transaction","commitment","signAndSubmitTransaction","ShelbyBlobClient","AccountAddress","expectedTotalChunksets","DEFAULT_CHUNKSET_SIZE_BYTES","useUploadBlobs","chunksetSize","existingBlobs","createBlobKey","blobsToRegister","existingBlob","pendingRegisterBlobTransaction","index","blobName","getUseAccountBlobsQueryKey","params","useAccountBlobs","pagination","orderBy","where","useQuery","getUseBlobMetadataQueryKey","useBlobMetadata","name"],"mappings":"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","file":"/data/svc_shelby/actions-runner/shelby/shelby/_work/shelby/shelby/typescript/packages/react/dist/index.cjs","sourcesContent":["import type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseCommitBlobsVariables = {\n /**\n * The account to commit the blobs to.\n */\n account: AccountAddressInput;\n /**\n * The blobs to commit.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseCommitBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseCommitBlobsVariables\n>;\n\n/**\n * Uploads blobs data to the Shelby RPCs.\n *\n * This mutation uploads multiple blobs data to the RPC endpoint with configurable\n * concurrency control.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useCommitBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const commitBlobs = useCommitBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Blobs committed successfully'),\n * });\n *\n * commitBlobs.mutate({\n * account: '0x123...',\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * { blobName: 'file2.txt', blobData: new Uint8Array([...]) },\n * ],\n * });\n * ```\n */\nexport function useCommitBlobs({\n client: shelbyClient,\n ...options\n}: UseCommitBlobsOptions) {\n return useMutation({\n mutationFn: async ({\n account,\n blobs,\n maxConcurrentUploads = 3,\n }: UseCommitBlobsVariables) => {\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n },\n ...options,\n });\n}\n","import {\n type BlobCommitments,\n createDefaultErasureCodingProvider,\n type ErasureCodingProvider,\n generateCommitments,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseEncodeBlobsOnChunkEvent = {\n /**\n * The index of the blob being encoded.\n */\n blobIndex: number;\n /**\n * The index of the chunkset being encoded.\n */\n chunksetIndex: number;\n /**\n * The index of the chunk being encoded.\n */\n chunkIndex: number;\n /**\n * The data of the chunk being encoded.\n */\n chunkData: Uint8Array;\n /**\n * The progress of the encoding.\n */\n progress: number;\n};\n\nexport type UseEncodeBlobsVariables = {\n /**\n * The blobs to encode.\n */\n blobs: { blobData: Uint8Array }[];\n /**\n * The erasure coding provider to use.\n */\n provider?: ErasureCodingProvider;\n /**\n * The callback to call when a chunk is encoded.\n */\n onChunk?: (event: UseEncodeBlobsOnChunkEvent) => void;\n};\n\nexport type UseEncodeBlobsOptions = UseMutationOptionsWithClient<\n BlobCommitments[],\n Error,\n UseEncodeBlobsVariables\n>;\n\n/**\n * Encodes blobs using erasure coding.\n *\n * This mutation generates blob commitments (merkle roots and erasure coding chunks)\n * from raw blob data. It supports custom erasure coding providers and progress callbacks\n * for tracking encoding progress.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useEncodeBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const encodeBlobs = useEncodeBlobs({\n * client: shelbyClient,\n * onSuccess: (commitments) => console.log('Encoded', commitments.length, 'blobs'),\n * });\n *\n * encodeBlobs.mutate({\n * blobs: [{ blobData: new Uint8Array([...]) }],\n * onChunk: ({ blobIndex, progress }) => {\n * console.log(`Blob ${blobIndex}: ${(progress * 100).toFixed(1)}%`);\n * },\n * });\n * ```\n */\nexport function useEncodeBlobs({\n client: shelbyClient,\n ...options\n}: UseEncodeBlobsOptions) {\n return useMutation({\n mutationFn: async ({ blobs, provider, onChunk }) => {\n const activeProvider =\n provider ?? (await createDefaultErasureCodingProvider());\n\n const results: BlobCommitments[] = new Array(blobs.length);\n await Promise.all(\n blobs.map(async ({ blobData }, blobIndex) => {\n const chunksetCount = Math.ceil(\n blobData.length / activeProvider.config.chunkSizeBytes,\n );\n\n const blobCommitments = await generateCommitments(\n activeProvider,\n blobData,\n (\n chunksetIndex: number,\n chunkIndex: number,\n chunkData: Uint8Array,\n ) =>\n onChunk?.({\n blobIndex,\n chunksetIndex,\n chunkIndex,\n chunkData,\n progress: chunksetIndex / chunksetCount,\n }),\n );\n\n results[blobIndex] = blobCommitments;\n }),\n );\n\n return results;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n type BlobCommitments,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseRegisterCommitmentsVariables = {\n /**\n * The signer to use for the transaction.\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * registerCommitments.mutate({\n * signer,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The commitments to register.\n */\n commitments: { blobName: string; commitment: BlobCommitments }[];\n /**\n * The expiration time of the commitments in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n};\n\nexport type UseRegisterCommitmentsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseRegisterCommitmentsVariables\n>;\n\n/**\n * Registers blob commitments on-chain.\n *\n * This mutation registers blob commitments (merkle roots) on the Aptos blockchain\n * as part of the blob upload process. It supports both account signers and wallet adapter\n * signers, and handles batch registration of multiple blobs.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useRegisterCommitments } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const registerCommitments = useRegisterCommitments({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log('Transaction hash:', hash),\n * });\n *\n * registerCommitments.mutate({\n * signer: accountSigner,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000, // 1 day\n * });\n * ```\n */\nexport function useRegisterCommitments({\n client: shelbyClient,\n ...options\n}: UseRegisterCommitmentsOptions) {\n return useMutation({\n mutationFn: async ({\n commitments,\n expirationMicros,\n options,\n signer: signerOrFn,\n }) => {\n if (!(\"account\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } =\n await shelbyClient.coordination.batchRegisterBlobs({\n account: accountSigner,\n expirationMicros,\n options,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n })),\n });\n\n return transaction;\n }\n\n const { account, signAndSubmitTransaction } = signerOrFn;\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(account),\n expirationMicros,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n commitment.commitment.raw_data_size,\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES,\n ),\n })),\n }),\n options: options?.build?.options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n createBlobKey,\n createDefaultErasureCodingProvider,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n generateCommitments,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseUploadBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\n signer: Signer;\n /**\n * The blobs to upload.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The expiration time of the blobs in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseUploadBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseUploadBlobsVariables\n>;\n\n/**\n * Uploads blobs to the Shelby network.\n *\n * This mutation handles the complete blob upload process including:\n * - Encoding blobs with erasure coding\n * - Registering commitments on-chain (if not already registered)\n * - Uploading blob data to the RPC endpoint\n *\n * It supports both account signers and wallet adapter signers, and includes\n * logic to skip registration for blobs that already exist.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useUploadBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const uploadBlobs = useUploadBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Upload complete'),\n * });\n *\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\nexport function useUploadBlobs({\n client: shelbyClient,\n ...options\n}: UseUploadBlobsOptions) {\n return useMutation({\n mutationFn: async ({\n blobs,\n expirationMicros,\n options,\n signer: signerOrFn,\n maxConcurrentUploads = 3,\n }: UseUploadBlobsVariables) => {\n if (!(\"account\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n await shelbyClient.batchUpload({\n blobs: blobs.map(({ blobData, blobName }) => ({\n blobData,\n blobName,\n })),\n expirationMicros,\n signer: accountSigner,\n options,\n });\n } else {\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n const chunksetSize =\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES;\n\n const existingBlobs = await shelbyClient.coordination.getBlobs({\n where: {\n blob_name: {\n _in: blobs.map((blob) =>\n createBlobKey({ account, blobName: blob.blobName }),\n ),\n },\n },\n });\n\n const blobsToRegister = blobs.filter(\n (blob) =>\n !existingBlobs.some(\n (existingBlob) =>\n existingBlob.name ===\n createBlobKey({ account, blobName: blob.blobName }),\n ),\n );\n\n if (blobsToRegister.length > 0) {\n const provider = await createDefaultErasureCodingProvider();\n\n const blobCommitments = await Promise.all(\n blobsToRegister.map(async (blob) =>\n generateCommitments(provider, blob.blobData),\n ),\n );\n\n const pendingRegisterBlobTransaction = await signAndSubmitTransaction(\n {\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(account),\n expirationMicros,\n blobs: blobsToRegister.map((blob, index) => ({\n blobName: blob.blobName,\n blobSize: blob.blobData.length,\n blobMerkleRoot: blobCommitments[index].blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n blob.blobData.length,\n chunksetSize,\n ),\n })),\n }),\n options: options?.build?.options,\n },\n );\n\n await shelbyClient.coordination.aptos.waitForTransaction({\n transactionHash: pendingRegisterBlobTransaction.hash,\n });\n }\n\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n }\n },\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseAccountBlobsQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0] & {\n network: Network;\n },\n) => [\n \"account-blobs\",\n params.network,\n params.account.toString(),\n params.pagination?.limit,\n params.pagination?.offset,\n params.orderBy,\n params.where,\n];\n\nexport type UseAccountBlobsOptions = UseQueryOptionsWithClient<BlobMetadata[]> &\n Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0];\n\n/**\n * Queries blobs associated with an account.\n *\n * This query fetches blob metadata for a specific account with support for\n * pagination, filtering, and ordering.\n *\n * @example\n * ```tsx\n * import { ShelbyClient, Order_By} from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useAccountBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: blobs, isLoading } = useAccountBlobs({\n * client: shelbyClient,\n * account: '0x123...',\n * pagination: { limit: 10, offset: 0 },\n * orderBy: { updated_at: Order_By.Desc },\n * });\n * ```\n */\nexport function useAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n client: shelbyClient,\n ...options\n}: UseAccountBlobsOptions) {\n return useQuery<BlobMetadata[]>({\n queryKey: getUseAccountBlobsQueryKey({\n network: shelbyClient.config.network,\n account,\n pagination,\n orderBy,\n where,\n }),\n queryFn: async () =>\n await shelbyClient.coordination.getAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n }),\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseBlobMetadataQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0] & {\n network: Network;\n },\n) => [\"blob-metadata\", params.network, params.account.toString(), params.name];\n\nexport type UseBlobMetadataOptions =\n UseQueryOptionsWithClient<BlobMetadata | null> &\n Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0];\n\n/**\n * Queries the metadata for a specific blob.\n *\n * This query fetches the metadata for a single blob identified by account and blob name.\n * Returns `null` if the blob is not found.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useBlobMetadata } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: metadata } = useBlobMetadata({\n * client: shelbyClient,\n * account: '0x123...',\n * name: 'file1.txt',\n * });\n * ```\n */\nexport function useBlobMetadata({\n account,\n name,\n client: shelbyClient,\n ...options\n}: UseBlobMetadataOptions) {\n return useQuery<BlobMetadata | null>({\n queryKey: getUseBlobMetadataQueryKey({\n network: shelbyClient.config.network,\n account,\n name,\n }),\n queryFn: async () =>\n (await shelbyClient.coordination.getBlobMetadata({ account, name })) ??\n null,\n ...options,\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/components/ShelbyClientProvider.tsx","../src/mutations/useCommitBlobs.tsx","../src/mutations/useDeleteBlob.tsx","../src/mutations/useDeleteBlobs.tsx","../src/mutations/useEncodeBlobs.tsx","../src/mutations/useRegisterCommitments.tsx","../src/mutations/useUploadBlobs.tsx","../src/queries/useAccountBlobs.tsx","../src/queries/useBlobMetadata.tsx"],"names":["ShelbyClientContext","createContext","ShelbyClientProvider","children","client","jsx","useShelbyClient","contextClient","useContext","resolvedClient","useCommitBlobs","options","shelbyClient","useMutation","account","blobs","maxConcurrentUploads","limit","pLimit","uploadPromises","blob","useDeleteBlob","blobName","signerOrFn","accountSigner","transaction","signAndSubmitTransaction","ShelbyBlobClient","useDeleteBlobs","blobNames","isSingleBlob","useEncodeBlobs","provider","onChunk","activeProvider","createDefaultErasureCodingProvider","results","blobData","blobIndex","chunksetCount","blobCommitments","generateCommitments","chunksetIndex","chunkIndex","chunkData","useRegisterCommitments","commitments","expirationMicros","commitment","accountAddress","AccountAddress","expectedTotalChunksets","DEFAULT_CHUNKSET_SIZE_BYTES","useUploadBlobs","chunksetSize","existingBlobs","createBlobKey","blobsToRegister","existingBlob","pendingRegisterBlobTransaction","index","getUseAccountBlobsQueryKey","params","useAccountBlobs","pagination","orderBy","where","useQuery","getUseBlobMetadataQueryKey","useBlobMetadata","name"],"mappings":"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","file":"/data/svc_shelby/actions-runner/_work/shelby/shelby/typescript/packages/react/dist/index.cjs","sourcesContent":["import type { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\nimport { createContext, type PropsWithChildren, useContext } from \"react\";\n\nexport const ShelbyClientContext = createContext<ShelbyClient | null>(null);\n\nexport function ShelbyClientProvider({\n children,\n client,\n}: PropsWithChildren & { client: ShelbyClient }) {\n return (\n <ShelbyClientContext.Provider value={client}>\n {children}\n </ShelbyClientContext.Provider>\n );\n}\n\nexport function useShelbyClient(client?: ShelbyClient | null) {\n const contextClient = useContext(ShelbyClientContext);\n const resolvedClient = client ?? contextClient;\n if (!resolvedClient) {\n throw new Error(\n \"`useShelbyClient` requires a client or `ShelbyClientProvider`\",\n );\n }\n return resolvedClient;\n}\n","import type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseCommitBlobsVariables = {\n /**\n * The account to commit the blobs to.\n */\n account: AccountAddressInput;\n /**\n * The blobs to commit.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseCommitBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseCommitBlobsVariables\n>;\n\n/**\n * Uploads blobs data to the Shelby RPCs.\n *\n * This mutation uploads multiple blobs data to the RPC endpoint with configurable\n * concurrency control.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useCommitBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const commitBlobs = useCommitBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Blobs committed successfully'),\n * });\n *\n * commitBlobs.mutate({\n * account: '0x123...',\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * { blobName: 'file2.txt', blobData: new Uint8Array([...]) },\n * ],\n * });\n * ```\n */\nexport function useCommitBlobs({ client, ...options }: UseCommitBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n account,\n blobs,\n maxConcurrentUploads = 3,\n }: UseCommitBlobsVariables) => {\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n },\n ...options,\n });\n}\n","import type { InputGenerateTransactionOptions } from \"@aptos-labs/ts-sdk\";\nimport { ShelbyBlobClient } from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseDeleteBlobVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * deleteBlob.mutate({\n * signer,\n * blobName: \"folder/file.txt\",\n * });\n * ```\n */\n signer: Signer;\n /**\n * The name/path of the blob (e.g. \"folder/file.txt\").\n */\n blobName: string;\n /**\n * Optional transaction building options.\n */\n options?: InputGenerateTransactionOptions;\n};\n\nexport type UseDeleteBlobOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseDeleteBlobVariables\n>;\n\n/**\n * Deletes a blob on-chain.\n *\n * @deprecated Use {@link useDeleteBlobs} instead, which supports both single\n * and multiple blob deletion with automatic gas optimization.\n *\n * This mutation deletes blob metadata from the Shelby contract. It supports\n * both account signers and wallet adapter signers.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useDeleteBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const deleteBlobs = useDeleteBlobs({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log(\"Delete tx:\", hash),\n * });\n *\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file.txt\"],\n * });\n * ```\n */\nexport function useDeleteBlob({ client, ...options }: UseDeleteBlobOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({ blobName, signer: signerOrFn, options }) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } = await shelbyClient.coordination.deleteBlob({\n account: accountSigner,\n blobName,\n options,\n });\n\n return transaction;\n }\n\n const { signAndSubmitTransaction } = signerOrFn;\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteBlobPayload({ blobName }),\n options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import type { InputGenerateTransactionOptions } from \"@aptos-labs/ts-sdk\";\nimport { ShelbyBlobClient } from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseDeleteBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file1.txt\", \"folder/file2.txt\"],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The names/paths of the blobs to delete, without the account address prefix\n * (e.g. [\"folder/file1.txt\", \"folder/file2.txt\"], NOT [\"0x1/folder/file1.txt\"]).\n * The account address prefix is automatically derived from the signer.\n */\n blobNames: string[];\n /**\n * Optional transaction building options.\n */\n options?: InputGenerateTransactionOptions;\n};\n\nexport type UseDeleteBlobsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseDeleteBlobsVariables\n>;\n\n/**\n * Deletes one or more blobs on-chain.\n *\n * This hook automatically optimizes gas costs by using `delete_blob` for single\n * blob deletion and `delete_multiple_blobs` for multiple blobs.\n *\n * **Note:** Deleting multiple blobs (more than one) requires the `delete_multiple_blobs`\n * entry function which will be deployed to the smart contract on 2026-02-04.\n * Using this hook with multiple blobs before that date will result in a transaction failure.\n * Single blob deletion works immediately.\n *\n * This mutation deletes blob metadata from the Shelby contract. It supports\n * both account signers and wallet adapter signers.\n *\n * When deleting multiple blobs, the operation is atomic: if any blob deletion\n * fails (e.g., blob not found), the entire transaction fails and no blobs are deleted.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useDeleteBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const deleteBlobs = useDeleteBlobs({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log(\"Delete tx:\", hash),\n * });\n *\n * // Delete a single blob\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file.txt\"],\n * });\n *\n * // Delete multiple blobs in one transaction\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file1.txt\", \"folder/file2.txt\"],\n * });\n * ```\n */\nexport function useDeleteBlobs({ client, ...options }: UseDeleteBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({ blobNames, signer: signerOrFn, options }) => {\n if (blobNames.length === 0) {\n throw new Error(\"blobNames must contain at least one blob name\");\n }\n\n const isSingleBlob = blobNames.length === 1;\n\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n // Use single delete for gas optimization\n if (isSingleBlob) {\n const { transaction } = await shelbyClient.coordination.deleteBlob({\n account: accountSigner,\n blobName: blobNames[0],\n options,\n });\n return transaction;\n }\n\n // Use batch delete for multiple blobs\n const { transaction } =\n await shelbyClient.coordination.deleteMultipleBlobs({\n account: accountSigner,\n blobNames,\n options,\n });\n return transaction;\n }\n\n const { signAndSubmitTransaction } = signerOrFn;\n\n if (isSingleBlob) {\n // Use single delete for gas optimization\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteBlobPayload({\n blobName: blobNames[0],\n }),\n options,\n });\n return transaction;\n }\n\n // Use batch delete for multiple blobs\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteMultipleBlobsPayload({ blobNames }),\n options,\n });\n return transaction;\n },\n ...options,\n });\n}\n","import {\n type BlobCommitments,\n createDefaultErasureCodingProvider,\n type ErasureCodingProvider,\n generateCommitments,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptions } from \"../types/mutations\";\n\nexport type UseEncodeBlobsOnChunkEvent = {\n /**\n * The index of the blob being encoded.\n */\n blobIndex: number;\n /**\n * The index of the chunkset being encoded.\n */\n chunksetIndex: number;\n /**\n * The index of the chunk being encoded.\n */\n chunkIndex: number;\n /**\n * The data of the chunk being encoded.\n */\n chunkData: Uint8Array;\n /**\n * The progress of the encoding in percentage.\n *\n * @example\n * ```tsx\n * onChunk: ({ progress }) => {\n * console.log(`Encoding progress: ${progress * 100}%`);\n * },\n * ```\n */\n progress: number;\n};\n\nexport type UseEncodeBlobsVariables = {\n /**\n * The blobs to encode.\n */\n blobs: { blobData: Uint8Array }[];\n /**\n * The erasure coding provider to use.\n */\n provider?: ErasureCodingProvider;\n /**\n * The callback to call when a chunk is encoded.\n */\n onChunk?: (event: UseEncodeBlobsOnChunkEvent) => void;\n};\n\nexport type UseEncodeBlobsOptions = UseMutationOptions<\n BlobCommitments[],\n Error,\n UseEncodeBlobsVariables\n>;\n\n/**\n * Encodes blobs using erasure coding.\n *\n * This mutation generates blob commitments (merkle roots and erasure coding chunks)\n * from raw blob data. It supports custom erasure coding providers and progress callbacks\n * for tracking encoding progress.\n *\n * @example\n * ```tsx\n * import { useEncodeBlobs } from \"@shelby-protocol/react\";\n *\n * const encodeBlobs = useEncodeBlobs({\n * onSuccess: (commitments) => console.log('Encoded', commitments.length, 'blobs'),\n * });\n *\n * encodeBlobs.mutate({\n * blobs: [{ blobData: new Uint8Array([...]) }],\n * onChunk: ({ blobIndex, progress }) => {\n * console.log(`Blob ${blobIndex}: ${(progress * 100).toFixed(1)}%`);\n * },\n * });\n * ```\n */\nexport function useEncodeBlobs({ ...options }: UseEncodeBlobsOptions = {}) {\n return useMutation({\n mutationFn: async ({ blobs, provider, onChunk }) => {\n const activeProvider =\n provider ?? (await createDefaultErasureCodingProvider());\n\n const results: BlobCommitments[] = new Array(blobs.length);\n await Promise.all(\n blobs.map(async ({ blobData }, blobIndex) => {\n const chunksetCount = Math.ceil(\n blobData.length / activeProvider.config.chunkSizeBytes,\n );\n\n const blobCommitments = await generateCommitments(\n activeProvider,\n blobData,\n (\n chunksetIndex: number,\n chunkIndex: number,\n chunkData: Uint8Array,\n ) =>\n onChunk?.({\n blobIndex,\n chunksetIndex,\n chunkIndex,\n chunkData,\n progress: chunksetIndex / chunksetCount,\n }),\n );\n\n results[blobIndex] = blobCommitments;\n }),\n );\n\n return results;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n type BlobCommitments,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseRegisterCommitmentsVariables = {\n /**\n * The signer to use for the transaction.\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * registerCommitments.mutate({\n * signer,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The commitments to register.\n */\n commitments: { blobName: string; commitment: BlobCommitments }[];\n /**\n * The expiration time of the commitments in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n};\n\nexport type UseRegisterCommitmentsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseRegisterCommitmentsVariables\n>;\n\n/**\n * Registers blob commitments on-chain.\n *\n * This mutation registers blob commitments (merkle roots) on the Aptos blockchain\n * as part of the blob upload process. It supports both account signers and wallet adapter\n * signers, and handles batch registration of multiple blobs.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useRegisterCommitments } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const registerCommitments = useRegisterCommitments({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log('Transaction hash:', hash),\n * });\n *\n * registerCommitments.mutate({\n * signer: accountSigner,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000, // 1 day\n * });\n * ```\n */\nexport function useRegisterCommitments({\n client,\n ...options\n}: UseRegisterCommitmentsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n commitments,\n expirationMicros,\n options,\n signer: signerOrFn,\n }) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } =\n await shelbyClient.coordination.batchRegisterBlobs({\n account: accountSigner,\n expirationMicros,\n options,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n })),\n });\n\n return transaction;\n }\n\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n if (!account) {\n throw new Error(\n \"'account' is required if using a wallet adapter signer with 'useRegisterCommitments'\",\n );\n }\n\n const accountAddress =\n typeof account === \"object\" && \"address\" in account\n ? account.address\n : account;\n\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(accountAddress),\n expirationMicros,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n commitment.commitment.raw_data_size,\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES,\n ),\n })),\n }),\n options: options?.build?.options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n createBlobKey,\n createDefaultErasureCodingProvider,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n generateCommitments,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseUploadBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\n signer: Signer;\n /**\n * The blobs to upload.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The expiration time of the blobs in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseUploadBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseUploadBlobsVariables\n>;\n\n/**\n * Uploads blobs to the Shelby network.\n *\n * This mutation handles the complete blob upload process including:\n * - Encoding blobs with erasure coding\n * - Registering commitments on-chain (if not already registered)\n * - Uploading blob data to the RPC endpoint\n *\n * It supports both account signers and wallet adapter signers, and includes\n * logic to skip registration for blobs that already exist.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useUploadBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const uploadBlobs = useUploadBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Upload complete'),\n * });\n *\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\nexport function useUploadBlobs({ client, ...options }: UseUploadBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n blobs,\n expirationMicros,\n options,\n signer: signerOrFn,\n maxConcurrentUploads = 3,\n }: UseUploadBlobsVariables) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n await shelbyClient.batchUpload({\n blobs: blobs.map(({ blobData, blobName }) => ({\n blobData,\n blobName,\n })),\n expirationMicros,\n signer: accountSigner,\n options,\n });\n } else {\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n if (!account) {\n throw new Error(\n \"'account' is required if using a wallet adapter signer with 'useUploadBlobs'\",\n );\n }\n\n const accountAddress =\n typeof account === \"object\" && \"address\" in account\n ? account.address\n : account;\n\n const chunksetSize =\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES;\n\n const existingBlobs = await shelbyClient.coordination.getBlobs({\n where: {\n blob_name: {\n _in: blobs.map((blob) =>\n createBlobKey({\n account: accountAddress,\n blobName: blob.blobName,\n }),\n ),\n },\n },\n });\n\n const blobsToRegister = blobs.filter(\n (blob) =>\n !existingBlobs.some(\n (existingBlob) =>\n existingBlob.name ===\n createBlobKey({\n account: accountAddress,\n blobName: blob.blobName,\n }),\n ),\n );\n\n if (blobsToRegister.length > 0) {\n const provider = await createDefaultErasureCodingProvider();\n\n const blobCommitments = await Promise.all(\n blobsToRegister.map(async (blob) =>\n generateCommitments(provider, blob.blobData),\n ),\n );\n\n const pendingRegisterBlobTransaction = await signAndSubmitTransaction(\n {\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(accountAddress),\n expirationMicros,\n blobs: blobsToRegister.map((blob, index) => ({\n blobName: blob.blobName,\n blobSize: blob.blobData.length,\n blobMerkleRoot: blobCommitments[index].blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n blob.blobData.length,\n chunksetSize,\n ),\n })),\n }),\n options: options?.build?.options,\n },\n );\n\n await shelbyClient.coordination.aptos.waitForTransaction({\n transactionHash: pendingRegisterBlobTransaction.hash,\n });\n }\n\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account: accountAddress,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n }\n },\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseAccountBlobsQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0] & {\n network: Network;\n },\n) => [\n \"account-blobs\",\n params.network,\n params.account.toString(),\n params.pagination?.limit,\n params.pagination?.offset,\n params.orderBy,\n params.where,\n];\n\nexport type UseAccountBlobsOptions = UseQueryOptionsWithClient<BlobMetadata[]> &\n Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0];\n\n/**\n * Queries blobs associated with an account.\n *\n * This query fetches blob metadata for a specific account with support for\n * pagination, filtering, and ordering.\n *\n * @example\n * ```tsx\n * import { ShelbyClient, Order_By} from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useAccountBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: blobs, isLoading } = useAccountBlobs({\n * client: shelbyClient,\n * account: '0x123...',\n * pagination: { limit: 10, offset: 0 },\n * orderBy: { updated_at: Order_By.Desc },\n * });\n * ```\n */\nexport function useAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n client,\n ...options\n}: UseAccountBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useQuery<BlobMetadata[]>({\n queryKey: getUseAccountBlobsQueryKey({\n network: shelbyClient.config.network,\n account,\n pagination,\n orderBy,\n where,\n }),\n queryFn: async () =>\n await shelbyClient.coordination.getAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n }),\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseBlobMetadataQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0] & {\n network: Network;\n },\n) => [\"blob-metadata\", params.network, params.account.toString(), params.name];\n\nexport type UseBlobMetadataOptions =\n UseQueryOptionsWithClient<BlobMetadata | null> &\n Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0];\n\n/**\n * Queries the metadata for a specific blob.\n *\n * This query fetches the metadata for a single blob identified by account and blob name.\n * Returns `null` if the blob is not found.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useBlobMetadata } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: metadata } = useBlobMetadata({\n * client: shelbyClient,\n * account: '0x123...',\n * name: 'file1.txt',\n * });\n * ```\n */\nexport function useBlobMetadata({\n account,\n name,\n client,\n ...options\n}: UseBlobMetadataOptions) {\n const shelbyClient = useShelbyClient(client);\n return useQuery<BlobMetadata | null>({\n queryKey: getUseBlobMetadataQueryKey({\n network: shelbyClient.config.network,\n account,\n name,\n }),\n queryFn: async () =>\n (await shelbyClient.coordination.getBlobMetadata({ account, name })) ??\n null,\n ...options,\n });\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ export * from "./components/index";
1
2
  export * from "./mutations/index";
2
3
  export * from "./queries/index";
4
+ export * from "./types/index";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{useMutation as C}from"@tanstack/react-query";import h from"p-limit";function I({client:t,...s}){return C({mutationFn:async({account:o,blobs:e,maxConcurrentUploads:n=3})=>{let r=h(n),m=e.map(i=>r(()=>t.rpc.putBlob({account:o,blobName:i.blobName,blobData:i.blobData})));await Promise.all(m)},...s})}import{createDefaultErasureCodingProvider as k,generateCommitments as w}from"@shelby-protocol/sdk/browser";import{useMutation as S}from"@tanstack/react-query";function Z({client:t,...s}){return S({mutationFn:async({blobs:o,provider:e,onChunk:n})=>{let r=e??await k(),m=new Array(o.length);return await Promise.all(o.map(async({blobData:i},p)=>{let a=Math.ceil(i.length/r.config.chunkSizeBytes),c=await w(r,i,(l,d,y)=>n?.({blobIndex:p,chunksetIndex:l,chunkIndex:d,chunkData:y,progress:l/a}));m[p]=c})),m},...s})}import{AccountAddress as x}from"@aptos-labs/ts-sdk";import{DEFAULT_CHUNKSET_SIZE_BYTES as A,expectedTotalChunksets as M,ShelbyBlobClient as O}from"@shelby-protocol/sdk/browser";import{useMutation as E}from"@tanstack/react-query";function $({client:t,...s}){return E({mutationFn:async({commitments:o,expirationMicros:e,options:n,signer:r})=>{if(!("account"in r)){let a=r,{transaction:c}=await t.coordination.batchRegisterBlobs({account:a,expirationMicros:e,options:n,blobs:o.map(l=>({blobName:l.blobName,blobSize:l.commitment.raw_data_size,blobMerkleRoot:l.commitment.blob_merkle_root}))});return c}let{account:m,signAndSubmitTransaction:i}=r;return await i({data:O.createBatchRegisterBlobsPayload({account:x.from(m),expirationMicros:e,blobs:o.map(a=>({blobName:a.blobName,blobSize:a.commitment.raw_data_size,blobMerkleRoot:a.commitment.blob_merkle_root,numChunksets:M(a.commitment.raw_data_size,n?.chunksetSizeBytes??A)}))}),options:n?.build?.options})},...s})}import{AccountAddress as N}from"@aptos-labs/ts-sdk";import{createBlobKey as U,createDefaultErasureCodingProvider as _,DEFAULT_CHUNKSET_SIZE_BYTES as P,expectedTotalChunksets as v,generateCommitments as D,ShelbyBlobClient as R}from"@shelby-protocol/sdk/browser";import{useMutation as T}from"@tanstack/react-query";import W from"p-limit";function it({client:t,...s}){return T({mutationFn:async({blobs:o,expirationMicros:e,options:n,signer:r,maxConcurrentUploads:m=3})=>{if("account"in r){let{account:i,signAndSubmitTransaction:p}=r,a=n?.chunksetSizeBytes??P,c=await t.coordination.getBlobs({where:{blob_name:{_in:o.map(b=>U({account:i,blobName:b.blobName}))}}}),l=o.filter(b=>!c.some(B=>B.name===U({account:i,blobName:b.blobName})));if(l.length>0){let b=await _(),B=await Promise.all(l.map(async u=>D(b,u.blobData))),g=await p({data:R.createBatchRegisterBlobsPayload({account:N.from(i),expirationMicros:e,blobs:l.map((u,f)=>({blobName:u.blobName,blobSize:u.blobData.length,blobMerkleRoot:B[f].blob_merkle_root,numChunksets:v(u.blobData.length,a)}))}),options:n?.build?.options});await t.coordination.aptos.waitForTransaction({transactionHash:g.hash})}let d=W(m),y=o.map(b=>d(()=>t.rpc.putBlob({account:i,blobName:b.blobName,blobData:b.blobData})));await Promise.all(y)}else{let i=r;await t.batchUpload({blobs:o.map(({blobData:p,blobName:a})=>({blobData:p,blobName:a})),expirationMicros:e,signer:i,options:n})}},...s})}import{useQuery as z}from"@tanstack/react-query";var V=t=>["account-blobs",t.network,t.account.toString(),t.pagination?.limit,t.pagination?.offset,t.orderBy,t.where];function ut({account:t,pagination:s,orderBy:o,where:e,client:n,...r}){return z({queryKey:V({network:n.config.network,account:t,pagination:s,orderBy:o,where:e}),queryFn:async()=>await n.coordination.getAccountBlobs({account:t,pagination:s,orderBy:o,where:e}),...r})}import{useQuery as Q}from"@tanstack/react-query";var K=t=>["blob-metadata",t.network,t.account.toString(),t.name];function Bt({account:t,name:s,client:o,...e}){return Q({queryKey:K({network:o.config.network,account:t,name:s}),queryFn:async()=>await o.coordination.getBlobMetadata({account:t,name:s})??null,...e})}export{V as getUseAccountBlobsQueryKey,K as getUseBlobMetadataQueryKey,ut as useAccountBlobs,Bt as useBlobMetadata,I as useCommitBlobs,Z as useEncodeBlobs,$ as useRegisterCommitments,it as useUploadBlobs};
1
+ import{createContext as A,useContext as k}from"react";import{jsx as M}from"react/jsx-runtime";var C=A(null);function tt({children:t,client:r}){return M(C.Provider,{value:r,children:t})}function b(t){let r=k(C),o=t??r;if(!o)throw new Error("`useShelbyClient` requires a client or `ShelbyClientProvider`");return o}import{useMutation as O}from"@tanstack/react-query";import E from"p-limit";function lt({client:t,...r}){let o=b(t);return O({mutationFn:async({account:e,blobs:n,maxConcurrentUploads:i=3})=>{let s=E(i),l=n.map(a=>s(()=>o.rpc.putBlob({account:e,blobName:a.blobName,blobData:a.blobData})));await Promise.all(l)},...r})}import{ShelbyBlobClient as D}from"@shelby-protocol/sdk/browser";import{useMutation as P}from"@tanstack/react-query";function ut({client:t,...r}){let o=b(t);return P({mutationFn:async({blobName:e,signer:n,options:i})=>{if(!("signAndSubmitTransaction"in n)){let a=n,{transaction:m}=await o.coordination.deleteBlob({account:a,blobName:e,options:i});return m}let{signAndSubmitTransaction:s}=n;return await s({data:D.createDeleteBlobPayload({blobName:e}),options:i})},...r})}import{ShelbyBlobClient as g}from"@shelby-protocol/sdk/browser";import{useMutation as T}from"@tanstack/react-query";function Ct({client:t,...r}){let o=b(t);return T({mutationFn:async({blobNames:e,signer:n,options:i})=>{if(e.length===0)throw new Error("blobNames must contain at least one blob name");let s=e.length===1;if(!("signAndSubmitTransaction"in n)){let m=n;if(s){let{transaction:c}=await o.coordination.deleteBlob({account:m,blobName:e[0],options:i});return c}let{transaction:p}=await o.coordination.deleteMultipleBlobs({account:m,blobNames:e,options:i});return p}let{signAndSubmitTransaction:l}=n;return s?await l({data:g.createDeleteBlobPayload({blobName:e[0]}),options:i}):await l({data:g.createDeleteMultipleBlobsPayload({blobNames:e}),options:i})},...r})}import{createDefaultErasureCodingProvider as N,generateCommitments as v}from"@shelby-protocol/sdk/browser";import{useMutation as _}from"@tanstack/react-query";function St({...t}={}){return _({mutationFn:async({blobs:r,provider:o,onChunk:e})=>{let n=o??await N(),i=new Array(r.length);return await Promise.all(r.map(async({blobData:s},l)=>{let a=Math.ceil(s.length/n.config.chunkSizeBytes),m=await v(n,s,(p,c,d)=>e?.({blobIndex:l,chunksetIndex:p,chunkIndex:c,chunkData:d,progress:p/a}));i[l]=m})),i},...t})}import{AccountAddress as W}from"@aptos-labs/ts-sdk";import{DEFAULT_CHUNKSET_SIZE_BYTES as R,expectedTotalChunksets as V,ShelbyBlobClient as z}from"@shelby-protocol/sdk/browser";import{useMutation as q}from"@tanstack/react-query";function Ot({client:t,...r}){let o=b(t);return q({mutationFn:async({commitments:e,expirationMicros:n,options:i,signer:s})=>{if(!("signAndSubmitTransaction"in s)){let c=s,{transaction:d}=await o.coordination.batchRegisterBlobs({account:c,expirationMicros:n,options:i,blobs:e.map(y=>({blobName:y.blobName,blobSize:y.commitment.raw_data_size,blobMerkleRoot:y.commitment.blob_merkle_root}))});return d}let{account:l,signAndSubmitTransaction:a}=s;if(!l)throw new Error("'account' is required if using a wallet adapter signer with 'useRegisterCommitments'");let m=typeof l=="object"&&"address"in l?l.address:l;return await a({data:z.createBatchRegisterBlobsPayload({account:W.from(m),expirationMicros:n,blobs:e.map(c=>({blobName:c.blobName,blobSize:c.commitment.raw_data_size,blobMerkleRoot:c.commitment.blob_merkle_root,numChunksets:V(c.commitment.raw_data_size,i?.chunksetSizeBytes??R)}))}),options:i?.build?.options})},...r})}import{AccountAddress as I}from"@aptos-labs/ts-sdk";import{createBlobKey as B,createDefaultErasureCodingProvider as Q,DEFAULT_CHUNKSET_SIZE_BYTES as K,expectedTotalChunksets as G,generateCommitments as L,ShelbyBlobClient as F}from"@shelby-protocol/sdk/browser";import{useMutation as H}from"@tanstack/react-query";import Y from"p-limit";function _t({client:t,...r}){let o=b(t);return H({mutationFn:async({blobs:e,expirationMicros:n,options:i,signer:s,maxConcurrentUploads:l=3})=>{if("signAndSubmitTransaction"in s){let{account:a,signAndSubmitTransaction:m}=s;if(!a)throw new Error("'account' is required if using a wallet adapter signer with 'useUploadBlobs'");let p=typeof a=="object"&&"address"in a?a.address:a,c=i?.chunksetSizeBytes??K,d=await o.coordination.getBlobs({where:{blob_name:{_in:e.map(u=>B({account:p,blobName:u.blobName}))}}}),y=e.filter(u=>!d.some(f=>f.name===B({account:p,blobName:u.blobName})));if(y.length>0){let u=await Q(),f=await Promise.all(y.map(async h=>L(u,h.blobData))),w=await m({data:F.createBatchRegisterBlobsPayload({account:I.from(p),expirationMicros:n,blobs:y.map((h,x)=>({blobName:h.blobName,blobSize:h.blobData.length,blobMerkleRoot:f[x].blob_merkle_root,numChunksets:G(h.blobData.length,c)}))}),options:i?.build?.options});await o.coordination.aptos.waitForTransaction({transactionHash:w.hash})}let U=Y(l),S=e.map(u=>U(()=>o.rpc.putBlob({account:p,blobName:u.blobName,blobData:u.blobData})));await Promise.all(S)}else{let a=s;await o.batchUpload({blobs:e.map(({blobData:m,blobName:p})=>({blobData:m,blobName:p})),expirationMicros:n,signer:a,options:i})}},...r})}import{useQuery as Z}from"@tanstack/react-query";var j=t=>["account-blobs",t.network,t.account.toString(),t.pagination?.limit,t.pagination?.offset,t.orderBy,t.where];function Ft({account:t,pagination:r,orderBy:o,where:e,client:n,...i}){let s=b(n);return Z({queryKey:j({network:s.config.network,account:t,pagination:r,orderBy:o,where:e}),queryFn:async()=>await s.coordination.getAccountBlobs({account:t,pagination:r,orderBy:o,where:e}),...i})}import{useQuery as J}from"@tanstack/react-query";var X=t=>["blob-metadata",t.network,t.account.toString(),t.name];function jt({account:t,name:r,client:o,...e}){let n=b(o);return J({queryKey:X({network:n.config.network,account:t,name:r}),queryFn:async()=>await n.coordination.getBlobMetadata({account:t,name:r})??null,...e})}export{C as ShelbyClientContext,tt as ShelbyClientProvider,j as getUseAccountBlobsQueryKey,X as getUseBlobMetadataQueryKey,Ft as useAccountBlobs,jt as useBlobMetadata,lt as useCommitBlobs,ut as useDeleteBlob,Ct as useDeleteBlobs,St as useEncodeBlobs,Ot as useRegisterCommitments,b as useShelbyClient,_t as useUploadBlobs};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/mutations/useCommitBlobs.tsx","../src/mutations/useEncodeBlobs.tsx","../src/mutations/useRegisterCommitments.tsx","../src/mutations/useUploadBlobs.tsx","../src/queries/useAccountBlobs.tsx","../src/queries/useBlobMetadata.tsx"],"sourcesContent":["import type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseCommitBlobsVariables = {\n /**\n * The account to commit the blobs to.\n */\n account: AccountAddressInput;\n /**\n * The blobs to commit.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseCommitBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseCommitBlobsVariables\n>;\n\n/**\n * Uploads blobs data to the Shelby RPCs.\n *\n * This mutation uploads multiple blobs data to the RPC endpoint with configurable\n * concurrency control.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useCommitBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const commitBlobs = useCommitBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Blobs committed successfully'),\n * });\n *\n * commitBlobs.mutate({\n * account: '0x123...',\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * { blobName: 'file2.txt', blobData: new Uint8Array([...]) },\n * ],\n * });\n * ```\n */\nexport function useCommitBlobs({\n client: shelbyClient,\n ...options\n}: UseCommitBlobsOptions) {\n return useMutation({\n mutationFn: async ({\n account,\n blobs,\n maxConcurrentUploads = 3,\n }: UseCommitBlobsVariables) => {\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n },\n ...options,\n });\n}\n","import {\n type BlobCommitments,\n createDefaultErasureCodingProvider,\n type ErasureCodingProvider,\n generateCommitments,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseEncodeBlobsOnChunkEvent = {\n /**\n * The index of the blob being encoded.\n */\n blobIndex: number;\n /**\n * The index of the chunkset being encoded.\n */\n chunksetIndex: number;\n /**\n * The index of the chunk being encoded.\n */\n chunkIndex: number;\n /**\n * The data of the chunk being encoded.\n */\n chunkData: Uint8Array;\n /**\n * The progress of the encoding.\n */\n progress: number;\n};\n\nexport type UseEncodeBlobsVariables = {\n /**\n * The blobs to encode.\n */\n blobs: { blobData: Uint8Array }[];\n /**\n * The erasure coding provider to use.\n */\n provider?: ErasureCodingProvider;\n /**\n * The callback to call when a chunk is encoded.\n */\n onChunk?: (event: UseEncodeBlobsOnChunkEvent) => void;\n};\n\nexport type UseEncodeBlobsOptions = UseMutationOptionsWithClient<\n BlobCommitments[],\n Error,\n UseEncodeBlobsVariables\n>;\n\n/**\n * Encodes blobs using erasure coding.\n *\n * This mutation generates blob commitments (merkle roots and erasure coding chunks)\n * from raw blob data. It supports custom erasure coding providers and progress callbacks\n * for tracking encoding progress.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useEncodeBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const encodeBlobs = useEncodeBlobs({\n * client: shelbyClient,\n * onSuccess: (commitments) => console.log('Encoded', commitments.length, 'blobs'),\n * });\n *\n * encodeBlobs.mutate({\n * blobs: [{ blobData: new Uint8Array([...]) }],\n * onChunk: ({ blobIndex, progress }) => {\n * console.log(`Blob ${blobIndex}: ${(progress * 100).toFixed(1)}%`);\n * },\n * });\n * ```\n */\nexport function useEncodeBlobs({\n client: shelbyClient,\n ...options\n}: UseEncodeBlobsOptions) {\n return useMutation({\n mutationFn: async ({ blobs, provider, onChunk }) => {\n const activeProvider =\n provider ?? (await createDefaultErasureCodingProvider());\n\n const results: BlobCommitments[] = new Array(blobs.length);\n await Promise.all(\n blobs.map(async ({ blobData }, blobIndex) => {\n const chunksetCount = Math.ceil(\n blobData.length / activeProvider.config.chunkSizeBytes,\n );\n\n const blobCommitments = await generateCommitments(\n activeProvider,\n blobData,\n (\n chunksetIndex: number,\n chunkIndex: number,\n chunkData: Uint8Array,\n ) =>\n onChunk?.({\n blobIndex,\n chunksetIndex,\n chunkIndex,\n chunkData,\n progress: chunksetIndex / chunksetCount,\n }),\n );\n\n results[blobIndex] = blobCommitments;\n }),\n );\n\n return results;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n type BlobCommitments,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseRegisterCommitmentsVariables = {\n /**\n * The signer to use for the transaction.\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * registerCommitments.mutate({\n * signer,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The commitments to register.\n */\n commitments: { blobName: string; commitment: BlobCommitments }[];\n /**\n * The expiration time of the commitments in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n};\n\nexport type UseRegisterCommitmentsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseRegisterCommitmentsVariables\n>;\n\n/**\n * Registers blob commitments on-chain.\n *\n * This mutation registers blob commitments (merkle roots) on the Aptos blockchain\n * as part of the blob upload process. It supports both account signers and wallet adapter\n * signers, and handles batch registration of multiple blobs.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useRegisterCommitments } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const registerCommitments = useRegisterCommitments({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log('Transaction hash:', hash),\n * });\n *\n * registerCommitments.mutate({\n * signer: accountSigner,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000, // 1 day\n * });\n * ```\n */\nexport function useRegisterCommitments({\n client: shelbyClient,\n ...options\n}: UseRegisterCommitmentsOptions) {\n return useMutation({\n mutationFn: async ({\n commitments,\n expirationMicros,\n options,\n signer: signerOrFn,\n }) => {\n if (!(\"account\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } =\n await shelbyClient.coordination.batchRegisterBlobs({\n account: accountSigner,\n expirationMicros,\n options,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n })),\n });\n\n return transaction;\n }\n\n const { account, signAndSubmitTransaction } = signerOrFn;\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(account),\n expirationMicros,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n commitment.commitment.raw_data_size,\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES,\n ),\n })),\n }),\n options: options?.build?.options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n createBlobKey,\n createDefaultErasureCodingProvider,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n generateCommitments,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseUploadBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\n signer: Signer;\n /**\n * The blobs to upload.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The expiration time of the blobs in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseUploadBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseUploadBlobsVariables\n>;\n\n/**\n * Uploads blobs to the Shelby network.\n *\n * This mutation handles the complete blob upload process including:\n * - Encoding blobs with erasure coding\n * - Registering commitments on-chain (if not already registered)\n * - Uploading blob data to the RPC endpoint\n *\n * It supports both account signers and wallet adapter signers, and includes\n * logic to skip registration for blobs that already exist.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useUploadBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const uploadBlobs = useUploadBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Upload complete'),\n * });\n *\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\nexport function useUploadBlobs({\n client: shelbyClient,\n ...options\n}: UseUploadBlobsOptions) {\n return useMutation({\n mutationFn: async ({\n blobs,\n expirationMicros,\n options,\n signer: signerOrFn,\n maxConcurrentUploads = 3,\n }: UseUploadBlobsVariables) => {\n if (!(\"account\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n await shelbyClient.batchUpload({\n blobs: blobs.map(({ blobData, blobName }) => ({\n blobData,\n blobName,\n })),\n expirationMicros,\n signer: accountSigner,\n options,\n });\n } else {\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n const chunksetSize =\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES;\n\n const existingBlobs = await shelbyClient.coordination.getBlobs({\n where: {\n blob_name: {\n _in: blobs.map((blob) =>\n createBlobKey({ account, blobName: blob.blobName }),\n ),\n },\n },\n });\n\n const blobsToRegister = blobs.filter(\n (blob) =>\n !existingBlobs.some(\n (existingBlob) =>\n existingBlob.name ===\n createBlobKey({ account, blobName: blob.blobName }),\n ),\n );\n\n if (blobsToRegister.length > 0) {\n const provider = await createDefaultErasureCodingProvider();\n\n const blobCommitments = await Promise.all(\n blobsToRegister.map(async (blob) =>\n generateCommitments(provider, blob.blobData),\n ),\n );\n\n const pendingRegisterBlobTransaction = await signAndSubmitTransaction(\n {\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(account),\n expirationMicros,\n blobs: blobsToRegister.map((blob, index) => ({\n blobName: blob.blobName,\n blobSize: blob.blobData.length,\n blobMerkleRoot: blobCommitments[index].blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n blob.blobData.length,\n chunksetSize,\n ),\n })),\n }),\n options: options?.build?.options,\n },\n );\n\n await shelbyClient.coordination.aptos.waitForTransaction({\n transactionHash: pendingRegisterBlobTransaction.hash,\n });\n }\n\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n }\n },\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseAccountBlobsQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0] & {\n network: Network;\n },\n) => [\n \"account-blobs\",\n params.network,\n params.account.toString(),\n params.pagination?.limit,\n params.pagination?.offset,\n params.orderBy,\n params.where,\n];\n\nexport type UseAccountBlobsOptions = UseQueryOptionsWithClient<BlobMetadata[]> &\n Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0];\n\n/**\n * Queries blobs associated with an account.\n *\n * This query fetches blob metadata for a specific account with support for\n * pagination, filtering, and ordering.\n *\n * @example\n * ```tsx\n * import { ShelbyClient, Order_By} from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useAccountBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: blobs, isLoading } = useAccountBlobs({\n * client: shelbyClient,\n * account: '0x123...',\n * pagination: { limit: 10, offset: 0 },\n * orderBy: { updated_at: Order_By.Desc },\n * });\n * ```\n */\nexport function useAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n client: shelbyClient,\n ...options\n}: UseAccountBlobsOptions) {\n return useQuery<BlobMetadata[]>({\n queryKey: getUseAccountBlobsQueryKey({\n network: shelbyClient.config.network,\n account,\n pagination,\n orderBy,\n where,\n }),\n queryFn: async () =>\n await shelbyClient.coordination.getAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n }),\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseBlobMetadataQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0] & {\n network: Network;\n },\n) => [\"blob-metadata\", params.network, params.account.toString(), params.name];\n\nexport type UseBlobMetadataOptions =\n UseQueryOptionsWithClient<BlobMetadata | null> &\n Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0];\n\n/**\n * Queries the metadata for a specific blob.\n *\n * This query fetches the metadata for a single blob identified by account and blob name.\n * Returns `null` if the blob is not found.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useBlobMetadata } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: metadata } = useBlobMetadata({\n * client: shelbyClient,\n * account: '0x123...',\n * name: 'file1.txt',\n * });\n * ```\n */\nexport function useBlobMetadata({\n account,\n name,\n client: shelbyClient,\n ...options\n}: UseBlobMetadataOptions) {\n return useQuery<BlobMetadata | null>({\n queryKey: getUseBlobMetadataQueryKey({\n network: shelbyClient.config.network,\n account,\n name,\n }),\n queryFn: async () =>\n (await shelbyClient.coordination.getBlobMetadata({ account, name })) ??\n null,\n ...options,\n });\n}\n"],"mappings":"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","names":["useMutation","pLimit","useCommitBlobs","shelbyClient","options","account","blobs","maxConcurrentUploads","limit","uploadPromises","blob","createDefaultErasureCodingProvider","generateCommitments","useMutation","useEncodeBlobs","shelbyClient","options","blobs","provider","onChunk","activeProvider","results","blobData","blobIndex","chunksetCount","blobCommitments","chunksetIndex","chunkIndex","chunkData","AccountAddress","DEFAULT_CHUNKSET_SIZE_BYTES","expectedTotalChunksets","ShelbyBlobClient","useMutation","useRegisterCommitments","shelbyClient","options","commitments","expirationMicros","signerOrFn","accountSigner","transaction","commitment","account","signAndSubmitTransaction","AccountAddress","createBlobKey","createDefaultErasureCodingProvider","DEFAULT_CHUNKSET_SIZE_BYTES","expectedTotalChunksets","generateCommitments","ShelbyBlobClient","useMutation","pLimit","useUploadBlobs","shelbyClient","options","blobs","expirationMicros","signerOrFn","maxConcurrentUploads","account","signAndSubmitTransaction","chunksetSize","existingBlobs","blob","blobsToRegister","existingBlob","provider","blobCommitments","pendingRegisterBlobTransaction","index","limit","uploadPromises","accountSigner","blobData","blobName","useQuery","getUseAccountBlobsQueryKey","params","useAccountBlobs","account","pagination","orderBy","where","shelbyClient","options","useQuery","getUseBlobMetadataQueryKey","params","useBlobMetadata","account","name","shelbyClient","options"]}
1
+ {"version":3,"sources":["../src/components/ShelbyClientProvider.tsx","../src/mutations/useCommitBlobs.tsx","../src/mutations/useDeleteBlob.tsx","../src/mutations/useDeleteBlobs.tsx","../src/mutations/useEncodeBlobs.tsx","../src/mutations/useRegisterCommitments.tsx","../src/mutations/useUploadBlobs.tsx","../src/queries/useAccountBlobs.tsx","../src/queries/useBlobMetadata.tsx"],"sourcesContent":["import type { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\nimport { createContext, type PropsWithChildren, useContext } from \"react\";\n\nexport const ShelbyClientContext = createContext<ShelbyClient | null>(null);\n\nexport function ShelbyClientProvider({\n children,\n client,\n}: PropsWithChildren & { client: ShelbyClient }) {\n return (\n <ShelbyClientContext.Provider value={client}>\n {children}\n </ShelbyClientContext.Provider>\n );\n}\n\nexport function useShelbyClient(client?: ShelbyClient | null) {\n const contextClient = useContext(ShelbyClientContext);\n const resolvedClient = client ?? contextClient;\n if (!resolvedClient) {\n throw new Error(\n \"`useShelbyClient` requires a client or `ShelbyClientProvider`\",\n );\n }\n return resolvedClient;\n}\n","import type { AccountAddressInput } from \"@aptos-labs/ts-sdk\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\n\nexport type UseCommitBlobsVariables = {\n /**\n * The account to commit the blobs to.\n */\n account: AccountAddressInput;\n /**\n * The blobs to commit.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseCommitBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseCommitBlobsVariables\n>;\n\n/**\n * Uploads blobs data to the Shelby RPCs.\n *\n * This mutation uploads multiple blobs data to the RPC endpoint with configurable\n * concurrency control.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useCommitBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const commitBlobs = useCommitBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Blobs committed successfully'),\n * });\n *\n * commitBlobs.mutate({\n * account: '0x123...',\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * { blobName: 'file2.txt', blobData: new Uint8Array([...]) },\n * ],\n * });\n * ```\n */\nexport function useCommitBlobs({ client, ...options }: UseCommitBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n account,\n blobs,\n maxConcurrentUploads = 3,\n }: UseCommitBlobsVariables) => {\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n },\n ...options,\n });\n}\n","import type { InputGenerateTransactionOptions } from \"@aptos-labs/ts-sdk\";\nimport { ShelbyBlobClient } from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseDeleteBlobVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * deleteBlob.mutate({\n * signer,\n * blobName: \"folder/file.txt\",\n * });\n * ```\n */\n signer: Signer;\n /**\n * The name/path of the blob (e.g. \"folder/file.txt\").\n */\n blobName: string;\n /**\n * Optional transaction building options.\n */\n options?: InputGenerateTransactionOptions;\n};\n\nexport type UseDeleteBlobOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseDeleteBlobVariables\n>;\n\n/**\n * Deletes a blob on-chain.\n *\n * @deprecated Use {@link useDeleteBlobs} instead, which supports both single\n * and multiple blob deletion with automatic gas optimization.\n *\n * This mutation deletes blob metadata from the Shelby contract. It supports\n * both account signers and wallet adapter signers.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useDeleteBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const deleteBlobs = useDeleteBlobs({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log(\"Delete tx:\", hash),\n * });\n *\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file.txt\"],\n * });\n * ```\n */\nexport function useDeleteBlob({ client, ...options }: UseDeleteBlobOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({ blobName, signer: signerOrFn, options }) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } = await shelbyClient.coordination.deleteBlob({\n account: accountSigner,\n blobName,\n options,\n });\n\n return transaction;\n }\n\n const { signAndSubmitTransaction } = signerOrFn;\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteBlobPayload({ blobName }),\n options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import type { InputGenerateTransactionOptions } from \"@aptos-labs/ts-sdk\";\nimport { ShelbyBlobClient } from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseDeleteBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file1.txt\", \"folder/file2.txt\"],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The names/paths of the blobs to delete, without the account address prefix\n * (e.g. [\"folder/file1.txt\", \"folder/file2.txt\"], NOT [\"0x1/folder/file1.txt\"]).\n * The account address prefix is automatically derived from the signer.\n */\n blobNames: string[];\n /**\n * Optional transaction building options.\n */\n options?: InputGenerateTransactionOptions;\n};\n\nexport type UseDeleteBlobsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseDeleteBlobsVariables\n>;\n\n/**\n * Deletes one or more blobs on-chain.\n *\n * This hook automatically optimizes gas costs by using `delete_blob` for single\n * blob deletion and `delete_multiple_blobs` for multiple blobs.\n *\n * **Note:** Deleting multiple blobs (more than one) requires the `delete_multiple_blobs`\n * entry function which will be deployed to the smart contract on 2026-02-04.\n * Using this hook with multiple blobs before that date will result in a transaction failure.\n * Single blob deletion works immediately.\n *\n * This mutation deletes blob metadata from the Shelby contract. It supports\n * both account signers and wallet adapter signers.\n *\n * When deleting multiple blobs, the operation is atomic: if any blob deletion\n * fails (e.g., blob not found), the entire transaction fails and no blobs are deleted.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useDeleteBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const deleteBlobs = useDeleteBlobs({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log(\"Delete tx:\", hash),\n * });\n *\n * // Delete a single blob\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file.txt\"],\n * });\n *\n * // Delete multiple blobs in one transaction\n * deleteBlobs.mutate({\n * signer,\n * blobNames: [\"folder/file1.txt\", \"folder/file2.txt\"],\n * });\n * ```\n */\nexport function useDeleteBlobs({ client, ...options }: UseDeleteBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({ blobNames, signer: signerOrFn, options }) => {\n if (blobNames.length === 0) {\n throw new Error(\"blobNames must contain at least one blob name\");\n }\n\n const isSingleBlob = blobNames.length === 1;\n\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n // Use single delete for gas optimization\n if (isSingleBlob) {\n const { transaction } = await shelbyClient.coordination.deleteBlob({\n account: accountSigner,\n blobName: blobNames[0],\n options,\n });\n return transaction;\n }\n\n // Use batch delete for multiple blobs\n const { transaction } =\n await shelbyClient.coordination.deleteMultipleBlobs({\n account: accountSigner,\n blobNames,\n options,\n });\n return transaction;\n }\n\n const { signAndSubmitTransaction } = signerOrFn;\n\n if (isSingleBlob) {\n // Use single delete for gas optimization\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteBlobPayload({\n blobName: blobNames[0],\n }),\n options,\n });\n return transaction;\n }\n\n // Use batch delete for multiple blobs\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createDeleteMultipleBlobsPayload({ blobNames }),\n options,\n });\n return transaction;\n },\n ...options,\n });\n}\n","import {\n type BlobCommitments,\n createDefaultErasureCodingProvider,\n type ErasureCodingProvider,\n generateCommitments,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport type { UseMutationOptions } from \"../types/mutations\";\n\nexport type UseEncodeBlobsOnChunkEvent = {\n /**\n * The index of the blob being encoded.\n */\n blobIndex: number;\n /**\n * The index of the chunkset being encoded.\n */\n chunksetIndex: number;\n /**\n * The index of the chunk being encoded.\n */\n chunkIndex: number;\n /**\n * The data of the chunk being encoded.\n */\n chunkData: Uint8Array;\n /**\n * The progress of the encoding in percentage.\n *\n * @example\n * ```tsx\n * onChunk: ({ progress }) => {\n * console.log(`Encoding progress: ${progress * 100}%`);\n * },\n * ```\n */\n progress: number;\n};\n\nexport type UseEncodeBlobsVariables = {\n /**\n * The blobs to encode.\n */\n blobs: { blobData: Uint8Array }[];\n /**\n * The erasure coding provider to use.\n */\n provider?: ErasureCodingProvider;\n /**\n * The callback to call when a chunk is encoded.\n */\n onChunk?: (event: UseEncodeBlobsOnChunkEvent) => void;\n};\n\nexport type UseEncodeBlobsOptions = UseMutationOptions<\n BlobCommitments[],\n Error,\n UseEncodeBlobsVariables\n>;\n\n/**\n * Encodes blobs using erasure coding.\n *\n * This mutation generates blob commitments (merkle roots and erasure coding chunks)\n * from raw blob data. It supports custom erasure coding providers and progress callbacks\n * for tracking encoding progress.\n *\n * @example\n * ```tsx\n * import { useEncodeBlobs } from \"@shelby-protocol/react\";\n *\n * const encodeBlobs = useEncodeBlobs({\n * onSuccess: (commitments) => console.log('Encoded', commitments.length, 'blobs'),\n * });\n *\n * encodeBlobs.mutate({\n * blobs: [{ blobData: new Uint8Array([...]) }],\n * onChunk: ({ blobIndex, progress }) => {\n * console.log(`Blob ${blobIndex}: ${(progress * 100).toFixed(1)}%`);\n * },\n * });\n * ```\n */\nexport function useEncodeBlobs({ ...options }: UseEncodeBlobsOptions = {}) {\n return useMutation({\n mutationFn: async ({ blobs, provider, onChunk }) => {\n const activeProvider =\n provider ?? (await createDefaultErasureCodingProvider());\n\n const results: BlobCommitments[] = new Array(blobs.length);\n await Promise.all(\n blobs.map(async ({ blobData }, blobIndex) => {\n const chunksetCount = Math.ceil(\n blobData.length / activeProvider.config.chunkSizeBytes,\n );\n\n const blobCommitments = await generateCommitments(\n activeProvider,\n blobData,\n (\n chunksetIndex: number,\n chunkIndex: number,\n chunkData: Uint8Array,\n ) =>\n onChunk?.({\n blobIndex,\n chunksetIndex,\n chunkIndex,\n chunkData,\n progress: chunksetIndex / chunksetCount,\n }),\n );\n\n results[blobIndex] = blobCommitments;\n }),\n );\n\n return results;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n type BlobCommitments,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseRegisterCommitmentsVariables = {\n /**\n * The signer to use for the transaction.\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * registerCommitments.mutate({\n * signer,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * });\n * ```\n */\n signer: Signer;\n /**\n * The commitments to register.\n */\n commitments: { blobName: string; commitment: BlobCommitments }[];\n /**\n * The expiration time of the commitments in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n};\n\nexport type UseRegisterCommitmentsOptions = UseMutationOptionsWithClient<\n { hash: string },\n Error,\n UseRegisterCommitmentsVariables\n>;\n\n/**\n * Registers blob commitments on-chain.\n *\n * This mutation registers blob commitments (merkle roots) on the Aptos blockchain\n * as part of the blob upload process. It supports both account signers and wallet adapter\n * signers, and handles batch registration of multiple blobs.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useRegisterCommitments } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const registerCommitments = useRegisterCommitments({\n * client: shelbyClient,\n * onSuccess: ({ hash }) => console.log('Transaction hash:', hash),\n * });\n *\n * registerCommitments.mutate({\n * signer: accountSigner,\n * commitments: [\n * { blobName: 'file1.txt', commitment: blobCommitments[0] },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000, // 1 day\n * });\n * ```\n */\nexport function useRegisterCommitments({\n client,\n ...options\n}: UseRegisterCommitmentsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n commitments,\n expirationMicros,\n options,\n signer: signerOrFn,\n }) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n const { transaction } =\n await shelbyClient.coordination.batchRegisterBlobs({\n account: accountSigner,\n expirationMicros,\n options,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n })),\n });\n\n return transaction;\n }\n\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n if (!account) {\n throw new Error(\n \"'account' is required if using a wallet adapter signer with 'useRegisterCommitments'\",\n );\n }\n\n const accountAddress =\n typeof account === \"object\" && \"address\" in account\n ? account.address\n : account;\n\n const transaction = await signAndSubmitTransaction({\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(accountAddress),\n expirationMicros,\n blobs: commitments.map((commitment) => ({\n blobName: commitment.blobName,\n blobSize: commitment.commitment.raw_data_size,\n blobMerkleRoot: commitment.commitment.blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n commitment.commitment.raw_data_size,\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES,\n ),\n })),\n }),\n options: options?.build?.options,\n });\n\n return transaction;\n },\n ...options,\n });\n}\n","import { AccountAddress } from \"@aptos-labs/ts-sdk\";\nimport {\n createBlobKey,\n createDefaultErasureCodingProvider,\n DEFAULT_CHUNKSET_SIZE_BYTES,\n expectedTotalChunksets,\n generateCommitments,\n ShelbyBlobClient,\n type UploadOptions,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport pLimit from \"p-limit\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseMutationOptionsWithClient } from \"../types/mutations\";\nimport type { AccountSigner, Signer } from \"../types/signers\";\n\nexport type UseUploadBlobsVariables = {\n /**\n * The signer to use for the transaction.\n *\n * @see {@link Signer}\n *\n * @example\n * ```tsx\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\n signer: Signer;\n /**\n * The blobs to upload.\n */\n blobs: {\n blobName: string;\n blobData: Uint8Array;\n }[];\n /**\n * The expiration time of the blobs in microseconds.\n */\n expirationMicros: number;\n /**\n * Optional transaction building options.\n */\n options?: UploadOptions;\n /**\n * The maximum number of concurrent uploads.\n * @default 3\n */\n maxConcurrentUploads?: number;\n};\n\nexport type UseUploadBlobsOptions = UseMutationOptionsWithClient<\n void,\n Error,\n UseUploadBlobsVariables\n>;\n\n/**\n * Uploads blobs to the Shelby network.\n *\n * This mutation handles the complete blob upload process including:\n * - Encoding blobs with erasure coding\n * - Registering commitments on-chain (if not already registered)\n * - Uploading blob data to the RPC endpoint\n *\n * It supports both account signers and wallet adapter signers, and includes\n * logic to skip registration for blobs that already exist.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useUploadBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const uploadBlobs = useUploadBlobs({\n * client: shelbyClient,\n * onSuccess: () => console.log('Upload complete'),\n * });\n *\n * const signer = new Account.generate();\n * uploadBlobs.mutate({\n * signer,\n * blobs: [\n * { blobName: 'file1.txt', blobData: new Uint8Array([...]) },\n * ],\n * expirationMicros: Date.now() * 1000 + 86400000000,\n * });\n * ```\n */\nexport function useUploadBlobs({ client, ...options }: UseUploadBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useMutation({\n mutationFn: async ({\n blobs,\n expirationMicros,\n options,\n signer: signerOrFn,\n maxConcurrentUploads = 3,\n }: UseUploadBlobsVariables) => {\n if (!(\"signAndSubmitTransaction\" in signerOrFn)) {\n const accountSigner: AccountSigner = signerOrFn;\n\n await shelbyClient.batchUpload({\n blobs: blobs.map(({ blobData, blobName }) => ({\n blobData,\n blobName,\n })),\n expirationMicros,\n signer: accountSigner,\n options,\n });\n } else {\n const { account, signAndSubmitTransaction } = signerOrFn;\n\n if (!account) {\n throw new Error(\n \"'account' is required if using a wallet adapter signer with 'useUploadBlobs'\",\n );\n }\n\n const accountAddress =\n typeof account === \"object\" && \"address\" in account\n ? account.address\n : account;\n\n const chunksetSize =\n options?.chunksetSizeBytes ?? DEFAULT_CHUNKSET_SIZE_BYTES;\n\n const existingBlobs = await shelbyClient.coordination.getBlobs({\n where: {\n blob_name: {\n _in: blobs.map((blob) =>\n createBlobKey({\n account: accountAddress,\n blobName: blob.blobName,\n }),\n ),\n },\n },\n });\n\n const blobsToRegister = blobs.filter(\n (blob) =>\n !existingBlobs.some(\n (existingBlob) =>\n existingBlob.name ===\n createBlobKey({\n account: accountAddress,\n blobName: blob.blobName,\n }),\n ),\n );\n\n if (blobsToRegister.length > 0) {\n const provider = await createDefaultErasureCodingProvider();\n\n const blobCommitments = await Promise.all(\n blobsToRegister.map(async (blob) =>\n generateCommitments(provider, blob.blobData),\n ),\n );\n\n const pendingRegisterBlobTransaction = await signAndSubmitTransaction(\n {\n data: ShelbyBlobClient.createBatchRegisterBlobsPayload({\n account: AccountAddress.from(accountAddress),\n expirationMicros,\n blobs: blobsToRegister.map((blob, index) => ({\n blobName: blob.blobName,\n blobSize: blob.blobData.length,\n blobMerkleRoot: blobCommitments[index].blob_merkle_root,\n numChunksets: expectedTotalChunksets(\n blob.blobData.length,\n chunksetSize,\n ),\n })),\n }),\n options: options?.build?.options,\n },\n );\n\n await shelbyClient.coordination.aptos.waitForTransaction({\n transactionHash: pendingRegisterBlobTransaction.hash,\n });\n }\n\n const limit = pLimit(maxConcurrentUploads);\n const uploadPromises = blobs.map((blob) =>\n limit(() =>\n shelbyClient.rpc.putBlob({\n account: accountAddress,\n blobName: blob.blobName,\n blobData: blob.blobData,\n }),\n ),\n );\n\n await Promise.all(uploadPromises);\n }\n },\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseAccountBlobsQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0] & {\n network: Network;\n },\n) => [\n \"account-blobs\",\n params.network,\n params.account.toString(),\n params.pagination?.limit,\n params.pagination?.offset,\n params.orderBy,\n params.where,\n];\n\nexport type UseAccountBlobsOptions = UseQueryOptionsWithClient<BlobMetadata[]> &\n Parameters<ShelbyBlobClient[\"getAccountBlobs\"]>[0];\n\n/**\n * Queries blobs associated with an account.\n *\n * This query fetches blob metadata for a specific account with support for\n * pagination, filtering, and ordering.\n *\n * @example\n * ```tsx\n * import { ShelbyClient, Order_By} from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useAccountBlobs } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: blobs, isLoading } = useAccountBlobs({\n * client: shelbyClient,\n * account: '0x123...',\n * pagination: { limit: 10, offset: 0 },\n * orderBy: { updated_at: Order_By.Desc },\n * });\n * ```\n */\nexport function useAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n client,\n ...options\n}: UseAccountBlobsOptions) {\n const shelbyClient = useShelbyClient(client);\n return useQuery<BlobMetadata[]>({\n queryKey: getUseAccountBlobsQueryKey({\n network: shelbyClient.config.network,\n account,\n pagination,\n orderBy,\n where,\n }),\n queryFn: async () =>\n await shelbyClient.coordination.getAccountBlobs({\n account,\n pagination,\n orderBy,\n where,\n }),\n ...options,\n });\n}\n","import type { Network } from \"@aptos-labs/ts-sdk\";\nimport type {\n BlobMetadata,\n ShelbyBlobClient,\n} from \"@shelby-protocol/sdk/browser\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useShelbyClient } from \"../components/ShelbyClientProvider\";\nimport type { UseQueryOptionsWithClient } from \"../types/queries\";\n\nexport const getUseBlobMetadataQueryKey = (\n params: Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0] & {\n network: Network;\n },\n) => [\"blob-metadata\", params.network, params.account.toString(), params.name];\n\nexport type UseBlobMetadataOptions =\n UseQueryOptionsWithClient<BlobMetadata | null> &\n Parameters<ShelbyBlobClient[\"getBlobMetadata\"]>[0];\n\n/**\n * Queries the metadata for a specific blob.\n *\n * This query fetches the metadata for a single blob identified by account and blob name.\n * Returns `null` if the blob is not found.\n *\n * @example\n * ```tsx\n * import { ShelbyClient } from \"@shelby-protocol/sdk/browser\";\n * import { Network } from \"@aptos-labs/ts-sdk\";\n * import { useBlobMetadata } from \"@shelby-protocol/react\";\n *\n * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });\n * const { data: metadata } = useBlobMetadata({\n * client: shelbyClient,\n * account: '0x123...',\n * name: 'file1.txt',\n * });\n * ```\n */\nexport function useBlobMetadata({\n account,\n name,\n client,\n ...options\n}: UseBlobMetadataOptions) {\n const shelbyClient = useShelbyClient(client);\n return useQuery<BlobMetadata | null>({\n queryKey: getUseBlobMetadataQueryKey({\n network: shelbyClient.config.network,\n account,\n name,\n }),\n queryFn: async () =>\n (await shelbyClient.coordination.getBlobMetadata({ account, name })) ??\n null,\n ...options,\n });\n}\n"],"mappings":"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","names":["createContext","useContext","jsx","ShelbyClientContext","ShelbyClientProvider","children","client","useShelbyClient","contextClient","resolvedClient","useMutation","pLimit","useCommitBlobs","client","options","shelbyClient","useShelbyClient","useMutation","account","blobs","maxConcurrentUploads","limit","pLimit","uploadPromises","blob","ShelbyBlobClient","useMutation","useDeleteBlob","client","options","shelbyClient","useShelbyClient","useMutation","blobName","signerOrFn","accountSigner","transaction","signAndSubmitTransaction","ShelbyBlobClient","ShelbyBlobClient","useMutation","useDeleteBlobs","client","options","shelbyClient","useShelbyClient","useMutation","blobNames","signerOrFn","isSingleBlob","accountSigner","transaction","signAndSubmitTransaction","ShelbyBlobClient","createDefaultErasureCodingProvider","generateCommitments","useMutation","useEncodeBlobs","options","blobs","provider","onChunk","activeProvider","results","blobData","blobIndex","chunksetCount","blobCommitments","chunksetIndex","chunkIndex","chunkData","AccountAddress","DEFAULT_CHUNKSET_SIZE_BYTES","expectedTotalChunksets","ShelbyBlobClient","useMutation","useRegisterCommitments","client","options","shelbyClient","useShelbyClient","useMutation","commitments","expirationMicros","signerOrFn","accountSigner","transaction","commitment","account","signAndSubmitTransaction","accountAddress","ShelbyBlobClient","AccountAddress","expectedTotalChunksets","DEFAULT_CHUNKSET_SIZE_BYTES","AccountAddress","createBlobKey","createDefaultErasureCodingProvider","DEFAULT_CHUNKSET_SIZE_BYTES","expectedTotalChunksets","generateCommitments","ShelbyBlobClient","useMutation","pLimit","useUploadBlobs","client","options","shelbyClient","useShelbyClient","useMutation","blobs","expirationMicros","signerOrFn","maxConcurrentUploads","account","signAndSubmitTransaction","accountAddress","chunksetSize","DEFAULT_CHUNKSET_SIZE_BYTES","existingBlobs","blob","createBlobKey","blobsToRegister","existingBlob","provider","createDefaultErasureCodingProvider","blobCommitments","generateCommitments","pendingRegisterBlobTransaction","ShelbyBlobClient","AccountAddress","index","expectedTotalChunksets","limit","pLimit","uploadPromises","accountSigner","blobData","blobName","useQuery","getUseAccountBlobsQueryKey","params","useAccountBlobs","account","pagination","orderBy","where","client","options","shelbyClient","useShelbyClient","useQuery","useQuery","getUseBlobMetadataQueryKey","params","useBlobMetadata","account","name","client","options","shelbyClient","useShelbyClient","useQuery"]}
@@ -1,4 +1,6 @@
1
1
  export * from "./useCommitBlobs";
2
+ export * from "./useDeleteBlob";
3
+ export * from "./useDeleteBlobs";
2
4
  export * from "./useEncodeBlobs";
3
5
  export * from "./useRegisterCommitments";
4
6
  export * from "./useUploadBlobs";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mutations/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mutations/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
@@ -46,5 +46,5 @@ export type UseCommitBlobsOptions = UseMutationOptionsWithClient<void, Error, Us
46
46
  * });
47
47
  * ```
48
48
  */
49
- export declare function useCommitBlobs({ client: shelbyClient, ...options }: UseCommitBlobsOptions): import("@tanstack/react-query").UseMutationResult<void, Error, UseCommitBlobsVariables, readonly unknown[]>;
49
+ export declare function useCommitBlobs({ client, ...options }: UseCommitBlobsOptions): import("@tanstack/react-query").UseMutationResult<void, Error, UseCommitBlobsVariables, readonly unknown[]>;
50
50
  //# sourceMappingURL=useCommitBlobs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCommitBlobs.d.ts","sourceRoot":"","sources":["../../src/mutations/useCommitBlobs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,UAAU,CAAC;KACtB,EAAE,CAAC;IACJ;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,CAC9D,IAAI,EACJ,KAAK,EACL,uBAAuB,CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EAAE,YAAY,EACpB,GAAG,OAAO,EACX,EAAE,qBAAqB,+GAsBvB"}
1
+ {"version":3,"file":"useCommitBlobs.d.ts","sourceRoot":"","sources":["../../src/mutations/useCommitBlobs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAI9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,OAAO,EAAE,mBAAmB,CAAC;IAC7B;;OAEG;IACH,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,UAAU,CAAC;KACtB,EAAE,CAAC;IACJ;;;OAGG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,4BAA4B,CAC9D,IAAI,EACJ,KAAK,EACL,uBAAuB,CACxB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,qBAAqB,+GAuB3E"}
@@ -0,0 +1,60 @@
1
+ import type { InputGenerateTransactionOptions } from "@aptos-labs/ts-sdk";
2
+ import type { UseMutationOptionsWithClient } from "../types/mutations";
3
+ import type { Signer } from "../types/signers";
4
+ export type UseDeleteBlobVariables = {
5
+ /**
6
+ * The signer to use for the transaction.
7
+ *
8
+ * @see {@link Signer}
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const signer = new Account.generate();
13
+ * deleteBlob.mutate({
14
+ * signer,
15
+ * blobName: "folder/file.txt",
16
+ * });
17
+ * ```
18
+ */
19
+ signer: Signer;
20
+ /**
21
+ * The name/path of the blob (e.g. "folder/file.txt").
22
+ */
23
+ blobName: string;
24
+ /**
25
+ * Optional transaction building options.
26
+ */
27
+ options?: InputGenerateTransactionOptions;
28
+ };
29
+ export type UseDeleteBlobOptions = UseMutationOptionsWithClient<{
30
+ hash: string;
31
+ }, Error, UseDeleteBlobVariables>;
32
+ /**
33
+ * Deletes a blob on-chain.
34
+ *
35
+ * @deprecated Use {@link useDeleteBlobs} instead, which supports both single
36
+ * and multiple blob deletion with automatic gas optimization.
37
+ *
38
+ * This mutation deletes blob metadata from the Shelby contract. It supports
39
+ * both account signers and wallet adapter signers.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * import { ShelbyClient } from "@shelby-protocol/sdk/browser";
44
+ * import { Network } from "@aptos-labs/ts-sdk";
45
+ * import { useDeleteBlobs } from "@shelby-protocol/react";
46
+ *
47
+ * const shelbyClient = new ShelbyClient({ network: Network.SHELBYNET });
48
+ * const deleteBlobs = useDeleteBlobs({
49
+ * client: shelbyClient,
50
+ * onSuccess: ({ hash }) => console.log("Delete tx:", hash),
51
+ * });
52
+ *
53
+ * deleteBlobs.mutate({
54
+ * signer,
55
+ * blobNames: ["folder/file.txt"],
56
+ * });
57
+ * ```
58
+ */
59
+ export declare function useDeleteBlob({ client, ...options }: UseDeleteBlobOptions): import("@tanstack/react-query").UseMutationResult<import("@aptos-labs/wallet-adapter-react").AptosSignAndSubmitTransactionOutput, Error, UseDeleteBlobVariables, readonly unknown[]>;
60
+ //# sourceMappingURL=useDeleteBlob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDeleteBlob.d.ts","sourceRoot":"","sources":["../../src/mutations/useDeleteBlob.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;;;;;;;;;;OAaG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,4BAA4B,CAC7D;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAChB,KAAK,EACL,sBAAsB,CACvB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,oBAAoB,wLA0BzE"}