From 65fbf7428ce1916e05e1f0fea8eb4ff2e5edf0b4 Mon Sep 17 00:00:00 2001 From: filoxenace Date: Mon, 16 Feb 2026 17:36:19 -0500 Subject: [PATCH] Add configure() function --- README.md | 13 +++++++++---- src/init.luau | 25 +++++++++++++++++-------- wally.toml | 2 +- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8b0e8f7..ed3a4c7 100644 --- a/README.md +++ b/README.md @@ -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-luau@0.2.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 diff --git a/src/init.luau b/src/init.luau index 99e03b9..f2dc8a9 100644 --- a/src/init.luau +++ b/src/init.luau @@ -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 diff --git a/wally.toml b/wally.toml index 81c0451..4716ed9 100644 --- a/wally.toml +++ b/wally.toml @@ -1,6 +1,6 @@ [package] name = "secret-rare/threads-luau" -version = "0.2.0" +version = "0.3.0" registry = "https://github.com/UpliftGames/wally-index" license = "GPL-3.0" realm = "server"