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.
Files changed (149) hide show
  1. package/dist/cli/commands/admin.d.ts.map +1 -1
  2. package/dist/cli/commands/admin.js +29 -16
  3. package/dist/cli/commands/admin.js.map +1 -1
  4. package/dist/cli/commands/cron.d.ts.map +1 -1
  5. package/dist/cli/commands/cron.js +7 -3
  6. package/dist/cli/commands/cron.js.map +1 -1
  7. package/dist/cli/commands/db.d.ts.map +1 -1
  8. package/dist/cli/commands/db.js +5 -2
  9. package/dist/cli/commands/db.js.map +1 -1
  10. package/dist/cli/commands/feedback.d.ts.map +1 -1
  11. package/dist/cli/commands/feedback.js +6 -1
  12. package/dist/cli/commands/feedback.js.map +1 -1
  13. package/dist/cli/commands/init.d.ts.map +1 -1
  14. package/dist/cli/commands/init.js +5 -20
  15. package/dist/cli/commands/init.js.map +1 -1
  16. package/dist/cli/commands/launch.d.ts.map +1 -1
  17. package/dist/cli/commands/launch.js +5 -59
  18. package/dist/cli/commands/launch.js.map +1 -1
  19. package/dist/cli/commands/login.d.ts.map +1 -1
  20. package/dist/cli/commands/login.js +7 -2
  21. package/dist/cli/commands/login.js.map +1 -1
  22. package/dist/cli/commands/logs.d.ts.map +1 -1
  23. package/dist/cli/commands/logs.js +3 -1
  24. package/dist/cli/commands/logs.js.map +1 -1
  25. package/dist/cli/commands/onboard.js +1 -1
  26. package/dist/cli/commands/plugin.d.ts +8 -0
  27. package/dist/cli/commands/plugin.d.ts.map +1 -0
  28. package/dist/cli/commands/plugin.js +407 -0
  29. package/dist/cli/commands/plugin.js.map +1 -0
  30. package/dist/cli/commands/project.d.ts.map +1 -1
  31. package/dist/cli/commands/project.js +3 -1
  32. package/dist/cli/commands/project.js.map +1 -1
  33. package/dist/cli/commands/push.d.ts.map +1 -1
  34. package/dist/cli/commands/push.js +88 -11
  35. package/dist/cli/commands/push.js.map +1 -1
  36. package/dist/cli/commands/register.d.ts +25 -0
  37. package/dist/cli/commands/register.d.ts.map +1 -1
  38. package/dist/cli/commands/register.js +30 -13
  39. package/dist/cli/commands/register.js.map +1 -1
  40. package/dist/cli/commands/secret.d.ts +4 -0
  41. package/dist/cli/commands/secret.d.ts.map +1 -1
  42. package/dist/cli/commands/secret.js +11 -22
  43. package/dist/cli/commands/secret.js.map +1 -1
  44. package/dist/cli/commands/storage.d.ts +10 -0
  45. package/dist/cli/commands/storage.d.ts.map +1 -0
  46. package/dist/cli/commands/storage.js +459 -0
  47. package/dist/cli/commands/storage.js.map +1 -0
  48. package/dist/cli/commands/tun.d.ts.map +1 -1
  49. package/dist/cli/commands/tun.js +3 -2
  50. package/dist/cli/commands/tun.js.map +1 -1
  51. package/dist/cli/deploy/bundler.d.ts +15 -0
  52. package/dist/cli/deploy/bundler.d.ts.map +1 -1
  53. package/dist/cli/deploy/bundler.js +86 -2
  54. package/dist/cli/deploy/bundler.js.map +1 -1
  55. package/dist/cli/index.js +4 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/cli/utils/config.d.ts +12 -0
  58. package/dist/cli/utils/config.d.ts.map +1 -1
  59. package/dist/cli/utils/config.js +23 -3
  60. package/dist/cli/utils/config.js.map +1 -1
  61. package/dist/cli/utils/environment.d.ts +12 -0
  62. package/dist/cli/utils/environment.d.ts.map +1 -1
  63. package/dist/cli/utils/environment.js +40 -6
  64. package/dist/cli/utils/environment.js.map +1 -1
  65. package/dist/cli/utils/launch-io-impl.d.ts +13 -0
  66. package/dist/cli/utils/launch-io-impl.d.ts.map +1 -0
  67. package/dist/cli/utils/launch-io-impl.js +51 -0
  68. package/dist/cli/utils/launch-io-impl.js.map +1 -0
  69. package/dist/cli/utils/launch-io.d.ts +42 -0
  70. package/dist/cli/utils/launch-io.d.ts.map +1 -0
  71. package/dist/cli/utils/launch-io.js +8 -0
  72. package/dist/cli/utils/launch-io.js.map +1 -0
  73. package/dist/cli/utils/project-name.d.ts +17 -0
  74. package/dist/cli/utils/project-name.d.ts.map +1 -0
  75. package/dist/cli/utils/project-name.js +33 -0
  76. package/dist/cli/utils/project-name.js.map +1 -0
  77. package/dist/cli/utils/prompt-new-project.d.ts +12 -0
  78. package/dist/cli/utils/prompt-new-project.d.ts.map +1 -0
  79. package/dist/cli/utils/prompt-new-project.js +66 -0
  80. package/dist/cli/utils/prompt-new-project.js.map +1 -0
  81. package/dist/client/assets/index-BqVrS7t9.js +40 -0
  82. package/dist/client/assets/index-DSLUsCtO.css +1 -0
  83. package/dist/client/index.html +14 -0
  84. package/dist/client/vite.svg +1 -0
  85. package/dist/index.d.ts +3 -1
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2 -1
  88. package/dist/index.js.map +1 -1
  89. package/dist/runtime/db.d.ts +5 -0
  90. package/dist/runtime/db.d.ts.map +1 -1
  91. package/dist/runtime/db.js +6 -1
  92. package/dist/runtime/db.js.map +1 -1
  93. package/dist/runtime/discord.d.ts +171 -0
  94. package/dist/runtime/discord.d.ts.map +1 -0
  95. package/dist/runtime/discord.js +192 -0
  96. package/dist/runtime/discord.js.map +1 -0
  97. package/dist/runtime/secrets.d.ts +22 -0
  98. package/dist/runtime/secrets.d.ts.map +1 -1
  99. package/dist/runtime/secrets.js +58 -18
  100. package/dist/runtime/secrets.js.map +1 -1
  101. package/dist/runtime/storage.d.ts +29 -0
  102. package/dist/runtime/storage.d.ts.map +1 -0
  103. package/dist/runtime/storage.js +456 -0
  104. package/dist/runtime/storage.js.map +1 -0
  105. package/dist/shared/constants.d.ts +12 -0
  106. package/dist/shared/constants.d.ts.map +1 -0
  107. package/dist/shared/constants.js +12 -0
  108. package/dist/shared/constants.js.map +1 -0
  109. package/dist/shared/discord-types.d.ts +130 -0
  110. package/dist/shared/discord-types.d.ts.map +1 -0
  111. package/dist/shared/discord-types.js +8 -0
  112. package/dist/shared/discord-types.js.map +1 -0
  113. package/dist/shared/random-code.d.ts +6 -0
  114. package/dist/shared/random-code.d.ts.map +1 -0
  115. package/dist/shared/random-code.js +23 -0
  116. package/dist/shared/random-code.js.map +1 -0
  117. package/dist/types/storage.d.ts +154 -0
  118. package/dist/types/storage.d.ts.map +1 -0
  119. package/dist/types/storage.js +8 -0
  120. package/dist/types/storage.js.map +1 -0
  121. package/dist/worker-runtime/discord.d.ts +61 -0
  122. package/dist/worker-runtime/discord.d.ts.map +1 -0
  123. package/dist/worker-runtime/discord.js +181 -0
  124. package/dist/worker-runtime/discord.js.map +1 -0
  125. package/dist/worker-runtime/index.d.ts +21 -1
  126. package/dist/worker-runtime/index.d.ts.map +1 -1
  127. package/dist/worker-runtime/index.js +102 -0
  128. package/dist/worker-runtime/index.js.map +1 -1
  129. package/package.json +9 -2
  130. package/templates/default/CLAUDE.md +65 -11
  131. package/templates/default/skills/discord/SKILL.md +328 -0
  132. package/templates/default/skills/fling/API.md +208 -0
  133. package/templates/default/skills/fling/SKILL.md +51 -8
  134. package/dist/cli/deploy/worker-entry.d.ts +0 -14
  135. package/dist/cli/deploy/worker-entry.d.ts.map +0 -1
  136. package/dist/cli/deploy/worker-entry.js +0 -60
  137. package/dist/cli/deploy/worker-entry.js.map +0 -1
  138. package/dist/cli/deploy/wrangler-config.d.ts +0 -20
  139. package/dist/cli/deploy/wrangler-config.d.ts.map +0 -1
  140. package/dist/cli/deploy/wrangler-config.js +0 -54
  141. package/dist/cli/deploy/wrangler-config.js.map +0 -1
  142. package/dist/cli/loaders/register-wasm.d.ts +0 -12
  143. package/dist/cli/loaders/register-wasm.d.ts.map +0 -1
  144. package/dist/cli/loaders/register-wasm.js +0 -19
  145. package/dist/cli/loaders/register-wasm.js.map +0 -1
  146. package/dist/cli/loaders/wasm-hooks.d.ts +0 -61
  147. package/dist/cli/loaders/wasm-hooks.d.ts.map +0 -1
  148. package/dist/cli/loaders/wasm-hooks.js +0 -63
  149. package/dist/cli/loaders/wasm-hooks.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/runtime/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/runtime/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Discord integration for Fling applications (Local runtime)
