@meddleware/docs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/LICENSE +14 -0
- package/README.md +54 -0
- package/docs/.vitepress/config.ts +101 -0
- package/docs/.vitepress/theme/custom.css +51 -0
- package/docs/.vitepress/theme/index.ts +8 -0
- package/docs/access-gate/api/functions/buildAccessProof.md +38 -0
- package/docs/access-gate/api/functions/buildAirdropTx.md +21 -0
- package/docs/access-gate/api/functions/buildConsumeTx.md +27 -0
- package/docs/access-gate/api/functions/buildCreateGateTx.md +52 -0
- package/docs/access-gate/api/functions/buildMakeGateImmutableTx.md +19 -0
- package/docs/access-gate/api/functions/buildPurchaseTx.md +23 -0
- package/docs/access-gate/api/functions/buildSetAutoBurnAtZeroTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetDefaultUsesTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetNftDescriptionTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetNftImageUrlTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetNftNameTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetPausedTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetPaymentRecipientTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetPriceTx.md +21 -0
- package/docs/access-gate/api/functions/buildSetSoulboundTx.md +21 -0
- package/docs/access-gate/api/functions/decodeAccessProof.md +17 -0
- package/docs/access-gate/api/functions/encodeAccessProof.md +17 -0
- package/docs/access-gate/api/functions/fetchAccessNftById.md +27 -0
- package/docs/access-gate/api/functions/fetchAccessNfts.md +34 -0
- package/docs/access-gate/api/functions/fetchAdminCaps.md +30 -0
- package/docs/access-gate/api/functions/fetchChallenge.md +32 -0
- package/docs/access-gate/api/functions/fetchGate.md +26 -0
- package/docs/access-gate/api/functions/fetchOwnedGates.md +31 -0
- package/docs/access-gate/api/functions/ownsAccessNft.md +35 -0
- package/docs/access-gate/api/functions/parseAdminCap.md +26 -0
- package/docs/access-gate/api/functions/parseGate.md +19 -0
- package/docs/access-gate/api/functions/parseOwnedAccessNft.md +19 -0
- package/docs/access-gate/api/functions/personalMessageForNonce.md +18 -0
- package/docs/access-gate/api/index.md +47 -0
- package/docs/access-gate/api/interfaces/AccessGateConfig.md +57 -0
- package/docs/access-gate/api/interfaces/AccessProof.md +46 -0
- package/docs/access-gate/api/interfaces/Challenge.md +25 -0
- package/docs/access-gate/api/interfaces/GateAdminContext.md +37 -0
- package/docs/access-gate/api/interfaces/OwnedAccessNft.md +31 -0
- package/docs/access-gate/api/interfaces/OwnedGate.md +125 -0
- package/docs/access-gate/api/interfaces/OwnedObjectsClient.md +49 -0
- package/docs/access-gate/api/interfaces/SuiObjectClient.md +37 -0
- package/docs/access-gate/api/type-aliases/PersonalMessageSigner.md +17 -0
- package/docs/access-gate/api/typedoc-sidebar.json +1 -0
- package/docs/access-gate/index.md +61 -0
- package/docs/access-gate/reference.md +111 -0
- package/docs/access-gate/using.md +68 -0
- package/docs/architecture.md +61 -0
- package/docs/dao/index.md +71 -0
- package/docs/dao/reference.md +94 -0
- package/docs/getting-started.md +59 -0
- package/docs/index.md +58 -0
- package/docs/sealed-storage/api/classes/PolicyRegistry.md +103 -0
- package/docs/sealed-storage/api/classes/SealController.md +113 -0
- package/docs/sealed-storage/api/functions/buildPublishSealedContentTx.md +27 -0
- package/docs/sealed-storage/api/functions/bytesToHex.md +17 -0
- package/docs/sealed-storage/api/functions/concatBytes.md +17 -0
- package/docs/sealed-storage/api/functions/createDefaultRegistry.md +22 -0
- package/docs/sealed-storage/api/functions/createNftGateProvider.md +21 -0
- package/docs/sealed-storage/api/functions/hexToBytes.md +17 -0
- package/docs/sealed-storage/api/functions/objectIdBytes.md +17 -0
- package/docs/sealed-storage/api/functions/randomBytes.md +17 -0
- package/docs/sealed-storage/api/functions/sealedContentEventType.md +17 -0
- package/docs/sealed-storage/api/functions/u64beBytes.md +17 -0
- package/docs/sealed-storage/api/index.md +45 -0
- package/docs/sealed-storage/api/interfaces/EncryptResult.md +23 -0
- package/docs/sealed-storage/api/interfaces/FieldSpec.md +51 -0
- package/docs/sealed-storage/api/interfaces/FieldSuggestion.md +21 -0
- package/docs/sealed-storage/api/interfaces/KeyServerConfig.md +35 -0
- package/docs/sealed-storage/api/interfaces/NftGateParams.md +33 -0
- package/docs/sealed-storage/api/interfaces/PolicyDescriptor.md +49 -0
- package/docs/sealed-storage/api/interfaces/SealControllerConfig.md +63 -0
- package/docs/sealed-storage/api/interfaces/SealPolicyProvider.md +115 -0
- package/docs/sealed-storage/api/interfaces/SealSuggestClient.md +74 -0
- package/docs/sealed-storage/api/interfaces/SealedContentInput.md +45 -0
- package/docs/sealed-storage/api/interfaces/SealedContentPointer.md +53 -0
- package/docs/sealed-storage/api/interfaces/SealedManifest.md +65 -0
- package/docs/sealed-storage/api/interfaces/SuggestContext.md +25 -0
- package/docs/sealed-storage/api/interfaces/TimeLockParams.md +13 -0
- package/docs/sealed-storage/api/type-aliases/SignPersonalMessage.md +17 -0
- package/docs/sealed-storage/api/typedoc-sidebar.json +1 -0
- package/docs/sealed-storage/api/variables/nftGateProvider.md +9 -0
- package/docs/sealed-storage/api/variables/timeLockProvider.md +9 -0
- package/docs/sealed-storage/index.md +68 -0
- package/docs/sealed-storage/policies.md +52 -0
- package/docs/sealed-storage/reference.md +79 -0
- package/docs/sealed-storage/using.md +55 -0
- package/docs/walrus-storage/api/classes/RetryableWalrusClientError.md +101 -0
- package/docs/walrus-storage/api/classes/WalrusFile.md +111 -0
- package/docs/walrus-storage/api/functions/buildAccessProofToken.md +21 -0
- package/docs/walrus-storage/api/functions/certifyBlobTransaction.md +30 -0
- package/docs/walrus-storage/api/functions/createBlobUploadFlow.md +30 -0
- package/docs/walrus-storage/api/functions/createRelayAccessToken.md +45 -0
- package/docs/walrus-storage/api/functions/createUploadFlow.md +30 -0
- package/docs/walrus-storage/api/functions/createWalrusClient.md +23 -0
- package/docs/walrus-storage/api/functions/estimateStorageCost.md +35 -0
- package/docs/walrus-storage/api/functions/extendBlobLifetime.md +40 -0
- package/docs/walrus-storage/api/functions/extendBlobLifetimeTransaction.md +34 -0
- package/docs/walrus-storage/api/functions/fetchOwnedWalrusBlobs.md +34 -0
- package/docs/walrus-storage/api/functions/fetchRelayChallenge.md +32 -0
- package/docs/walrus-storage/api/functions/getWalrusPackageConfig.md +25 -0
- package/docs/walrus-storage/api/functions/personalMessageForNonce.md +18 -0
- package/docs/walrus-storage/api/functions/readBlobAttributes.md +27 -0
- package/docs/walrus-storage/api/functions/setBlobAttributes.md +40 -0
- package/docs/walrus-storage/api/functions/setBlobAttributesTransaction.md +34 -0
- package/docs/walrus-storage/api/functions/uploadBytes.md +38 -0
- package/docs/walrus-storage/api/functions/uploadImageBytes.md +34 -0
- package/docs/walrus-storage/api/functions/uploadLocalFile.md +37 -0
- package/docs/walrus-storage/api/functions/walrusBlobUrl.md +26 -0
- package/docs/walrus-storage/api/index.md +56 -0
- package/docs/walrus-storage/api/interfaces/CertifyOptions.md +46 -0
- package/docs/walrus-storage/api/interfaces/StorageCost.md +35 -0
- package/docs/walrus-storage/api/type-aliases/AccessProofInput.md +7 -0
- package/docs/walrus-storage/api/type-aliases/CreateWalrusClientOptions.md +113 -0
- package/docs/walrus-storage/api/type-aliases/ExtendOptions.md +8 -0
- package/docs/walrus-storage/api/type-aliases/OwnedBlob.md +57 -0
- package/docs/walrus-storage/api/type-aliases/PersonalMessageSigner.md +17 -0
- package/docs/walrus-storage/api/type-aliases/RelayChallenge.md +7 -0
- package/docs/walrus-storage/api/type-aliases/UploadOptions.md +37 -0
- package/docs/walrus-storage/api/type-aliases/UploadResult.md +27 -0
- package/docs/walrus-storage/api/type-aliases/WalrusClient.md +7 -0
- package/docs/walrus-storage/api/type-aliases/WalrusNetwork.md +7 -0
- package/docs/walrus-storage/api/typedoc-sidebar.json +1 -0
- package/docs/walrus-storage/api/variables/DEFAULT_RPC_URLS.md +7 -0
- package/docs/walrus-storage/api/variables/LONG_TERM_EPOCHS.md +12 -0
- package/docs/walrus-storage/api/variables/MAINNET_WALRUS_PACKAGE_CONFIG.md +15 -0
- package/docs/walrus-storage/api/variables/PUBLIC_UPLOAD_RELAY_HOSTS.md +10 -0
- package/docs/walrus-storage/api/variables/TESTNET_WALRUS_PACKAGE_CONFIG.md +19 -0
- package/docs/walrus-storage/api/variables/WALRUS_AGGREGATOR_HOSTS.md +7 -0
- package/docs/walrus-storage/index.md +54 -0
- package/docs/walrus-storage/reference.md +69 -0
- package/docs/walrus-storage/using.md +53 -0
- package/package.json +50 -0
- package/scripts/gen-api.mjs +107 -0
- package/tsconfig.json +13 -0
- package/tsconfig.typedoc.json +20 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Interface: PolicyDescriptor
|
|
2
|
+
|
|
3
|
+
Defined in: types.ts:54
|
|
4
|
+
|
|
5
|
+
UI-facing description of a policy: label + which fields encrypt vs decrypt need.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
### decryptFields
|
|
10
|
+
|
|
11
|
+
> **decryptFields**: [`FieldSpec`](FieldSpec.md)[]
|
|
12
|
+
|
|
13
|
+
Defined in: types.ts:61
|
|
14
|
+
|
|
15
|
+
Fields required to DECRYPT (feed `buildApprove`), in addition to the stored identity.
|
|
16
|
+
|
|
17
|
+
***
|
|
18
|
+
|
|
19
|
+
### encryptFields
|
|
20
|
+
|
|
21
|
+
> **encryptFields**: [`FieldSpec`](FieldSpec.md)[]
|
|
22
|
+
|
|
23
|
+
Defined in: types.ts:59
|
|
24
|
+
|
|
25
|
+
Fields required to ENCRYPT under this policy (feed `buildId`).
|
|
26
|
+
|
|
27
|
+
***
|
|
28
|
+
|
|
29
|
+
### help
|
|
30
|
+
|
|
31
|
+
> **help**: `string`
|
|
32
|
+
|
|
33
|
+
Defined in: types.ts:57
|
|
34
|
+
|
|
35
|
+
***
|
|
36
|
+
|
|
37
|
+
### label
|
|
38
|
+
|
|
39
|
+
> **label**: `string`
|
|
40
|
+
|
|
41
|
+
Defined in: types.ts:56
|
|
42
|
+
|
|
43
|
+
***
|
|
44
|
+
|
|
45
|
+
### type
|
|
46
|
+
|
|
47
|
+
> **type**: `string`
|
|
48
|
+
|
|
49
|
+
Defined in: types.ts:55
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Interface: SealControllerConfig
|
|
2
|
+
|
|
3
|
+
Defined in: controller.ts:17
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
### packageId
|
|
8
|
+
|
|
9
|
+
> **packageId**: `string`
|
|
10
|
+
|
|
11
|
+
Defined in: controller.ts:21
|
|
12
|
+
|
|
13
|
+
Published `seal_policies` package id (feeds encrypt, SessionKey, and the approve PTB).
|
|
14
|
+
|
|
15
|
+
***
|
|
16
|
+
|
|
17
|
+
### serverConfigs
|
|
18
|
+
|
|
19
|
+
> **serverConfigs**: [`KeyServerConfig`](KeyServerConfig.md)[]
|
|
20
|
+
|
|
21
|
+
Defined in: controller.ts:23
|
|
22
|
+
|
|
23
|
+
Committee of key servers: encryption targets all; decryption needs `threshold` of them.
|
|
24
|
+
|
|
25
|
+
***
|
|
26
|
+
|
|
27
|
+
### sessionTtlMin?
|
|
28
|
+
|
|
29
|
+
> `optional` **sessionTtlMin?**: `number`
|
|
30
|
+
|
|
31
|
+
Defined in: controller.ts:27
|
|
32
|
+
|
|
33
|
+
SessionKey time-to-live in minutes (default 10).
|
|
34
|
+
|
|
35
|
+
***
|
|
36
|
+
|
|
37
|
+
### suiClient
|
|
38
|
+
|
|
39
|
+
> **suiClient**: `SealCompatibleClient`
|
|
40
|
+
|
|
41
|
+
Defined in: controller.ts:19
|
|
42
|
+
|
|
43
|
+
A Sui client exposing the core API (e.g. `SuiGrpcClient` from `@mysten/sui/grpc`).
|
|
44
|
+
|
|
45
|
+
***
|
|
46
|
+
|
|
47
|
+
### threshold
|
|
48
|
+
|
|
49
|
+
> **threshold**: `number`
|
|
50
|
+
|
|
51
|
+
Defined in: controller.ts:25
|
|
52
|
+
|
|
53
|
+
`t` in t-of-n. With a 3-server committee, 2 tolerates any one server being offline.
|
|
54
|
+
|
|
55
|
+
***
|
|
56
|
+
|
|
57
|
+
### verifyKeyServers?
|
|
58
|
+
|
|
59
|
+
> `optional` **verifyKeyServers?**: `boolean`
|
|
60
|
+
|
|
61
|
+
Defined in: controller.ts:29
|
|
62
|
+
|
|
63
|
+
Verify key server object ids on-chain (default false; committee mode is testnet-only).
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Interface: SealPolicyProvider\<P\>
|
|
2
|
+
|
|
3
|
+
Defined in: types.ts:69
|
|
4
|
+
|
|
5
|
+
A Seal access policy, mirrored 1:1 with a `seal_policies` Move module. Providers are peers —
|
|
6
|
+
none is privileged. Adding a policy type is a new provider here + a new Move module; existing
|
|
7
|
+
code is untouched.
|
|
8
|
+
|
|
9
|
+
## Type Parameters
|
|
10
|
+
|
|
11
|
+
### P
|
|
12
|
+
|
|
13
|
+
`P` = `Record`\<`string`, `unknown`\>
|
|
14
|
+
|
|
15
|
+
## Properties
|
|
16
|
+
|
|
17
|
+
### type
|
|
18
|
+
|
|
19
|
+
> `readonly` **type**: `string`
|
|
20
|
+
|
|
21
|
+
Defined in: types.ts:71
|
|
22
|
+
|
|
23
|
+
Stable machine id, e.g. 'nft-gate' | 'time-lock'.
|
|
24
|
+
|
|
25
|
+
## Methods
|
|
26
|
+
|
|
27
|
+
### buildApprove()
|
|
28
|
+
|
|
29
|
+
> **buildApprove**(`tx`, `packageId`, `idBytes`, `params`): `void`
|
|
30
|
+
|
|
31
|
+
Defined in: types.ts:84
|
|
32
|
+
|
|
33
|
+
Append the `seal_approve*` move call (target + the identity as the first arg + policy
|
|
34
|
+
objects) to `tx`. Called at decrypt time to produce the PTB the key servers dry-run.
|
|
35
|
+
|
|
36
|
+
#### Parameters
|
|
37
|
+
|
|
38
|
+
##### tx
|
|
39
|
+
|
|
40
|
+
`Transaction`
|
|
41
|
+
|
|
42
|
+
##### packageId
|
|
43
|
+
|
|
44
|
+
`string`
|
|
45
|
+
|
|
46
|
+
##### idBytes
|
|
47
|
+
|
|
48
|
+
`Uint8Array`
|
|
49
|
+
|
|
50
|
+
##### params
|
|
51
|
+
|
|
52
|
+
`P`
|
|
53
|
+
|
|
54
|
+
#### Returns
|
|
55
|
+
|
|
56
|
+
`void`
|
|
57
|
+
|
|
58
|
+
***
|
|
59
|
+
|
|
60
|
+
### buildId()
|
|
61
|
+
|
|
62
|
+
> **buildId**(`params`): `Uint8Array`
|
|
63
|
+
|
|
64
|
+
Defined in: types.ts:78
|
|
65
|
+
|
|
66
|
+
Build the Seal identity bytes for a new ciphertext (namespace prefix + a random nonce).
|
|
67
|
+
Called once at encrypt time; the result is persisted in the manifest and reused verbatim
|
|
68
|
+
to decrypt.
|
|
69
|
+
|
|
70
|
+
#### Parameters
|
|
71
|
+
|
|
72
|
+
##### params
|
|
73
|
+
|
|
74
|
+
`P`
|
|
75
|
+
|
|
76
|
+
#### Returns
|
|
77
|
+
|
|
78
|
+
`Uint8Array`
|
|
79
|
+
|
|
80
|
+
***
|
|
81
|
+
|
|
82
|
+
### describe()
|
|
83
|
+
|
|
84
|
+
> **describe**(): [`PolicyDescriptor`](PolicyDescriptor.md)
|
|
85
|
+
|
|
86
|
+
Defined in: types.ts:87
|
|
87
|
+
|
|
88
|
+
Form/rendering metadata (drives a generic, registry-driven UI).
|
|
89
|
+
|
|
90
|
+
#### Returns
|
|
91
|
+
|
|
92
|
+
[`PolicyDescriptor`](PolicyDescriptor.md)
|
|
93
|
+
|
|
94
|
+
***
|
|
95
|
+
|
|
96
|
+
### suggest()?
|
|
97
|
+
|
|
98
|
+
> `optional` **suggest**(`context`): `Promise`\<`Partial`\<`Record`\<`string`, [`FieldSuggestion`](FieldSuggestion.md)[]\>\>\>
|
|
99
|
+
|
|
100
|
+
Defined in: types.ts:95
|
|
101
|
+
|
|
102
|
+
Optional: suggest values for form fields by querying chain state (e.g. objects owned by the
|
|
103
|
+
connected wallet). Returns a map of `fieldName → suggestions[]`. Only fields with non-empty
|
|
104
|
+
suggestion arrays need be included. The UI renders a picker for those fields and falls back
|
|
105
|
+
to a plain text input when no suggestions are available or the user opts out.
|
|
106
|
+
|
|
107
|
+
#### Parameters
|
|
108
|
+
|
|
109
|
+
##### context
|
|
110
|
+
|
|
111
|
+
[`SuggestContext`](SuggestContext.md)
|
|
112
|
+
|
|
113
|
+
#### Returns
|
|
114
|
+
|
|
115
|
+
`Promise`\<`Partial`\<`Record`\<`string`, [`FieldSuggestion`](FieldSuggestion.md)[]\>\>\>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Interface: SealSuggestClient
|
|
2
|
+
|
|
3
|
+
Defined in: types.ts:13
|
|
4
|
+
|
|
5
|
+
Minimal structural subset of a Sui gRPC core client needed by `suggest`.
|
|
6
|
+
Compatible with `SuiGrpcClient.core` from `@mysten/sui/grpc` without importing it directly.
|
|
7
|
+
|
|
8
|
+
## Properties
|
|
9
|
+
|
|
10
|
+
### core
|
|
11
|
+
|
|
12
|
+
> **core**: `object`
|
|
13
|
+
|
|
14
|
+
Defined in: types.ts:14
|
|
15
|
+
|
|
16
|
+
#### getObject()
|
|
17
|
+
|
|
18
|
+
> **getObject**(`options`): `Promise`\<\{ `object`: \{ `json?`: `Record`\<`string`, `unknown`\>; `objectId`: `string`; `type?`: `string`; \}; \}\>
|
|
19
|
+
|
|
20
|
+
##### Parameters
|
|
21
|
+
|
|
22
|
+
###### options
|
|
23
|
+
|
|
24
|
+
###### include?
|
|
25
|
+
|
|
26
|
+
\{ `json?`: `boolean`; \}
|
|
27
|
+
|
|
28
|
+
###### include.json?
|
|
29
|
+
|
|
30
|
+
`boolean`
|
|
31
|
+
|
|
32
|
+
###### objectId
|
|
33
|
+
|
|
34
|
+
`string`
|
|
35
|
+
|
|
36
|
+
##### Returns
|
|
37
|
+
|
|
38
|
+
`Promise`\<\{ `object`: \{ `json?`: `Record`\<`string`, `unknown`\>; `objectId`: `string`; `type?`: `string`; \}; \}\>
|
|
39
|
+
|
|
40
|
+
#### listOwnedObjects()
|
|
41
|
+
|
|
42
|
+
> **listOwnedObjects**(`options`): `Promise`\<\{ `cursor`: `string`; `hasNextPage`: `boolean`; `objects`: `object`[]; \}\>
|
|
43
|
+
|
|
44
|
+
##### Parameters
|
|
45
|
+
|
|
46
|
+
###### options
|
|
47
|
+
|
|
48
|
+
###### cursor?
|
|
49
|
+
|
|
50
|
+
`string`
|
|
51
|
+
|
|
52
|
+
###### include?
|
|
53
|
+
|
|
54
|
+
\{ `json?`: `boolean`; \}
|
|
55
|
+
|
|
56
|
+
###### include.json?
|
|
57
|
+
|
|
58
|
+
`boolean`
|
|
59
|
+
|
|
60
|
+
###### limit?
|
|
61
|
+
|
|
62
|
+
`number`
|
|
63
|
+
|
|
64
|
+
###### owner
|
|
65
|
+
|
|
66
|
+
`string`
|
|
67
|
+
|
|
68
|
+
###### type?
|
|
69
|
+
|
|
70
|
+
`string`
|
|
71
|
+
|
|
72
|
+
##### Returns
|
|
73
|
+
|
|
74
|
+
`Promise`\<\{ `cursor`: `string`; `hasNextPage`: `boolean`; `objects`: `object`[]; \}\>
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Interface: SealedContentInput
|
|
2
|
+
|
|
3
|
+
Defined in: sealed-content.ts:4
|
|
4
|
+
|
|
5
|
+
Fields needed to publish an on-chain pointer binding sealed content to a gate.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
### blobId
|
|
10
|
+
|
|
11
|
+
> **blobId**: `string`
|
|
12
|
+
|
|
13
|
+
Defined in: sealed-content.ts:8
|
|
14
|
+
|
|
15
|
+
Walrus blob id of the ciphertext.
|
|
16
|
+
|
|
17
|
+
***
|
|
18
|
+
|
|
19
|
+
### gateId
|
|
20
|
+
|
|
21
|
+
> **gateId**: `string`
|
|
22
|
+
|
|
23
|
+
Defined in: sealed-content.ts:6
|
|
24
|
+
|
|
25
|
+
The access gate object id the content is sealed to.
|
|
26
|
+
|
|
27
|
+
***
|
|
28
|
+
|
|
29
|
+
### label
|
|
30
|
+
|
|
31
|
+
> **label**: `string`
|
|
32
|
+
|
|
33
|
+
Defined in: sealed-content.ts:12
|
|
34
|
+
|
|
35
|
+
Human-readable label shown in unlock UIs.
|
|
36
|
+
|
|
37
|
+
***
|
|
38
|
+
|
|
39
|
+
### sealId
|
|
40
|
+
|
|
41
|
+
> **sealId**: `string`
|
|
42
|
+
|
|
43
|
+
Defined in: sealed-content.ts:10
|
|
44
|
+
|
|
45
|
+
Seal identity (hex) the content was encrypted under.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Interface: SealedContentPointer
|
|
2
|
+
|
|
3
|
+
Defined in: sealed-content.ts:37
|
|
4
|
+
|
|
5
|
+
A discovered on-chain pointer to gate-unlockable sealed content.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
### blobId
|
|
10
|
+
|
|
11
|
+
> **blobId**: `string`
|
|
12
|
+
|
|
13
|
+
Defined in: sealed-content.ts:40
|
|
14
|
+
|
|
15
|
+
***
|
|
16
|
+
|
|
17
|
+
### contentId
|
|
18
|
+
|
|
19
|
+
> **contentId**: `string`
|
|
20
|
+
|
|
21
|
+
Defined in: sealed-content.ts:38
|
|
22
|
+
|
|
23
|
+
***
|
|
24
|
+
|
|
25
|
+
### gateId
|
|
26
|
+
|
|
27
|
+
> **gateId**: `string`
|
|
28
|
+
|
|
29
|
+
Defined in: sealed-content.ts:39
|
|
30
|
+
|
|
31
|
+
***
|
|
32
|
+
|
|
33
|
+
### label
|
|
34
|
+
|
|
35
|
+
> **label**: `string`
|
|
36
|
+
|
|
37
|
+
Defined in: sealed-content.ts:42
|
|
38
|
+
|
|
39
|
+
***
|
|
40
|
+
|
|
41
|
+
### publisher
|
|
42
|
+
|
|
43
|
+
> **publisher**: `string`
|
|
44
|
+
|
|
45
|
+
Defined in: sealed-content.ts:43
|
|
46
|
+
|
|
47
|
+
***
|
|
48
|
+
|
|
49
|
+
### sealId
|
|
50
|
+
|
|
51
|
+
> **sealId**: `string`
|
|
52
|
+
|
|
53
|
+
Defined in: sealed-content.ts:41
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Interface: SealedManifest
|
|
2
|
+
|
|
3
|
+
Defined in: types.ts:99
|
|
4
|
+
|
|
5
|
+
Portable pointer to one sealed blob — the interchange format between encrypt and decrypt.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
### blobId
|
|
10
|
+
|
|
11
|
+
> **blobId**: `string`
|
|
12
|
+
|
|
13
|
+
Defined in: types.ts:105
|
|
14
|
+
|
|
15
|
+
Storage pointer to the ciphertext (e.g. a Walrus blob id).
|
|
16
|
+
|
|
17
|
+
***
|
|
18
|
+
|
|
19
|
+
### id
|
|
20
|
+
|
|
21
|
+
> **id**: `string`
|
|
22
|
+
|
|
23
|
+
Defined in: types.ts:103
|
|
24
|
+
|
|
25
|
+
Seal identity (hex, no 0x) produced by `buildId` — required to decrypt.
|
|
26
|
+
|
|
27
|
+
***
|
|
28
|
+
|
|
29
|
+
### label?
|
|
30
|
+
|
|
31
|
+
> `optional` **label?**: `string`
|
|
32
|
+
|
|
33
|
+
Defined in: types.ts:111
|
|
34
|
+
|
|
35
|
+
Optional human label.
|
|
36
|
+
|
|
37
|
+
***
|
|
38
|
+
|
|
39
|
+
### network
|
|
40
|
+
|
|
41
|
+
> **network**: `string`
|
|
42
|
+
|
|
43
|
+
Defined in: types.ts:107
|
|
44
|
+
|
|
45
|
+
Network the policy package + key servers live on.
|
|
46
|
+
|
|
47
|
+
***
|
|
48
|
+
|
|
49
|
+
### params?
|
|
50
|
+
|
|
51
|
+
> `optional` **params?**: `Record`\<`string`, `unknown`\>
|
|
52
|
+
|
|
53
|
+
Defined in: types.ts:109
|
|
54
|
+
|
|
55
|
+
Non-secret policy params needed to rebuild the approve PTB (e.g. gateId).
|
|
56
|
+
|
|
57
|
+
***
|
|
58
|
+
|
|
59
|
+
### policyType
|
|
60
|
+
|
|
61
|
+
> **policyType**: `string`
|
|
62
|
+
|
|
63
|
+
Defined in: types.ts:101
|
|
64
|
+
|
|
65
|
+
Policy `type` used to seal this content.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Interface: SuggestContext
|
|
2
|
+
|
|
3
|
+
Defined in: types.ts:34
|
|
4
|
+
|
|
5
|
+
Context passed to a provider's `suggest` method.
|
|
6
|
+
|
|
7
|
+
## Properties
|
|
8
|
+
|
|
9
|
+
### account
|
|
10
|
+
|
|
11
|
+
> **account**: `string`
|
|
12
|
+
|
|
13
|
+
Defined in: types.ts:36
|
|
14
|
+
|
|
15
|
+
The connected wallet address.
|
|
16
|
+
|
|
17
|
+
***
|
|
18
|
+
|
|
19
|
+
### client
|
|
20
|
+
|
|
21
|
+
> **client**: [`SealSuggestClient`](SealSuggestClient.md)
|
|
22
|
+
|
|
23
|
+
Defined in: types.ts:38
|
|
24
|
+
|
|
25
|
+
Sui gRPC client (structural — any compatible client is accepted).
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Interface: TimeLockParams
|
|
2
|
+
|
|
3
|
+
Defined in: providers/timelock.ts:4
|
|
4
|
+
|
|
5
|
+
## Properties
|
|
6
|
+
|
|
7
|
+
### unlockMs?
|
|
8
|
+
|
|
9
|
+
> `optional` **unlockMs?**: `number`
|
|
10
|
+
|
|
11
|
+
Defined in: providers/timelock.ts:6
|
|
12
|
+
|
|
13
|
+
Unlock time in epoch milliseconds. Needed to encrypt; not needed to decrypt.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Type Alias: SignPersonalMessage
|
|
2
|
+
|
|
3
|
+
> **SignPersonalMessage** = (`message`) => `Promise`\<\{ `signature`: `string`; \}\>
|
|
4
|
+
|
|
5
|
+
Defined in: controller.ts:33
|
|
6
|
+
|
|
7
|
+
Wallet hook: sign a personal message, returning the signature (base64).
|
|
8
|
+
|
|
9
|
+
## Parameters
|
|
10
|
+
|
|
11
|
+
### message
|
|
12
|
+
|
|
13
|
+
`Uint8Array`
|
|
14
|
+
|
|
15
|
+
## Returns
|
|
16
|
+
|
|
17
|
+
`Promise`\<\{ `signature`: `string`; \}\>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"text":"Classes","collapsed":true,"items":[{"text":"PolicyRegistry","link":"/docs/sealed-storage/api/classes/PolicyRegistry.md"},{"text":"SealController","link":"/docs/sealed-storage/api/classes/SealController.md"}]},{"text":"Interfaces","collapsed":true,"items":[{"text":"EncryptResult","link":"/docs/sealed-storage/api/interfaces/EncryptResult.md"},{"text":"FieldSpec","link":"/docs/sealed-storage/api/interfaces/FieldSpec.md"},{"text":"FieldSuggestion","link":"/docs/sealed-storage/api/interfaces/FieldSuggestion.md"},{"text":"KeyServerConfig","link":"/docs/sealed-storage/api/interfaces/KeyServerConfig.md"},{"text":"NftGateParams","link":"/docs/sealed-storage/api/interfaces/NftGateParams.md"},{"text":"PolicyDescriptor","link":"/docs/sealed-storage/api/interfaces/PolicyDescriptor.md"},{"text":"SealControllerConfig","link":"/docs/sealed-storage/api/interfaces/SealControllerConfig.md"},{"text":"SealedContentInput","link":"/docs/sealed-storage/api/interfaces/SealedContentInput.md"},{"text":"SealedContentPointer","link":"/docs/sealed-storage/api/interfaces/SealedContentPointer.md"},{"text":"SealedManifest","link":"/docs/sealed-storage/api/interfaces/SealedManifest.md"},{"text":"SealPolicyProvider","link":"/docs/sealed-storage/api/interfaces/SealPolicyProvider.md"},{"text":"SealSuggestClient","link":"/docs/sealed-storage/api/interfaces/SealSuggestClient.md"},{"text":"SuggestContext","link":"/docs/sealed-storage/api/interfaces/SuggestContext.md"},{"text":"TimeLockParams","link":"/docs/sealed-storage/api/interfaces/TimeLockParams.md"}]},{"text":"Type Aliases","collapsed":true,"items":[{"text":"SignPersonalMessage","link":"/docs/sealed-storage/api/type-aliases/SignPersonalMessage.md"}]},{"text":"Variables","collapsed":true,"items":[{"text":"nftGateProvider","link":"/docs/sealed-storage/api/variables/nftGateProvider.md"},{"text":"timeLockProvider","link":"/docs/sealed-storage/api/variables/timeLockProvider.md"}]},{"text":"Functions","collapsed":true,"items":[{"text":"buildPublishSealedContentTx","link":"/docs/sealed-storage/api/functions/buildPublishSealedContentTx.md"},{"text":"bytesToHex","link":"/docs/sealed-storage/api/functions/bytesToHex.md"},{"text":"concatBytes","link":"/docs/sealed-storage/api/functions/concatBytes.md"},{"text":"createDefaultRegistry","link":"/docs/sealed-storage/api/functions/createDefaultRegistry.md"},{"text":"createNftGateProvider","link":"/docs/sealed-storage/api/functions/createNftGateProvider.md"},{"text":"hexToBytes","link":"/docs/sealed-storage/api/functions/hexToBytes.md"},{"text":"objectIdBytes","link":"/docs/sealed-storage/api/functions/objectIdBytes.md"},{"text":"randomBytes","link":"/docs/sealed-storage/api/functions/randomBytes.md"},{"text":"sealedContentEventType","link":"/docs/sealed-storage/api/functions/sealedContentEventType.md"},{"text":"u64beBytes","link":"/docs/sealed-storage/api/functions/u64beBytes.md"}]}]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# ~~Variable: nftGateProvider~~
|
|
2
|
+
|
|
3
|
+
> `const` **nftGateProvider**: [`SealPolicyProvider`](../interfaces/SealPolicyProvider.md)\<[`NftGateParams`](../interfaces/NftGateParams.md)\>
|
|
4
|
+
|
|
5
|
+
Defined in: providers/nft-gate.ts:110
|
|
6
|
+
|
|
7
|
+
## Deprecated
|
|
8
|
+
|
|
9
|
+
Use `createNftGateProvider(packageId)` — this zero-package-id fallback has no suggest capability.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Variable: timeLockProvider
|
|
2
|
+
|
|
3
|
+
> `const` **timeLockProvider**: [`SealPolicyProvider`](../interfaces/SealPolicyProvider.md)\<[`TimeLockParams`](../interfaces/TimeLockParams.md)\>
|
|
4
|
+
|
|
5
|
+
Defined in: providers/timelock.ts:19
|
|
6
|
+
|
|
7
|
+
Time-lock encryption: decryptable by anyone once the on-chain Clock passes the unlock time.
|
|
8
|
+
Mirrors `seal_policies::timelock`. Identity layout: `[8-byte BE unlock_ms][8-byte nonce]`.
|
|
9
|
+
Deliberately shares nothing with `nft-gate` — different fields, different args.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Sealed Storage
|
|
2
|
+
|
|
3
|
+
Encrypt a file in your browser, store the ciphertext on [Walrus](/walrus-storage/), and let only the
|
|
4
|
+
right people decrypt it — with the access rule enforced **on-chain**. Open the app at
|
|
5
|
+
[sui-seal.meddleware.co.uk](https://sui-seal.meddleware.co.uk).
|
|
6
|
+
|
|
7
|
+
## What it is
|
|
8
|
+
|
|
9
|
+
Sealed Storage combines three things:
|
|
10
|
+
|
|
11
|
+
- **[Seal](https://seal-docs.wal.app/)** — threshold encryption where the decryption keys are held by
|
|
12
|
+
a committee of independent **key servers**, not by any single party (or by Meddleware).
|
|
13
|
+
- **[Walrus](/walrus-storage/)** — decentralised storage for the encrypted bytes.
|
|
14
|
+
- A **policy** — an on-chain rule that decides who is allowed to decrypt.
|
|
15
|
+
|
|
16
|
+
You encrypt under a policy, share a small **manifest** (a pointer), and anyone who satisfies the
|
|
17
|
+
policy can decrypt. Nobody else can — even though the ciphertext itself is stored publicly.
|
|
18
|
+
|
|
19
|
+
## When to use it
|
|
20
|
+
|
|
21
|
+
- You want to store something **private** on public/decentralised storage.
|
|
22
|
+
- You want access tied to an **on-chain condition** — for example, "only holders of this
|
|
23
|
+
[Access Gate](/access-gate/) pass" or "only after a certain time".
|
|
24
|
+
- You want to **share** encrypted content without running your own key server or handing anyone a raw
|
|
25
|
+
key.
|
|
26
|
+
|
|
27
|
+
When plain [Walrus Storage](/walrus-storage/) is enough: if the content isn't sensitive, skip
|
|
28
|
+
encryption.
|
|
29
|
+
|
|
30
|
+
## How it works, in three steps
|
|
31
|
+
|
|
32
|
+
1. **Encrypt** — the file is encrypted in your browser under the policy you choose. No key material
|
|
33
|
+
ever touches a server.
|
|
34
|
+
2. **Store** — the opaque ciphertext is uploaded to Walrus; you keep the returned blob ID in the
|
|
35
|
+
manifest.
|
|
36
|
+
3. **Decrypt** — you sign **one** wallet message (which mints a short-lived session key); a threshold
|
|
37
|
+
of the key servers releases key shares **only if** the on-chain policy check passes.
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
encrypt (browser) store decrypt (if policy allows)
|
|
41
|
+
file → ciphertext → Walrus blob → sign once → committee releases shares → file
|
|
42
|
+
▲
|
|
43
|
+
policy: who may decrypt (NFT pass / time-lock / …)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## The manifest
|
|
47
|
+
|
|
48
|
+
Sealing produces a small **manifest** — the portable pointer you share or save. It records the policy
|
|
49
|
+
type, the encryption **identity**, the Walrus blob ID, the network, and any non-secret parameters
|
|
50
|
+
(like which gate). It contains **no secrets**; it's just enough to locate the ciphertext and rebuild
|
|
51
|
+
the on-chain access check. See [Reference](/sealed-storage/reference).
|
|
52
|
+
|
|
53
|
+
## Who holds the keys?
|
|
54
|
+
|
|
55
|
+
No one you have to trust unilaterally. Decryption keys are split across a **committee** of independent
|
|
56
|
+
key servers; a configurable **threshold** (e.g. 2 of 3) must agree. Meddleware never holds your keys,
|
|
57
|
+
and the app never sends key material to a server.
|
|
58
|
+
|
|
59
|
+
::: tip Network availability
|
|
60
|
+
Committee mode currently runs on **testnet**. Mainnet is enabled purely by configuration once the
|
|
61
|
+
committee is available — the app shows a clear notice until then.
|
|
62
|
+
:::
|
|
63
|
+
|
|
64
|
+
## Next
|
|
65
|
+
|
|
66
|
+
- **[Using it](/sealed-storage/using)** — encrypt, share, and decrypt step by step.
|
|
67
|
+
- **[Policies](/sealed-storage/policies)** — the access rules you can choose, and when to use each.
|
|
68
|
+
- **[Reference](/sealed-storage/reference)** — manifest shape and the SDK API.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Sealed Storage — policies
|
|
2
|
+
|
|
3
|
+
A **policy** is the on-chain rule that decides who may decrypt sealed content. You choose one when you
|
|
4
|
+
encrypt. Each policy is a self-contained on-chain module with a matching option in the app.
|
|
5
|
+
|
|
6
|
+
## Built-in policies
|
|
7
|
+
|
|
8
|
+
### Access-gate NFT (`nft-gate`)
|
|
9
|
+
|
|
10
|
+
**Only holders of a valid pass for a chosen [Access Gate](/access-gate/) can decrypt.**
|
|
11
|
+
|
|
12
|
+
- **Encrypt with:** the gate's object ID.
|
|
13
|
+
- **Decrypt with:** the pass NFT you hold for that gate (and whether it's soulbound).
|
|
14
|
+
- **Use it when:** you want membership- or purchase-gated content — a paid community, subscriber-only
|
|
15
|
+
files, gated downloads. Combine it with the Access Gate tool to sell the passes.
|
|
16
|
+
|
|
17
|
+
Content is namespaced to the specific gate, so a pass for one gate can never decrypt another gate's
|
|
18
|
+
content. A single-use pass acts as **membership** here — decrypting doesn't consume a use — but an
|
|
19
|
+
already-exhausted pass is rejected.
|
|
20
|
+
|
|
21
|
+
### Time-lock (`time-lock`)
|
|
22
|
+
|
|
23
|
+
**Anyone can decrypt once a chosen unlock time has passed.**
|
|
24
|
+
|
|
25
|
+
- **Encrypt with:** an unlock time.
|
|
26
|
+
- **Decrypt with:** nothing special — just wait until the time arrives.
|
|
27
|
+
- **Use it when:** you want a timed reveal — embargoed announcements, scheduled disclosures, "open
|
|
28
|
+
after" content, commit-and-reveal schemes.
|
|
29
|
+
|
|
30
|
+
The unlock time is checked against the on-chain clock, so it can't be faked by changing your device
|
|
31
|
+
clock.
|
|
32
|
+
|
|
33
|
+
## Choosing a policy
|
|
34
|
+
|
|
35
|
+
| You want… | Use |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| Access limited to holders of a pass you sell or grant | **Access-gate NFT** |
|
|
38
|
+
| A timed reveal open to everyone after a date | **Time-lock** |
|
|
39
|
+
| Both (e.g. gated *and* not before a date) | Not a single built-in today — see roadmap |
|
|
40
|
+
|
|
41
|
+
## Roadmap
|
|
42
|
+
|
|
43
|
+
The policy system is **extensible** — each new policy is an additional on-chain module plus an app
|
|
44
|
+
option, without touching existing ones. Planned policies (not yet available) include allowlists,
|
|
45
|
+
time-bound subscriptions, owner-only, token/balance gating, and more. These will appear in the app's
|
|
46
|
+
policy picker automatically as they ship.
|
|
47
|
+
|
|
48
|
+
::: tip Developer note
|
|
49
|
+
The mechanics of writing a new policy (the on-chain `seal_approve` module + the matching client
|
|
50
|
+
provider) are `dev.meddleware.co.uk` material, planned in the `seal-policies` and `seal-client`
|
|
51
|
+
package docs. The [Reference](/sealed-storage/reference) lists the current policy identifiers.
|
|
52
|
+
:::
|