Skip to content

Commit 66a096d

Browse files
authored
Merge branch 'main' into rofrankel-patch-1
2 parents 7a728b5 + d30724a commit 66a096d

File tree

18 files changed

+15800
-13295
lines changed

18 files changed

+15800
-13295
lines changed

content/common/navigation/cloud/guides.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ navigation:
1616
path: /cloud/guides/data-stores/throttling
1717
- title: Assets
1818
path: /cloud/guides/usage-assets
19+
- title: Secrets stores
20+
path: /cloud/guides/secrets-store
1921
- title: User inventories
2022
path: /cloud/guides/inventory
2123
- title: Engine instances

content/common/navigation/cloud/reference.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ navigation:
112112
path: /cloud/api/localization
113113
- title: Publish
114114
path: /cloud/api/publish
115+
- title: Secrets store service
116+
path: /cloud/api/secrets-store
115117
- title: Toolbox service
116118
path: /cloud/api/toolbox-service
117119
- title: Open Cloud v2

content/common/navigation/engine/reference.yaml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3231,11 +3231,6 @@ navigation:
32313231
type: engineapi
32323232
source: /reference/engine/classes/TerrainWriteOperation.yaml
32333233
ignoreTranslation: true
3234-
- title: WebStreamClient
3235-
path: /reference/engine/classes/WebStreamClient
3236-
type: engineapi
3237-
source: /reference/engine/classes/WebStreamClient.yaml
3238-
ignoreTranslation: true
32393234
- title: Data Types
32403235
path: /reference/engine/datatypes
32413236
source: /reference/engine/datatypes.md
@@ -5879,16 +5874,6 @@ navigation:
58795874
type: engineapi
58805875
source: /reference/engine/enums/WebSocketState.yaml
58815876
ignoreTranslation: true
5882-
- title: WebStreamClientState
5883-
path: /reference/engine/enums/WebStreamClientState
5884-
type: engineapi
5885-
source: /reference/engine/enums/WebStreamClientState.yaml
5886-
ignoreTranslation: true
5887-
- title: WebStreamClientType
5888-
path: /reference/engine/enums/WebStreamClientType
5889-
type: engineapi
5890-
source: /reference/engine/enums/WebStreamClientType.yaml
5891-
ignoreTranslation: true
58925877
- title: WeldConstraintPreserve
58935878
path: /reference/engine/enums/WeldConstraintPreserve
58945879
type: engineapi
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:4f53a5b60e01c8210537057a0f48cd122e76a7b868d35a5e34ed684467da098f
3-
size 211244
2+
oid sha256:a6d434149dbceea91d5cce6864ce40554ce11c12ba18b33d033192de8b32d801
3+
size 264078
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:fdc0c107efb1b394b51b5fe7464e7a806a3f0293e95eb8fa40ed3cf17f87d8ae
3-
size 211244
2+
oid sha256:ff70b05255636a00875a98dcf554dac6d4133fc142ec0b0e1a69d7fc9f30801e
3+
size 262478

