5 Commits

Author SHA1 Message Date
ivy 007a30da95 Change license from GPL-3.0 to MIT 2026-02-24 01:03:37 -05:00
ivy 206429866a Add LICENSE file 2026-02-24 01:03:08 -05:00
ivy 65fbf7428c Add configure() function 2026-02-16 17:36:19 -05:00
ivy d5522bb96f Add GNU GPL v3 license
Added the GNU General Public License version 3 to the project.
2026-02-16 11:02:10 -05:00
ivy 8264d88093 Rename package to threads-luau 2026-02-16 11:01:19 -05:00
5 changed files with 54 additions and 19 deletions
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Filoxen Labs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+9 -4
View File
@@ -1,4 +1,4 @@
# threads-client
# threads-luau
A Roblox server-side client for the [Threads](https://github.com/filoxen/threads) service. Handles reuploading clothing assets through your Threads instance.
@@ -8,7 +8,7 @@ Add to your `wally.toml` dependencies:
```toml
[server-dependencies]
ThreadsClient = "secret-rare/threads-client@0.1.0"
ThreadsClient = "secret-rare/threads-luau@0.3.0"
```
Then run:
@@ -19,15 +19,20 @@ wally install
## Setup
1. Add your API key to the **Secrets Store** in the Creator Dashboard with the name `THREADS_API_KEY` (or your own custom secret name).
1. Host your own [Threads](https://github.com/filoxen/threads) instance.
2. Update `BASE_URL` in the module to point to your Threads API instance.
2. Add your API key to the **Secrets Store** in the Creator Dashboard with the name `THREADS_API_KEY` (or a custom name).
## Usage
```luau
local ThreadsClient = require(path.to.ThreadsClient)
ThreadsClient.configure({
baseUrl = "https://your-threads-instance.com",
apiKeySecretName = "THREADS_API_KEY", -- optional, this is the default
})
local newAssetId = ThreadsClient.create(assetId)
if newAssetId ~= -1 then
+4 -4
View File
@@ -1,6 +1,6 @@
{
"name": "threads-client",
"tree": {
"$path": "src"
}
"name": "threads-luau",
"tree": {
"$path": "src"
}
}
+17 -8
View File
@@ -2,15 +2,24 @@ local HttpService = game:GetService("HttpService")
local clothing_upload = {}
-- Change this to your own Threads API instance URL
local BASE_URL = "https://threads.example.com"
-- Name of the secret in the Secrets Store (Creator Dashboard -> Secrets).
local API_KEY_SECRET_NAME = "THREADS_API_KEY"
local BASE_URL: string? = nil
local API_KEY: Secret? = nil
local API_KEY = HttpService:GetSecret(API_KEY_SECRET_NAME)
export type Config = {
baseUrl: string,
apiKeySecretName: string?,
}
function clothing_upload.configure(config: Config)
BASE_URL = config.baseUrl
local secretName = config.apiKeySecretName or "THREADS_API_KEY"
API_KEY = HttpService:GetSecret(secretName)
end
-- Sends a reupload request to the Threads API for the given asset ID. Returns the new asset ID, or -1 on failure.
function clothing_upload.create(id: number): number
assert(BASE_URL and API_KEY, "[ThreadsClient] Must call .configure() before using .create()")
local create_url = `{BASE_URL}/create/?asset_id={id}`
local request_data = {
@@ -30,14 +39,14 @@ function clothing_upload.create(id: number): number
local response_data = HttpService:JSONDecode(response.Body)
if response_data["uploaded"] then
local newAssetId = tonumber(response_data["uploaded"]["asset_id"]) :: number
print(`[ClothingUploadClient] Successfully reuploaded asset {id} -> {newAssetId}`)
print(`[ThreadsClient] Successfully reuploaded asset {id} -> {newAssetId}`)
return newAssetId
else
warn(`[ClothingUploadClient] Reupload failed for asset {id}: Response missing 'uploaded' field`)
warn(`[ThreadsClient] Reupload failed for asset {id}: Response missing 'uploaded' field`)
end
else
local errorMsg = if response then response.StatusMessage else "Unknown Error"
warn(`[ClothingUploadClient] API request failed for asset {id}: {errorMsg}`)
warn(`[ThreadsClient] API request failed for asset {id}: {errorMsg}`)
end
return -1
end
+3 -3
View File
@@ -1,8 +1,8 @@
[package]
name = "secret-rare/threads-client"
version = "0.1.0"
name = "secret-rare/threads-luau"
version = "0.3.0"
registry = "https://github.com/UpliftGames/wally-index"
license = "GPL-3.0"
license = "MIT"
realm = "server"
[dependencies]