3
+ *
4
+ * Provides helpers for building Discord chatops bots.
5
+ * This is the local development version - the worker version is in worker-runtime.
6
+ *
7
+ * Note: Discord features require the Discord plugin to be installed.
8
+ * Run `fling plugin install discord` to set up.
9
+ */
10
+ import type { Context } from "hono";
11
+ export type { DiscordSlashCommand, DiscordCommandOption, DiscordInteraction, DiscordEmbed, SendMessageOptions, EditMessageOptions, InteractionReplyOptions, DiscordMessage, } from "../shared/discord-types.js";
12
+ import type { DiscordSlashCommand, DiscordInteraction, SendMessageOptions, EditMessageOptions, InteractionReplyOptions, DiscordMessage } from "../shared/discord-types.js";
13
+ /**
14
+ * Discord integration helper.
15
+ *
16
+ * Provides methods for sending messages, handling interactions,
17
+ * and registering slash commands.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { app } from "flingit";
22
+ * import { discord } from "flingit/plugin/discord";
23
+ *
24
+ * // Define slash commands (synced on deploy)
25
+ * export const commands = discord.defineCommands([
26
+ * { name: "deploy", description: "Deploy the current branch" },
27
+ * { name: "status", description: "Show deployment status" }
28
+ * ]);
29
+ *
30
+ * // Handle slash commands
31
+ * app.post("/discord", async (c) => {
32
+ * const interaction = await discord.verifyInteraction(c);
33
+ *
34
+ * if (interaction.data?.name === "deploy") {
35
+ * await discord.replyToInteraction(interaction, {
36
+ * content: "Starting deployment..."
37
+ * });
38
+ * }
39
+ * });
40
+ * ```
41
+ */
42
+ export declare const discord: {
43
+ /**
44
+ * Define slash commands for your project.
45
+ * These are registered with Discord when you run `fling push`.
46
+ *
47
+ * @param commands - Array of command definitions
48
+ * @returns The same array (for export)
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * export const commands = discord.defineCommands([
53
+ * { name: "ping", description: "Check bot latency" },
54
+ * {
55
+ * name: "deploy",
56
+ * description: "Deploy a branch",
57
+ * options: [
58
+ * { name: "branch", type: "string", description: "Branch name", required: true }
59
+ * ]
60
+ * }
61
+ * ]);
62
+ * ```
63
+ */
64
+ defineCommands(commands: DiscordSlashCommand[]): DiscordSlashCommand[];
65
+ /**
66
+ * Verify and parse a Discord interaction from a request.
67
+ * Discord requires interaction verification within 3 seconds.
68
+ *
69
+ * @param c - Hono context from the request
70
+ * @returns Parsed interaction
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * app.post("/discord", async (c) => {
75
+ * const interaction = await discord.verifyInteraction(c);
76
+ * // Handle interaction...
77
+ * });
78
+ * ```
79
+ */
80
+ verifyInteraction(_c: Context): Promise<DiscordInteraction>;
81
+ /**
82
+ * Reply to a Discord interaction.
83
+ * Must be called within 3 seconds of receiving the interaction.
84
+ *
85
+ * @param interaction - The interaction to reply to
86
+ * @param options - Reply content and options
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * await discord.replyToInteraction(interaction, {
91
+ * content: "Command received!",
92
+ * ephemeral: true // Only visible to command user
93
+ * });
94
+ * ```
95
+ */
96
+ replyToInteraction(_interaction: DiscordInteraction, _options: InteractionReplyOptions): void;
97
+ /**
98
+ * Send a message to a Discord channel.
99
+ * The channel must be in a server claimed by your project.
100
+ *
101
+ * @param options - Message content and target channel
102
+ * @returns The sent message
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * const message = await discord.sendMessage({
107
+ * channelId: "123456789",
108
+ * content: "Hello from Fling!",
109
+ * embeds: [{
110
+ * title: "Deployment Complete",
111
+ * description: "Version 1.2.3 is now live",
112
+ * color: 0x00ff00
113
+ * }]
114
+ * });
115
+ * ```
116
+ */
117
+ sendMessage(_options: SendMessageOptions): Promise<DiscordMessage>;
118
+ /**
119
+ * Edit a previously sent message.
120
+ *
121
+ * @param channelId - The channel containing the message
122
+ * @param messageId - The message to edit
123
+ * @param options - New message content
124
+ * @returns The edited message
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * await discord.editMessage(channelId, messageId, {
129
+ * content: "Updated content"
130
+ * });
131
+ * ```
132
+ */
133
+ editMessage(_channelId: string, _messageId: string, _options: EditMessageOptions): Promise<DiscordMessage>;
134
+ /**
135
+ * Add a reaction to a message.
136
+ *
137
+ * @param channelId - The channel containing the message
138
+ * @param messageId - The message to react to
139
+ * @param emoji - The emoji to add (unicode or custom emoji format)
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * await discord.addReaction(channelId, messageId, "✅");
144
+ * await discord.addReaction(channelId, messageId, "🚀");
145
+ * ```
146
+ */
147
+ addReaction(_channelId: string, _messageId: string, _emoji: string): Promise<void>;
148
+ /**
149
+ * Send a followup message to an interaction.
150
+ * Use this after the initial reply for additional messages.
151
+ *
152
+ * @param interaction - The original interaction
153
+ * @param options - Followup message content
154
+ * @returns The sent message
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * // Initial reply
159
+ * await discord.replyToInteraction(interaction, { content: "Processing..." });
160
+ *
161
+ * // Do some work...
162
+ *
163
+ * // Send followup
164
+ * await discord.sendFollowup(interaction, {
165
+ * content: "Done! Here are the results..."
166
+ * });
167
+ * ```
168
+ */
169
+ sendFollowup(_interaction: DiscordInteraction, _options: InteractionReplyOptions): Promise<DiscordMessage>;
170
+ };
171
+ //# sourceMappingURL=discord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/runtime/discord.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGpC,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,GACf,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACf,MAAM,4BAA4B,CAAC;AAgBpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,OAAO;IAClB;;;;;;;;;;;;;;;;;;;;OAoBG;6BACsB,mBAAmB,EAAE,GAAG,mBAAmB,EAAE;IAItE;;;;;;;;;;;;;;OAcG;0BACyB,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE;;;;;;;;;;;;;;OAcG;qCAEa,kBAAkB,YACtB,uBAAuB,GAChC,IAAI;IAIP;;;;;;;;;;;;;;;;;;;OAmBG;0BACyB,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAIxE;;;;;;;;;;;;;;OAcG;4BAEW,MAAM,cACN,MAAM,YACR,kBAAkB,GAC3B,OAAO,CAAC,cAAc,CAAC;IAI1B;;;;;;;;;;;;OAYG;4BAEW,MAAM,cACN,MAAM,UACV,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;;;;;;;;;;;;;;;;OAoBG;+BAEa,kBAAkB,YACtB,uBAAuB,GAChC,OAAO,CAAC,cAAc,CAAC;CAG3B,CAAC"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Discord integration for Fling applications (Local runtime)
3
+ *
4
+ * Provides helpers for building Discord chatops bots.
5
+ * This is the local development version - the worker version is in worker-runtime.
6
+ *
7
+ * Note: Discord features require the Discord plugin to be installed.
8
+ * Run `fling plugin install discord` to set up.
9
+ */
10
+ // =============================================================================
11
+ // Discord API (Local Runtime - Stubs)
12
+ // =============================================================================
13
+ /**
14
+ * Local runtime warning - Discord features only work in deployed workers.
15
+ */
16
+ function localRuntimeWarning(method) {
17
+ throw new Error(`discord.${method}() is only available in deployed workers. ` +
18
+ "Use 'fling push' to deploy, then test your Discord integration.");
19
+ }
20
+ /**
21
+ * Discord integration helper.
22
+ *
23
+ * Provides methods for sending messages, handling interactions,
24
+ * and registering slash commands.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { app } from "flingit";
29
+ * import { discord } from "flingit/plugin/discord";
30
+ *
31
+ * // Define slash commands (synced on deploy)
32
+ * export const commands = discord.defineCommands([
33
+ * { name: "deploy", description: "Deploy the current branch" },
34
+ * { name: "status", description: "Show deployment status" }
35
+ * ]);
36
+ *
37
+ * // Handle slash commands
38
+ * app.post("/discord", async (c) => {
39
+ * const interaction = await discord.verifyInteraction(c);
40
+ *
41
+ * if (interaction.data?.name === "deploy") {
42
+ * await discord.replyToInteraction(interaction, {
43
+ * content: "Starting deployment..."
44
+ * });
45
+ * }
46
+ * });
47
+ * ```
48
+ */
49
+ export const discord = {
50
+ /**
51
+ * Define slash commands for your project.
52
+ * These are registered with Discord when you run `fling push`.
53
+ *
54
+ * @param commands - Array of command definitions
55
+ * @returns The same array (for export)
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * export const commands = discord.defineCommands([
60
+ * { name: "ping", description: "Check bot latency" },
61
+ * {
62
+ * name: "deploy",
63
+ * description: "Deploy a branch",
64
+ * options: [
65
+ * { name: "branch", type: "string", description: "Branch name", required: true }
66
+ * ]
67
+ * }
68
+ * ]);
69
+ * ```
70
+ */
71
+ defineCommands(commands) {
72
+ return commands;
73
+ },
74
+ /**
75
+ * Verify and parse a Discord interaction from a request.
76
+ * Discord requires interaction verification within 3 seconds.
77
+ *
78
+ * @param c - Hono context from the request
79
+ * @returns Parsed interaction
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * app.post("/discord", async (c) => {
84
+ * const interaction = await discord.verifyInteraction(c);
85
+ * // Handle interaction...
86
+ * });
87
+ * ```
88
+ */
89
+ async verifyInteraction(_c) {
90
+ localRuntimeWarning("verifyInteraction");
91
+ },
92
+ /**
93
+ * Reply to a Discord interaction.
94
+ * Must be called within 3 seconds of receiving the interaction.
95
+ *
96
+ * @param interaction - The interaction to reply to
97
+ * @param options - Reply content and options
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * await discord.replyToInteraction(interaction, {
102
+ * content: "Command received!",
103
+ * ephemeral: true // Only visible to command user
104
+ * });
105
+ * ```
106
+ */
107
+ replyToInteraction(_interaction, _options) {
108
+ localRuntimeWarning("replyToInteraction");
109
+ },
110
+ /**
111
+ * Send a message to a Discord channel.
112
+ * The channel must be in a server claimed by your project.
113
+ *
114
+ * @param options - Message content and target channel
115
+ * @returns The sent message
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const message = await discord.sendMessage({
120
+ * channelId: "123456789",
121
+ * content: "Hello from Fling!",
122
+ * embeds: [{
123
+ * title: "Deployment Complete",
124
+ * description: "Version 1.2.3 is now live",
125
+ * color: 0x00ff00
126
+ * }]
127
+ * });
128
+ * ```
129
+ */
130
+ async sendMessage(_options) {
131
+ localRuntimeWarning("sendMessage");
132
+ },
133
+ /**
134
+ * Edit a previously sent message.
135
+ *
136
+ * @param channelId - The channel containing the message
137
+ * @param messageId - The message to edit
138
+ * @param options - New message content
139
+ * @returns The edited message
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * await discord.editMessage(channelId, messageId, {
144
+ * content: "Updated content"
145
+ * });
146
+ * ```
147
+ */
148
+ async editMessage(_channelId, _messageId, _options) {
149
+ localRuntimeWarning("editMessage");
150
+ },
151
+ /**
152
+ * Add a reaction to a message.
153
+ *
154
+ * @param channelId - The channel containing the message
155
+ * @param messageId - The message to react to
156
+ * @param emoji - The emoji to add (unicode or custom emoji format)
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * await discord.addReaction(channelId, messageId, "✅");
161
+ * await discord.addReaction(channelId, messageId, "🚀");
162
+ * ```
163
+ */
164
+ async addReaction(_channelId, _messageId, _emoji) {
165
+ localRuntimeWarning("addReaction");
166
+ },
167
+ /**
168
+ * Send a followup message to an interaction.
169
+ * Use this after the initial reply for additional messages.
170
+ *
171
+ * @param interaction - The original interaction
172
+ * @param options - Followup message content
173
+ * @returns The sent message
174
+ *
175
+ * @example
176
+ * ```typescript
177
+ * // Initial reply
178
+ * await discord.replyToInteraction(interaction, { content: "Processing..." });
179
+ *
180
+ * // Do some work...
181
+ *
182
+ * // Send followup
183
+ * await discord.sendFollowup(interaction, {
184
+ * content: "Done! Here are the results..."
185
+ * });
186
+ * ```
187
+ */
188
+ async sendFollowup(_interaction, _options) {
189
+ localRuntimeWarning("sendFollowup");
190
+ },
191
+ };
192
+ //# sourceMappingURL=discord.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord.js","sourceRoot":"","sources":["../../src/runtime/discord.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAyBH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAc;IACzC,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,4CAA4C;QAC3D,iEAAiE,CACpE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,cAAc,CAAC,QAA+B;QAC5C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,iBAAiB,CAAC,EAAW;QACjC,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,kBAAkB,CAChB,YAAgC,EAChC,QAAiC;QAEjC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,CAAC,WAAW,CAAC,QAA4B;QAC5C,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,WAAW,CACf,UAAkB,EAClB,UAAkB,EAClB,QAA4B;QAE5B,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,WAAW,CACf,UAAkB,EAClB,UAAkB,EAClB,MAAc;QAEd,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,YAAY,CAChB,YAAgC,EAChC,QAAiC;QAEjC,mBAAmB,CAAC,cAAc,CAAC,CAAC;IACtC,CAAC;CACF,CAAC"}
@@ -4,6 +4,28 @@
4
4
  * Secrets are retrieved by name. If a secret is not set,
