flingit 0.0.9 → 0.0.10
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/dist/cli/commands/admin.d.ts.map +1 -1
- package/dist/cli/commands/admin.js +29 -16
- package/dist/cli/commands/admin.js.map +1 -1
- package/dist/cli/commands/cron.d.ts.map +1 -1
- package/dist/cli/commands/cron.js +7 -3
- package/dist/cli/commands/cron.js.map +1 -1
- package/dist/cli/commands/db.d.ts.map +1 -1
- package/dist/cli/commands/db.js +5 -2
- package/dist/cli/commands/db.js.map +1 -1
- package/dist/cli/commands/feedback.d.ts.map +1 -1
- package/dist/cli/commands/feedback.js +6 -1
- package/dist/cli/commands/feedback.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +5 -20
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/launch.d.ts.map +1 -1
- package/dist/cli/commands/launch.js +5 -59
- package/dist/cli/commands/launch.js.map +1 -1
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +7 -2
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/logs.d.ts.map +1 -1
- package/dist/cli/commands/logs.js +3 -1
- package/dist/cli/commands/logs.js.map +1 -1
- package/dist/cli/commands/onboard.js +1 -1
- package/dist/cli/commands/plugin.d.ts +8 -0
- package/dist/cli/commands/plugin.d.ts.map +1 -0
- package/dist/cli/commands/plugin.js +407 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/project.d.ts.map +1 -1
- package/dist/cli/commands/project.js +3 -1
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/push.d.ts.map +1 -1
- package/dist/cli/commands/push.js +88 -11
- package/dist/cli/commands/push.js.map +1 -1
- package/dist/cli/commands/register.d.ts +25 -0
- package/dist/cli/commands/register.d.ts.map +1 -1
- package/dist/cli/commands/register.js +30 -13
- package/dist/cli/commands/register.js.map +1 -1
- package/dist/cli/commands/secret.d.ts +4 -0
- package/dist/cli/commands/secret.d.ts.map +1 -1
- package/dist/cli/commands/secret.js +11 -22
- package/dist/cli/commands/secret.js.map +1 -1
- package/dist/cli/commands/storage.d.ts +10 -0
- package/dist/cli/commands/storage.d.ts.map +1 -0
- package/dist/cli/commands/storage.js +459 -0
- package/dist/cli/commands/storage.js.map +1 -0
- package/dist/cli/commands/tun.d.ts.map +1 -1
- package/dist/cli/commands/tun.js +3 -2
- package/dist/cli/commands/tun.js.map +1 -1
- package/dist/cli/deploy/bundler.d.ts +15 -0
- package/dist/cli/deploy/bundler.d.ts.map +1 -1
- package/dist/cli/deploy/bundler.js +86 -2
- package/dist/cli/deploy/bundler.js.map +1 -1
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/utils/config.d.ts +12 -0
- package/dist/cli/utils/config.d.ts.map +1 -1
- package/dist/cli/utils/config.js +23 -3
- package/dist/cli/utils/config.js.map +1 -1
- package/dist/cli/utils/environment.d.ts +12 -0
- package/dist/cli/utils/environment.d.ts.map +1 -1
- package/dist/cli/utils/environment.js +40 -6
- package/dist/cli/utils/environment.js.map +1 -1
- package/dist/cli/utils/launch-io-impl.d.ts +13 -0
- package/dist/cli/utils/launch-io-impl.d.ts.map +1 -0
- package/dist/cli/utils/launch-io-impl.js +51 -0
- package/dist/cli/utils/launch-io-impl.js.map +1 -0
- package/dist/cli/utils/launch-io.d.ts +42 -0
- package/dist/cli/utils/launch-io.d.ts.map +1 -0
- package/dist/cli/utils/launch-io.js +8 -0
- package/dist/cli/utils/launch-io.js.map +1 -0
- package/dist/cli/utils/project-name.d.ts +17 -0
- package/dist/cli/utils/project-name.d.ts.map +1 -0
- package/dist/cli/utils/project-name.js +33 -0
- package/dist/cli/utils/project-name.js.map +1 -0
- package/dist/cli/utils/prompt-new-project.d.ts +12 -0
- package/dist/cli/utils/prompt-new-project.d.ts.map +1 -0
- package/dist/cli/utils/prompt-new-project.js +66 -0
- package/dist/cli/utils/prompt-new-project.js.map +1 -0
- package/dist/client/assets/index-BqVrS7t9.js +40 -0
- package/dist/client/assets/index-DSLUsCtO.css +1 -0
- package/dist/client/index.html +14 -0
- package/dist/client/vite.svg +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/db.d.ts +5 -0
- package/dist/runtime/db.d.ts.map +1 -1
- package/dist/runtime/db.js +6 -1
- package/dist/runtime/db.js.map +1 -1
- package/dist/runtime/discord.d.ts +171 -0
- package/dist/runtime/discord.d.ts.map +1 -0
- package/dist/runtime/discord.js +192 -0
- package/dist/runtime/discord.js.map +1 -0
- package/dist/runtime/secrets.d.ts +22 -0
- package/dist/runtime/secrets.d.ts.map +1 -1
- package/dist/runtime/secrets.js +58 -18
- package/dist/runtime/secrets.js.map +1 -1
- package/dist/runtime/storage.d.ts +29 -0
- package/dist/runtime/storage.d.ts.map +1 -0
- package/dist/runtime/storage.js +456 -0
- package/dist/runtime/storage.js.map +1 -0
- package/dist/shared/constants.d.ts +12 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +12 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/discord-types.d.ts +130 -0
- package/dist/shared/discord-types.d.ts.map +1 -0
- package/dist/shared/discord-types.js +8 -0
- package/dist/shared/discord-types.js.map +1 -0
- package/dist/shared/random-code.d.ts +6 -0
- package/dist/shared/random-code.d.ts.map +1 -0
- package/dist/shared/random-code.js +23 -0
- package/dist/shared/random-code.js.map +1 -0
- package/dist/types/storage.d.ts +154 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +8 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/worker-runtime/discord.d.ts +61 -0
- package/dist/worker-runtime/discord.d.ts.map +1 -0
- package/dist/worker-runtime/discord.js +181 -0
- package/dist/worker-runtime/discord.js.map +1 -0
- package/dist/worker-runtime/index.d.ts +21 -1
- package/dist/worker-runtime/index.d.ts.map +1 -1
- package/dist/worker-runtime/index.js +102 -0
- package/dist/worker-runtime/index.js.map +1 -1
- package/package.json +9 -2
- package/templates/default/CLAUDE.md +65 -11
- package/templates/default/skills/discord/SKILL.md +328 -0
- package/templates/default/skills/fling/API.md +208 -0
- package/templates/default/skills/fling/SKILL.md +51 -8
- package/dist/cli/deploy/worker-entry.d.ts +0 -14
- package/dist/cli/deploy/worker-entry.d.ts.map +0 -1
- package/dist/cli/deploy/worker-entry.js +0 -60
- package/dist/cli/deploy/worker-entry.js.map +0 -1
- package/dist/cli/deploy/wrangler-config.d.ts +0 -20
- package/dist/cli/deploy/wrangler-config.d.ts.map +0 -1
- package/dist/cli/deploy/wrangler-config.js +0 -54
- package/dist/cli/deploy/wrangler-config.js.map +0 -1
- package/dist/cli/loaders/register-wasm.d.ts +0 -12
- package/dist/cli/loaders/register-wasm.d.ts.map +0 -1
- package/dist/cli/loaders/register-wasm.js +0 -19
- package/dist/cli/loaders/register-wasm.js.map +0 -1
- package/dist/cli/loaders/wasm-hooks.d.ts +0 -61
- package/dist/cli/loaders/wasm-hooks.d.ts.map +0 -1
- package/dist/cli/loaders/wasm-hooks.js +0 -63
- package/dist/cli/loaders/wasm-hooks.js.map +0 -1
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage primitive using local filesystem
|
|
3
|
+
*
|
|
4
|
+
* The storage API matches Cloudflare R2 for portability.
|
|
5
|
+
* Locally, this uses a flat directory with URL-encoded filenames.
|
|
6
|
+
* In production, it runs against Cloudflare R2.
|
|
7
|
+
*
|
|
8
|
+
* Storage structure:
|
|
9
|
+
* .fling/data/storage/ - Object storage root (flat directory)
|
|
10
|
+
* images%2Flogo.png.data - Key: "images/logo.png" data file
|
|
11
|
+
* images%2Flogo.png.meta - Metadata JSON sidecar
|
|
12
|
+
*
|
|
13
|
+
* Both data and metadata files use explicit suffixes to avoid conflicts
|
|
14
|
+
* (e.g., a key ending in ".meta" won't collide with metadata files).
|
|
15
|
+
*/
|
|
16
|
+
import { createHash } from "node:crypto";
|
|
17
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync, statSync, renameSync, } from "node:fs";
|
|
18
|
+
import { join, dirname } from "node:path";
|
|
19
|
+
import { Readable } from "node:stream";
|
|
20
|
+
// Storage directory path - configurable via environment or setter
|
|
21
|
+
let _storagePath = null;
|
|
22
|
+
/**
|
|
23
|
+
* Get the storage path. Reads from environment on each call if not overridden.
|
|
24
|
+
*/
|
|
25
|
+
function getStoragePath() {
|
|
26
|
+
if (_storagePath !== null) {
|
|
27
|
+
return _storagePath;
|
|
28
|
+
}
|
|
29
|
+
return process.env["FLING_getStoragePath()"] ?? join(process.cwd(), ".fling", "data", "storage");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Set storage path. Used for testing.
|
|
33
|
+
*/
|
|
34
|
+
export function setStoragePath(path) {
|
|
35
|
+
_storagePath = path;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Reset storage path to default behavior. Used for testing.
|
|
39
|
+
*/
|
|
40
|
+
export function resetStoragePath() {
|
|
41
|
+
_storagePath = null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* MIME type detection from file extension.
|
|
45
|
+
*/
|
|
46
|
+
const MIME_TYPES = {
|
|
47
|
+
".html": "text/html",
|
|
48
|
+
".htm": "text/html",
|
|
49
|
+
".css": "text/css",
|
|
50
|
+
".js": "application/javascript",
|
|
51
|
+
".mjs": "application/javascript",
|
|
52
|
+
".json": "application/json",
|
|
53
|
+
".xml": "application/xml",
|
|
54
|
+
".txt": "text/plain",
|
|
55
|
+
".md": "text/markdown",
|
|
56
|
+
".csv": "text/csv",
|
|
57
|
+
".png": "image/png",
|
|
58
|
+
".jpg": "image/jpeg",
|
|
59
|
+
".jpeg": "image/jpeg",
|
|
60
|
+
".gif": "image/gif",
|
|
61
|
+
".svg": "image/svg+xml",
|
|
62
|
+
".webp": "image/webp",
|
|
63
|
+
".ico": "image/x-icon",
|
|
64
|
+
".pdf": "application/pdf",
|
|
65
|
+
".zip": "application/zip",
|
|
66
|
+
".gz": "application/gzip",
|
|
67
|
+
".tar": "application/x-tar",
|
|
68
|
+
".wasm": "application/wasm",
|
|
69
|
+
".mp3": "audio/mpeg",
|
|
70
|
+
".mp4": "video/mp4",
|
|
71
|
+
".webm": "video/webm",
|
|
72
|
+
".woff": "font/woff",
|
|
73
|
+
".woff2": "font/woff2",
|
|
74
|
+
".ttf": "font/ttf",
|
|
75
|
+
".otf": "font/otf",
|
|
76
|
+
".eot": "application/vnd.ms-fontobject",
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Detect MIME type from key extension.
|
|
80
|
+
*/
|
|
81
|
+
function detectMimeType(key) {
|
|
82
|
+
const lastDot = key.lastIndexOf(".");
|
|
83
|
+
if (lastDot === -1)
|
|
84
|
+
return undefined;
|
|
85
|
+
const ext = key.slice(lastDot).toLowerCase();
|
|
86
|
+
return MIME_TYPES[ext];
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate storage key.
|
|
90
|
+
*/
|
|
91
|
+
function validateKey(key) {
|
|
92
|
+
if (!key || key.length === 0) {
|
|
93
|
+
throw new Error("Storage key is required");
|
|
94
|
+
}
|
|
95
|
+
if (key.length > 1024) {
|
|
96
|
+
throw new Error("Storage key must be at most 1024 characters");
|
|
97
|
+
}
|
|
98
|
+
if (key.startsWith("/")) {
|
|
99
|
+
throw new Error("Storage key must not start with /");
|
|
100
|
+
}
|
|
101
|
+
if (key.includes("..")) {
|
|
102
|
+
throw new Error("Storage key must not contain ..");
|
|
103
|
+
}
|
|
104
|
+
if (key.includes("//")) {
|
|
105
|
+
throw new Error("Storage key must not contain //");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Encode key for filesystem storage.
|
|
110
|
+
* Uses URL encoding to handle path separators safely.
|
|
111
|
+
*/
|
|
112
|
+
function encodeKey(key) {
|
|
113
|
+
return encodeURIComponent(key);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Decode filesystem name back to key.
|
|
117
|
+
*/
|
|
118
|
+
function decodeKey(encoded) {
|
|
119
|
+
return decodeURIComponent(encoded);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get filesystem path for a key's data file.
|
|
123
|
+
* Uses .data suffix to avoid conflicts with .meta files.
|
|
124
|
+
*/
|
|
125
|
+
function getFilePath(key) {
|
|
126
|
+
return join(getStoragePath(), encodeKey(key) + ".data");
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get metadata sidecar path for a key.
|
|
130
|
+
*/
|
|
131
|
+
function getMetaPath(key) {
|
|
132
|
+
return join(getStoragePath(), encodeKey(key) + ".meta");
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Ensure storage directory exists.
|
|
136
|
+
*/
|
|
137
|
+
function ensureStorageDir() {
|
|
138
|
+
if (!existsSync(getStoragePath())) {
|
|
139
|
+
mkdirSync(getStoragePath(), { recursive: true });
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Calculate MD5 hash for ETag (matches R2 behavior).
|
|
144
|
+
*/
|
|
145
|
+
function calculateEtag(content) {
|
|
146
|
+
const hash = createHash("md5").update(content).digest("hex");
|
|
147
|
+
return `"${hash}"`;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Read value from various input types into a Buffer.
|
|
151
|
+
*/
|
|
152
|
+
async function readValue(value) {
|
|
153
|
+
if (typeof value === "string") {
|
|
154
|
+
return Buffer.from(value, "utf-8");
|
|
155
|
+
}
|
|
156
|
+
if (value instanceof ArrayBuffer) {
|
|
157
|
+
return Buffer.from(value);
|
|
158
|
+
}
|
|
159
|
+
if (ArrayBuffer.isView(value)) {
|
|
160
|
+
return Buffer.from(value.buffer, value.byteOffset, value.byteLength);
|
|
161
|
+
}
|
|
162
|
+
// ReadableStream - collect all chunks
|
|
163
|
+
const reader = value.getReader();
|
|
164
|
+
const chunks = [];
|
|
165
|
+
for (;;) {
|
|
166
|
+
const readResult = await reader.read();
|
|
167
|
+
if (readResult.done)
|
|
168
|
+
break;
|
|
169
|
+
chunks.push(readResult.value);
|
|
170
|
+
}
|
|
171
|
+
return Buffer.concat(chunks);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Create a StorageObjectBody from stored file.
|
|
175
|
+
*/
|
|
176
|
+
function createObjectBody(key, content, meta, etag) {
|
|
177
|
+
let bodyUsed = false;
|
|
178
|
+
let bodyStream = null;
|
|
179
|
+
// Build the base object without undefined values
|
|
180
|
+
const baseObj = {
|
|
181
|
+
key,
|
|
182
|
+
size: content.length,
|
|
183
|
+
etag,
|
|
184
|
+
uploaded: new Date(meta.uploaded),
|
|
185
|
+
};
|
|
186
|
+
if (meta.contentType)
|
|
187
|
+
baseObj.contentType = meta.contentType;
|
|
188
|
+
if (meta.customMetadata)
|
|
189
|
+
baseObj.customMetadata = meta.customMetadata;
|
|
190
|
+
const obj = {
|
|
191
|
+
...baseObj,
|
|
192
|
+
bodyUsed: false,
|
|
193
|
+
get body() {
|
|
194
|
+
if (bodyUsed) {
|
|
195
|
+
throw new Error("Body has already been used");
|
|
196
|
+
}
|
|
197
|
+
bodyStream ??= Readable.toWeb(Readable.from(content));
|
|
198
|
+
return bodyStream;
|
|
199
|
+
},
|
|
200
|
+
async arrayBuffer() {
|
|
201
|
+
if (bodyUsed) {
|
|
202
|
+
throw new Error("Body has already been used");
|
|
203
|
+
}
|
|
204
|
+
bodyUsed = true;
|
|
205
|
+
obj.bodyUsed = true;
|
|
206
|
+
// Create a new ArrayBuffer copy to avoid SharedArrayBuffer issues
|
|
207
|
+
const copy = new ArrayBuffer(content.length);
|
|
208
|
+
new Uint8Array(copy).set(content);
|
|
209
|
+
return copy;
|
|
210
|
+
},
|
|
211
|
+
async text() {
|
|
212
|
+
if (bodyUsed) {
|
|
213
|
+
throw new Error("Body has already been used");
|
|
214
|
+
}
|
|
215
|
+
bodyUsed = true;
|
|
216
|
+
obj.bodyUsed = true;
|
|
217
|
+
return content.toString("utf-8");
|
|
218
|
+
},
|
|
219
|
+
async json() {
|
|
220
|
+
if (bodyUsed) {
|
|
221
|
+
throw new Error("Body has already been used");
|
|
222
|
+
}
|
|
223
|
+
bodyUsed = true;
|
|
224
|
+
obj.bodyUsed = true;
|
|
225
|
+
return JSON.parse(content.toString("utf-8"));
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
return obj;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Local filesystem storage implementation.
|
|
232
|
+
*/
|
|
233
|
+
export const storage = {
|
|
234
|
+
async put(key, value, options) {
|
|
235
|
+
validateKey(key);
|
|
236
|
+
ensureStorageDir();
|
|
237
|
+
const content = await readValue(value);
|
|
238
|
+
const etag = calculateEtag(content);
|
|
239
|
+
const now = Date.now();
|
|
240
|
+
// Determine content type
|
|
241
|
+
const contentType = options?.contentType ?? detectMimeType(key);
|
|
242
|
+
// Prepare metadata (only include defined fields)
|
|
243
|
+
const meta = { uploaded: now };
|
|
244
|
+
if (contentType)
|
|
245
|
+
meta.contentType = contentType;
|
|
246
|
+
if (options?.customMetadata)
|
|
247
|
+
meta.customMetadata = options.customMetadata;
|
|
248
|
+
const filePath = getFilePath(key);
|
|
249
|
+
const metaPath = getMetaPath(key);
|
|
250
|
+
// Write atomically using temp files
|
|
251
|
+
const tempDir = dirname(filePath);
|
|
252
|
+
const tempFile = join(tempDir, `.tmp-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
253
|
+
const tempMeta = tempFile + ".meta";
|
|
254
|
+
try {
|
|
255
|
+
writeFileSync(tempFile, content);
|
|
256
|
+
writeFileSync(tempMeta, JSON.stringify(meta));
|
|
257
|
+
// Rename atomically
|
|
258
|
+
renameSync(tempFile, filePath);
|
|
259
|
+
renameSync(tempMeta, metaPath);
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
// Clean up temp files on error
|
|
263
|
+
try {
|
|
264
|
+
unlinkSync(tempFile);
|
|
265
|
+
}
|
|
266
|
+
catch {
|
|
267
|
+
// Ignore
|
|
268
|
+
}
|
|
269
|
+
try {
|
|
270
|
+
unlinkSync(tempMeta);
|
|
271
|
+
}
|
|
272
|
+
catch {
|
|
273
|
+
// Ignore
|
|
274
|
+
}
|
|
275
|
+
throw error;
|
|
276
|
+
}
|
|
277
|
+
const result = {
|
|
278
|
+
key,
|
|
279
|
+
size: content.length,
|
|
280
|
+
etag,
|
|
281
|
+
uploaded: new Date(now),
|
|
282
|
+
};
|
|
283
|
+
if (contentType)
|
|
284
|
+
result.contentType = contentType;
|
|
285
|
+
if (options?.customMetadata)
|
|
286
|
+
result.customMetadata = options.customMetadata;
|
|
287
|
+
return result;
|
|
288
|
+
},
|
|
289
|
+
async get(key) {
|
|
290
|
+
validateKey(key);
|
|
291
|
+
const filePath = getFilePath(key);
|
|
292
|
+
const metaPath = getMetaPath(key);
|
|
293
|
+
if (!existsSync(filePath)) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
const content = readFileSync(filePath);
|
|
297
|
+
const etag = calculateEtag(content);
|
|
298
|
+
// Read metadata
|
|
299
|
+
let meta = { uploaded: Date.now() };
|
|
300
|
+
if (existsSync(metaPath)) {
|
|
301
|
+
try {
|
|
302
|
+
meta = JSON.parse(readFileSync(metaPath, "utf-8"));
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
// Use defaults if metadata is corrupted
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
// Fallback: use file mtime
|
|
310
|
+
const stat = statSync(filePath);
|
|
311
|
+
meta.uploaded = stat.mtimeMs;
|
|
312
|
+
}
|
|
313
|
+
return createObjectBody(key, content, meta, etag);
|
|
314
|
+
},
|
|
315
|
+
async head(key) {
|
|
316
|
+
validateKey(key);
|
|
317
|
+
const filePath = getFilePath(key);
|
|
318
|
+
const metaPath = getMetaPath(key);
|
|
319
|
+
if (!existsSync(filePath)) {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
const content = readFileSync(filePath);
|
|
323
|
+
const etag = calculateEtag(content);
|
|
324
|
+
// Read metadata
|
|
325
|
+
let meta = { uploaded: Date.now() };
|
|
326
|
+
if (existsSync(metaPath)) {
|
|
327
|
+
try {
|
|
328
|
+
meta = JSON.parse(readFileSync(metaPath, "utf-8"));
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
// Use defaults if metadata is corrupted
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
// Fallback: use file mtime
|
|
336
|
+
const stat = statSync(filePath);
|
|
337
|
+
meta.uploaded = stat.mtimeMs;
|
|
338
|
+
}
|
|
339
|
+
const result = {
|
|
340
|
+
key,
|
|
341
|
+
size: content.length,
|
|
342
|
+
etag,
|
|
343
|
+
uploaded: new Date(meta.uploaded),
|
|
344
|
+
};
|
|
345
|
+
if (meta.contentType)
|
|
346
|
+
result.contentType = meta.contentType;
|
|
347
|
+
if (meta.customMetadata)
|
|
348
|
+
result.customMetadata = meta.customMetadata;
|
|
349
|
+
return result;
|
|
350
|
+
},
|
|
351
|
+
async delete(keys) {
|
|
352
|
+
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
353
|
+
for (const key of keyArray) {
|
|
354
|
+
validateKey(key);
|
|
355
|
+
const filePath = getFilePath(key);
|
|
356
|
+
const metaPath = getMetaPath(key);
|
|
357
|
+
try {
|
|
358
|
+
if (existsSync(filePath)) {
|
|
359
|
+
unlinkSync(filePath);
|
|
360
|
+
}
|
|
361
|
+
if (existsSync(metaPath)) {
|
|
362
|
+
unlinkSync(metaPath);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
// Ignore errors - file might not exist
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
},
|
|
370
|
+
async list(options) {
|
|
371
|
+
ensureStorageDir();
|
|
372
|
+
const prefix = options?.prefix ?? "";
|
|
373
|
+
const limit = Math.min(options?.limit ?? 1000, 1000);
|
|
374
|
+
const cursor = options?.cursor;
|
|
375
|
+
// Read all files in storage directory
|
|
376
|
+
const files = readdirSync(getStoragePath());
|
|
377
|
+
// Filter to .data files and decode keys
|
|
378
|
+
const allObjects = [];
|
|
379
|
+
for (const file of files) {
|
|
380
|
+
if (!file.endsWith(".data"))
|
|
381
|
+
continue;
|
|
382
|
+
try {
|
|
383
|
+
// Strip .data suffix before decoding
|
|
384
|
+
const encoded = file.slice(0, -5);
|
|
385
|
+
const key = decodeKey(encoded);
|
|
386
|
+
if (key.startsWith(prefix)) {
|
|
387
|
+
allObjects.push({ key, encoded });
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
catch {
|
|
391
|
+
// Skip files with invalid encoding
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Sort by key for consistent ordering
|
|
395
|
+
allObjects.sort((a, b) => a.key.localeCompare(b.key));
|
|
396
|
+
// Find cursor position
|
|
397
|
+
let startIndex = 0;
|
|
398
|
+
if (cursor) {
|
|
399
|
+
const cursorIndex = allObjects.findIndex((o) => o.key === cursor);
|
|
400
|
+
if (cursorIndex !== -1) {
|
|
401
|
+
startIndex = cursorIndex + 1;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
// Get page of results
|
|
405
|
+
const pageObjects = allObjects.slice(startIndex, startIndex + limit);
|
|
406
|
+
const truncated = startIndex + limit < allObjects.length;
|
|
407
|
+
// Build result objects
|
|
408
|
+
const objects = [];
|
|
409
|
+
for (const { key, encoded } of pageObjects) {
|
|
410
|
+
const filePath = join(getStoragePath(), encoded + ".data");
|
|
411
|
+
const metaPath = join(getStoragePath(), encoded + ".meta");
|
|
412
|
+
try {
|
|
413
|
+
const content = readFileSync(filePath);
|
|
414
|
+
const etag = calculateEtag(content);
|
|
415
|
+
let meta = { uploaded: Date.now() };
|
|
416
|
+
if (existsSync(metaPath)) {
|
|
417
|
+
try {
|
|
418
|
+
meta = JSON.parse(readFileSync(metaPath, "utf-8"));
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
// Use defaults
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
const stat = statSync(filePath);
|
|
426
|
+
meta.uploaded = stat.mtimeMs;
|
|
427
|
+
}
|
|
428
|
+
const obj = {
|
|
429
|
+
key,
|
|
430
|
+
size: content.length,
|
|
431
|
+
etag,
|
|
432
|
+
uploaded: new Date(meta.uploaded),
|
|
433
|
+
};
|
|
434
|
+
if (meta.contentType)
|
|
435
|
+
obj.contentType = meta.contentType;
|
|
436
|
+
if (meta.customMetadata)
|
|
437
|
+
obj.customMetadata = meta.customMetadata;
|
|
438
|
+
objects.push(obj);
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
// Skip files that can't be read
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
const result = {
|
|
445
|
+
objects,
|
|
446
|
+
truncated,
|
|
447
|
+
};
|
|
448
|
+
if (truncated && pageObjects.length > 0) {
|
|
449
|
+
const lastKey = pageObjects[pageObjects.length - 1]?.key;
|
|
450
|
+
if (lastKey)
|
|
451
|
+
result.cursor = lastKey;
|
|
452
|
+
}
|
|
453
|
+
return result;
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/runtime/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for CLI.
|
|
3
|
+
*
|
|
4
|
+
* NOTE: This value MUST match platform/shared/constants.ts.
|
|
5
|
+
* They are separate files because CLI and platform have separate TypeScript builds.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default project name used for backwards compatibility.
|
|
9
|
+
* Projects without an explicit name use this value.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_PROJECT_NAME = "default";
|
|
12
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared constants for CLI.
|
|
3
|
+
*
|
|
4
|
+
* NOTE: This value MUST match platform/shared/constants.ts.
|
|
5
|
+
* They are separate files because CLI and platform have separate TypeScript builds.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Default project name used for backwards compatibility.
|
|
9
|
+
* Projects without an explicit name use this value.
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_PROJECT_NAME = "default";
|
|
12
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shared/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Discord types used by both the local runtime and worker runtime.
|
|
3
|
+
*
|
|
4
|
+
* These are the canonical definitions — runtime modules re-export them
|
|
5
|
+
* so user code can import from "flingit/plugin/discord".
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Discord slash command definition.
|
|
9
|
+
*/
|
|
10
|
+
export interface DiscordSlashCommand {
|
|
11
|
+
/** Command name (1-32 chars, lowercase alphanumeric + hyphens) */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Command description (1-100 chars) */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Command options/arguments */
|
|
16
|
+
options?: DiscordCommandOption[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Discord command option (argument).
|
|
20
|
+
*/
|
|
21
|
+
export interface DiscordCommandOption {
|
|
22
|
+
name: string;
|
|
23
|
+
description: string;
|
|
24
|
+
type: "string" | "integer" | "boolean" | "user" | "channel" | "role";
|
|
25
|
+
required?: boolean;
|
|
26
|
+
choices?: Array<{
|
|
27
|
+
name: string;
|
|
28
|
+
value: string | number;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Discord interaction from a slash command.
|
|
33
|
+
*/
|
|
34
|
+
export interface DiscordInteraction {
|
|
35
|
+
/** Interaction ID */
|
|
36
|
+
id: string;
|
|
37
|
+
/** Interaction type (2 = application command) */
|
|
38
|
+
type: number;
|
|
39
|
+
/** Application ID */
|
|
40
|
+
application_id: string;
|
|
41
|
+
/** Interaction token for responses */
|
|
42
|
+
token: string;
|
|
43
|
+
/** Guild ID if in a server */
|
|
44
|
+
guild_id?: string;
|
|
45
|
+
/** Channel ID */
|
|
46
|
+
channel_id?: string;
|
|
47
|
+
/** Member who triggered (in guilds) */
|
|
48
|
+
member?: {
|
|
49
|
+
user: {
|
|
50
|
+
id: string;
|
|
51
|
+
username: string;
|
|
52
|
+
discriminator: string;
|
|
53
|
+
};
|
|
54
|
+
roles: string[];
|
|
55
|
+
permissions: string;
|
|
56
|
+
};
|
|
57
|
+
/** User who triggered (in DMs) */
|
|
58
|
+
user?: {
|
|
59
|
+
id: string;
|
|
60
|
+
username: string;
|
|
61
|
+
discriminator: string;
|
|
62
|
+
};
|
|
63
|
+
/** Command data */
|
|
64
|
+
data?: {
|
|
65
|
+
id: string;
|
|
66
|
+
name: string;
|
|
67
|
+
type: number;
|
|
68
|
+
options?: Array<{
|
|
69
|
+
name: string;
|
|
70
|
+
type: number;
|
|
71
|
+
value: string | number | boolean;
|
|
72
|
+
}>;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Discord message embed.
|
|
77
|
+
*/
|
|
78
|
+
export interface DiscordEmbed {
|
|
79
|
+
title?: string;
|
|
80
|
+
description?: string;
|
|
81
|
+
color?: number;
|
|
82
|
+
url?: string;
|
|
83
|
+
timestamp?: string;
|
|
84
|
+
footer?: {
|
|
85
|
+
text: string;
|
|
86
|
+
icon_url?: string;
|
|
87
|
+
};
|
|
88
|
+
author?: {
|
|
89
|
+
name: string;
|
|
90
|
+
url?: string;
|
|
91
|
+
icon_url?: string;
|
|
92
|
+
};
|
|
93
|
+
fields?: Array<{
|
|
94
|
+
name: string;
|
|
95
|
+
value: string;
|
|
96
|
+
inline?: boolean;
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Options for sending a message.
|
|
101
|
+
*/
|
|
102
|
+
export interface SendMessageOptions {
|
|
103
|
+
channelId: string;
|
|
104
|
+
content?: string;
|
|
105
|
+
embeds?: DiscordEmbed[];
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Options for editing a message.
|
|
109
|
+
*/
|
|
110
|
+
export interface EditMessageOptions {
|
|
111
|
+
content?: string;
|
|
112
|
+
embeds?: DiscordEmbed[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Options for replying to an interaction.
|
|
116
|
+
*/
|
|
117
|
+
export interface InteractionReplyOptions {
|
|
118
|
+
content?: string;
|
|
119
|
+
embeds?: DiscordEmbed[];
|
|
120
|
+
ephemeral?: boolean;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Discord message response.
|
|
124
|
+
*/
|
|
125
|
+
export interface DiscordMessage {
|
|
126
|
+
id: string;
|
|
127
|
+
channelId: string;
|
|
128
|
+
content: string;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=discord-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord-types.d.ts","sourceRoot":"","sources":["../../src/shared/discord-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Discord types used by both the local runtime and worker runtime.
|
|
3
|
+
*
|
|
4
|
+
* These are the canonical definitions — runtime modules re-export them
|
|
5
|
+
* so user code can import from "flingit/plugin/discord".
|
|
6
|
+
*/
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=discord-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord-types.js","sourceRoot":"","sources":["../../src/shared/discord-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"random-code.d.ts","sourceRoot":"","sources":["../../src/shared/random-code.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C"}
|