content/en-us/cloud-services/data-stores/error-codes-and-limits.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ Each queue has a limit of 30 requests. When the limit of a queue is reached, req
366366
</tr>
367367
<tr>
368368
<td><b>List</b></td>
369-
<td>`Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()`<br></br>`Class.DataStore:ListKeysAsync()|ListKeysAsync()`<br></br>`Class.DataStore:ListVersionsAsync()|ListVersionAsync()`</td>
369+
<td>`Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()`<br></br>`Class.DataStore:ListKeysAsync()|ListKeysAsync()`<br></br>`Class.DataStore:ListVersionsAsync()|ListVersionsAsync()`</td>
370370
<td>5 + numPlayers × 2</td>
371371
</tr>
372372
<tr>
@@ -405,7 +405,7 @@ Each experience is allowed a certain number of data store requests based on the
405405
</tr>
406406
<tr>
407407
<td><b>List</b></td>
408-
<td>`Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()`<br></br>`Class.DataStore:ListKeysAsync()|ListKeysAsync()`<br></br>`Class.DataStore:ListVersionsAsync()|ListVersionAsync()`</td>
408+
<td>`Class.DataStoreService:ListDataStoresAsync()|ListDataStoresAsync()`<br></br>`Class.DataStore:ListKeysAsync()|ListKeysAsync()`<br></br>`Class.DataStore:ListVersionsAsync()|ListVersionsAsync()`</td>
409409
<td>10 + concurrentUsers × 2</td>
410410
</tr>
411411
<tr>
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
title: Secrets stores
3+
description: Covers usage for the Secrets store API.
4+
---
5+
6+
In addition to [managing your secrets within experiences](../../cloud-services/secrets.md), you can manage secrets using the Open Cloud secrets store API.
7+
8+
Before using the API, you must [generate an API key](../auth/api-keys.md) with the `secret-store` API system or [configure your OAuth 2.0 app](../auth/oauth2-overview.md) with the `universe.secret` scope type. The examples on this page use API keys.
9+
10+
## Secret encryption
11+
12+
When creating or updating secrets on Roblox, you must encrypt secrets with a [LibSodium sealed box](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes) and your experience's public key, and then base64-encode the result.
13+
14+
First, get your experience's public key:
15+
16+
```bash
17+
curl --location 'https://apis.roblox.com/cloud/v2/universes/{universeId}/secrets/public-key' \
18+
--request GET \
19+
--header 'x-api-key: <your-secret-here>' \
20+
```
21+
22+
Next, create a sealed box and base64-encode it. The example below uses Python and [PyNaCl](https://pynacl.readthedocs.io/en/latest/public/#nacl-public-sealedbox). (Run `pip install pynacl` to install it locally).
23+
24+
```python
25+
from base64 import b64encode
26+
from nacl import encoding, public
27+
28+
public_key = "Zgj4+V7vSaEZ06rXazKJUIcUnVa95tUNiwXAif/vdHo="
29+
secret_content = "my_api_key_content"
30+
public_key = public.PublicKey(public_key.encode("utf-8"), encoding.Base64Encoder())
31+
sealed_box = public.SealedBox(public_key)
32+
encrypted = sealed_box.encrypt(secret_content.encode("utf-8"))
33+
print(b64encode(encrypted).decode("utf-8"))
34+
```
35+
36+
You can then create or update a secret using the output. This example creates a new secret:
37+
38+
```bash
39+
curl --location 'https://apis.roblox.com/cloud/v2/universes/6930499524/secrets' \
40+
--request POST \
41+
--header 'Content-Type: application/json' \
42+
--header 'x-api-key: <your-secret-here>' \
43+
--data '{
44+
"id": "mySecret",
45+
"secret": "fP9scJkcDk492F4c1VHZ5QS8v2qsAg7uI+NVVEw6zC0GBnj7xpi7UrNr++lCfr4wyq3ia9Uuu+Ao8HtIXz2gRxBX",
46+
"key_id": "1200590785272263122"
47+
}'
48+
```
49+
50+
After you create one, see [Use secrets](../../cloud-services/secrets.md#use-secrets) to use your secret in experience.
51+
52+
## Update secrets
53+
54+
To update the above secret:
55+
56+
```bash
57+
curl --location 'https://apis.roblox.com/cloud/v2/universes/6930499524/secrets/mySecret' \
58+
--request PATCH \
59+
--header 'Content-Type: application/json' \
60+
--header 'x-api-key: <your-secret-here>' \
61+
--data '{
62+
"secret": "2Fczw/PL7woOzHnGHQ65sT0MbzJjEOlfibyKxy374CqzFyEb2QTS8grtNBgG/0sfIvSHEo9JWN+pUr0NTPs0V6lj",
63+
"key_id": "1200590785272263122"
64+
}'
65+
```
66+
67+
If you need to clean up a secret, a deletion request looks like this:
68+
69+
```bash
70+
curl --location 'https://apis.roblox.com/cloud/v2/universes/6930499524/secrets/mySecret' \
71+
--request DELETE \
72+
--header 'Content-Type: application/json' \
73+
--header 'x-api-key: <your-secret-here>'
74+
```

content/en-us/education/build-it-play-it-island-of-move/sharing-animations.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
---
2-
title: Share animations
3-
description: Part of the Roblox Build It, Play It Challenge - Island of Move. Share animations with other developers.
2+
title: Export and Import Animations
3+
description: Part of the Roblox Build It, Play It Challenge - Island of Move. Export animations to share with other developers.
44
prev: /education/build-it-play-it-island-of-move/go-beyond-the-challenge
55
---
66

77
<img src="../../assets/education/build-it-play-it-island-of-move/sharing-animations/hero-banner.png" width="100%" />
88

9-
Share animations with friends and fellow developers by exporting and importing them through Studio.
9+
Share animations with connections and fellow developers by exporting and importing them through Studio.
1010

1111
<Alert severity="info">
12-
<AlertTitle>Rules in Sharing Animations</AlertTitle>
13-
Animations are restricted assets. For more information, see [Asset privacy](../../projects/assets/privacy.md).
12+
<AlertTitle>Animation Permission Changes</AlertTitle>
13+
You can now share animations with connections, groups, and experiences without re-uploading them. For more information, see [Asset privacy](../../projects/assets/privacy.md).
1414
</Alert>
1515

16-
**Exporting animations**
16+
## Export animations
1717

1818
Make sure to save your animation before exporting it.
1919

content/en-us/projects/assets/privacy.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: Asset privacy
33
description: Explore how the asset privacy system lets you control which Roblox creators can use your assets in their experiences.
44
---
55

6-
The **asset privacy system** lets you control how creators and experiences can use and distribute your models, meshes, images, decals, audio, and video assets on Roblox. Assets can have one of two access privacy types:
6+
The **asset privacy system** lets you control how creators and experiences can use and distribute your models, meshes, images, decals, audio, video, and animation assets on Roblox. Assets can have one of two access privacy types:
77

88
- **Open Use** — Any creator can use the asset within their experiences.
99
- **Restricted** — Creators or experiences can only use the asset after the asset owner grants permission.
@@ -64,6 +64,7 @@ To grant a collaborator permission to use a restricted asset in any of these sce
6464
- **Videos**
6565
- **Meshes**
6666
- **MeshParts**
67+
- **Animations**
6768

6869
1. Select the asset you want your collaborator to have permission to use in their experiences. The asset's **Configure** page displays.
6970
1. In the asset's left-hand navigation, select **Permissions**. The asset's **Permissions** page displays.
@@ -115,6 +116,7 @@ To grant an experience permission to use a restricted asset:
115116
- **Videos**
116117
- **Meshes**
117118
- **MeshParts**
119+
- **Animations**
118120

119121
1. Select the asset you want the experience to have permission to use. The asset's **Configure** page displays.
120122
1. In the asset's left-hand navigation, select **Permissions**. The asset's **Permissions** page displays.
@@ -178,7 +180,17 @@ If you revoke restricted asset permission for a connection, they can no longer u
178180
To revoke permission for a creator to use a restricted asset in any additional experience that isn't currently using the asset:
179181

180182
1. Navigate to the [Creator Dashboard](https://create.roblox.com/dashboard/creations).
181-
1. In the upper tab bar, select **Development Items**, then click either **Audio** or **Videos**. All of your audio or video assets display.
183+
1. In the upper tab bar, select **Development Items**, then click one of the following tabs:
184+
185+
- **Models & Packages**
186+
- **Audio**
187+
- **Decals**
188+
- **Images**
189+
- **Videos**
190+
- **Meshes**
191+
- **MeshParts**
192+
- **Animations**
193+
182194
1. Select the asset you want to revoke permission for one or more creators to use in their own experiences. The asset's **Configure** page displays.
183195
1. In the asset's left-hand navigation, select **Permissions**. The asset's **Permissions** page displays.
184196
1. From the **Collaborators** tab, locate the creator you want to revoke permission from, then click the Access dropdown next to their username. Additional options display.

content/en-us/reference/cloud/cloud.docs.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2865,13 +2865,13 @@
28652865
"x-roblox-scopes": [
28662866
{
28672867
"description": "Required",
2868-
"name": "memory-store.queue:write"
2868+
"name": "memory-store.queue:add"
28692869
}
28702870
],
28712871
"x-roblox-docs": {
28722872
"category": "Data and memory stores",
28732873
"methodProperties": {
2874-
"scopes": ["memory-store.queue:write"]
2874+
"scopes": ["memory-store.queue:add"]
28752875
},
28762876
"resource": {
28772877
"$ref": "#/components/schemas/MemoryStoreQueueItem",

0 commit comments

Comments
 (0)