5
5
  * Fling throws an error immediately - no default values.
6
6
  */
7
+ /**
8
+ * Get the secrets file path.
9
+ */
10
+ export declare function getSecretsPath(): string;
11
+ /**
12
+ * Set secrets path. Used for testing.
13
+ */
14
+ export declare function setSecretsPath(path: string): void;
15
+ /**
16
+ * Reset secrets path to default behavior. Used for testing.
17
+ */
18
+ export declare function resetSecretsPath(): void;
19
+ /**
20
+ * Parse secrets from file content.
21
+ * Exported for use by CLI and other tools.
22
+ */
23
+ export declare function parseSecretsContent(content: string): Map<string, string>;
24
+ /**
25
+ * Read secrets from file without caching.
26
+ * Exported for use by CLI which needs fresh reads.
27
+ */
28
+ export declare function readSecretsFile(): Map<string, string>;
7
29
  /**
8
30
  * Secrets interface for retrieving credentials
9
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqCH;;GAEG;AACH,eAAO,MAAM,OAAO;IAClB;;;;;;;;;;;;;;OAcG;cACO,MAAM,GAAG,MAAM;IAazB;;OAEG;cACO,MAAM,GAAG,OAAO;IAK1B;;OAEG;kBACW,IAAI;CAGnB,CAAC"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAexE;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOrD;AAUD;;GAEG;AACH,eAAO,MAAM,OAAO;IAClB;;;;;;;;;;;;;;OAcG;cACO,MAAM,GAAG,MAAM;IAazB;;OAEG;cACO,MAAM,GAAG,OAAO;IAK1B;;OAEG;kBACW,IAAI;CAGnB,CAAC"}
@@ -6,29 +6,69 @@
6
6
  */
7
7
  import { existsSync, readFileSync } from "node:fs";
8
8
  import { join } from "node:path";
9
- // Secrets file path
10
- const SECRETS_PATH = process.env["FLING_SECRETS_PATH"] ?? join(process.cwd(), ".fling", "secrets");
9
+ // Secrets file path - configurable via environment or setter
10
+ let _secretsPath = null;
11
+ /**
12
+ * Get the secrets file path.
13
+ */
14
+ export function getSecretsPath() {
15
+ if (_secretsPath !== null) {
16
+ return _secretsPath;
17
+ }
18
+ return process.env["FLING_SECRETS_PATH"] ?? join(process.cwd(), ".fling", "secrets");
19
+ }
20
+ /**
21
+ * Set secrets path. Used for testing.
22
+ */
23
+ export function setSecretsPath(path) {
24
+ _secretsPath = path;
25
+ secretsCache = null; // Invalidate cache when path changes
26
+ }
27
+ /**
28
+ * Reset secrets path to default behavior. Used for testing.
29
+ */
30
+ export function resetSecretsPath() {
31
+ _secretsPath = null;
32
+ secretsCache = null;
33
+ }
11
34
  let secretsCache = null;
35
+ /**
36
+ * Parse secrets from file content.
37
+ * Exported for use by CLI and other tools.
38
+ */
39
+ export function parseSecretsContent(content) {
40
+ const secrets = new Map();
41
+ for (const line of content.split("\n")) {
42
+ const trimmed = line.trim();
43
+ if (!trimmed || trimmed.startsWith("#")) {
44
+ continue;
45
+ }
46
+ const eqIndex = trimmed.indexOf("=");
47
+ if (eqIndex > 0) {
48
+ const key = trimmed.slice(0, eqIndex);
49
+ const value = trimmed.slice(eqIndex + 1);
50
+ secrets.set(key, value);
51
+ }
52
+ }
53
+ return secrets;
54
+ }
55
+ /**
56
+ * Read secrets from file without caching.
57
+ * Exported for use by CLI which needs fresh reads.
58
+ */
59
+ export function readSecretsFile() {
60
+ const path = getSecretsPath();
61
+ if (!existsSync(path)) {
62
+ return new Map();
63
+ }
64
+ const content = readFileSync(path, "utf-8");
65
+ return parseSecretsContent(content);
66
+ }
12
67
  function loadSecrets() {
13
68
  if (secretsCache) {
14
69
  return secretsCache;
15
70
  }
16
- secretsCache = new Map();
17
- if (existsSync(SECRETS_PATH)) {
18
- const content = readFileSync(SECRETS_PATH, "utf-8");
19
- for (const line of content.split("\n")) {
20
- const trimmed = line.trim();
21
- if (!trimmed || trimmed.startsWith("#")) {
22
- continue;
23
- }
24
- const eqIndex = trimmed.indexOf("=");
25
- if (eqIndex > 0) {
26
- const key = trimmed.slice(0, eqIndex);
27
- const value = trimmed.slice(eqIndex + 1);
28
- secretsCache.set(key, value);
29
- }
30
- }
31
- }
71
+ secretsCache = readSecretsFile();
32
72
  return secretsCache;
33
73
  }
34
74
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,oBAAoB;AACpB,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEhF,IAAI,YAAY,GAA+B,IAAI,CAAC;AAEpD,SAAS,WAAW;IAClB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAEzB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACzC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;;;;;;;;;;;;;;OAcG;IACH,GAAG,CAAC,IAAY;QACd,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,uCAAuC,IAAI,UAAU,CACrE,CAAC;QACJ,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY;QACd,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/runtime/secrets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
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 type { Storage } from "../types/storage.js";
17
+ /**
18
+ * Set storage path. Used for testing.
19
+ */
20
+ export declare function setStoragePath(path: string): void;
21
+ /**
22
+ * Reset storage path to default behavior. Used for testing.
23
+ */
24
+ export declare function resetStoragePath(): void;
25
+ /**
26
+ * Local filesystem storage implementation.
27
+ */
28
+ export declare const storage: Storage;
29
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/runtime/storage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAeH,OAAO,KAAK,EACV,OAAO,EAIR,MAAM,qBAAqB,CAAC;AAe7B;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAgOD;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,OA+OrB,CAAC"}