flingit 0.0.19 → 0.0.22

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 (58) hide show
  1. package/dist/cli/commands/dev.d.ts.map +1 -1
  2. package/dist/cli/commands/dev.js +9 -0
  3. package/dist/cli/commands/dev.js.map +1 -1
  4. package/dist/cli/commands/plugin.d.ts +3 -10
  5. package/dist/cli/commands/plugin.d.ts.map +1 -1
  6. package/dist/cli/commands/plugin.js +103 -209
  7. package/dist/cli/commands/plugin.js.map +1 -1
  8. package/dist/cli/commands/push.d.ts +5 -0
  9. package/dist/cli/commands/push.d.ts.map +1 -1
  10. package/dist/cli/commands/push.js +21 -33
  11. package/dist/cli/commands/push.js.map +1 -1
  12. package/dist/cli/deploy/bundler.d.ts +19 -9
  13. package/dist/cli/deploy/bundler.d.ts.map +1 -1
  14. package/dist/cli/deploy/bundler.js +168 -69
  15. package/dist/cli/deploy/bundler.js.map +1 -1
  16. package/dist/cli/utils/config.d.ts +12 -4
  17. package/dist/cli/utils/config.d.ts.map +1 -1
  18. package/dist/cli/utils/config.js +49 -6
  19. package/dist/cli/utils/config.js.map +1 -1
  20. package/dist/runtime/discord.d.ts +20 -58
  21. package/dist/runtime/discord.d.ts.map +1 -1
  22. package/dist/runtime/discord.js +22 -59
  23. package/dist/runtime/discord.js.map +1 -1
  24. package/dist/runtime/slack.d.ts +83 -0
  25. package/dist/runtime/slack.d.ts.map +1 -0
  26. package/dist/runtime/slack.js +87 -0
  27. package/dist/runtime/slack.js.map +1 -0
  28. package/dist/shared/discord-types.d.ts +23 -24
  29. package/dist/shared/discord-types.d.ts.map +1 -1
  30. package/dist/shared/plugin-metadata.d.ts +28 -0
  31. package/dist/shared/plugin-metadata.d.ts.map +1 -0
  32. package/dist/shared/plugin-metadata.js +65 -0
  33. package/dist/shared/plugin-metadata.js.map +1 -0
  34. package/dist/shared/slack-types.d.ts +61 -0
  35. package/dist/shared/slack-types.d.ts.map +1 -0
  36. package/dist/shared/slack-types.js +8 -0
  37. package/dist/shared/slack-types.js.map +1 -0
  38. package/dist/worker-runtime/discord.d.ts +80 -27
  39. package/dist/worker-runtime/discord.d.ts.map +1 -1
  40. package/dist/worker-runtime/discord.js +163 -108
  41. package/dist/worker-runtime/discord.js.map +1 -1
  42. package/dist/worker-runtime/index.d.ts +1 -1
  43. package/dist/worker-runtime/index.d.ts.map +1 -1
  44. package/dist/worker-runtime/index.js +0 -4
  45. package/dist/worker-runtime/index.js.map +1 -1
  46. package/dist/worker-runtime/plugin-common.d.ts +27 -0
  47. package/dist/worker-runtime/plugin-common.d.ts.map +1 -0
  48. package/dist/worker-runtime/plugin-common.js +91 -0
  49. package/dist/worker-runtime/plugin-common.js.map +1 -0
  50. package/dist/worker-runtime/slack.d.ts +67 -0
  51. package/dist/worker-runtime/slack.d.ts.map +1 -0
  52. package/dist/worker-runtime/slack.js +135 -0
  53. package/dist/worker-runtime/slack.js.map +1 -0
  54. package/package.json +8 -1
  55. package/templates/default/skills/fling/.hash +1 -1
  56. package/templates/default/skills/fling/DISCORD.md +112 -122
  57. package/templates/default/skills/fling/SKILL.md +7 -1
  58. package/templates/default/skills/fling/SLACK.md +214 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Shared helpers for plugin worker-runtime modules.
3
+ *
4
+ * Extracts the common plumbing (service binding fetch, identity tokens,
5
+ * HMAC signing, error parsing) so each plugin module only contains
6
+ * plugin-specific logic.
7
+ */
8
+ import { __getEnv } from "./index.js";
9
+ /**
10
+ * Create a pluginFetch function bound to a specific service binding name.
11
+ *
12
+ * @param bindingName - The env binding name (e.g., "DISCORD_PLUGIN")
13
+ */
14
+ export function createPluginFetch(bindingName) {
15
+ return function pluginFetch(path, init) {
16
+ const env = __getEnv();
17
+ const binding = env[bindingName];
18
+ if (binding === null || binding === undefined || typeof binding["fetch"] !== "function") {
19
+ throw new Error(`${bindingName} service binding not available. ` +
20
+ "Re-deploy your project with 'fling push' to get the latest bindings.");
21
+ }
22
+ return binding.fetch(`https://plugin${path}`, init);
23
+ };
24
+ }
25
+ // ═══════════════════════════════════════════════════════
26
+ // HMAC + IDENTITY TOKENS
27
+ // ═══════════════════════════════════════════════════════
28
+ export async function hmacSha256(secret, message) {
29
+ const encoder = new TextEncoder();
30
+ const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
31
+ const signature = await crypto.subtle.sign("HMAC", key, encoder.encode(message));
32
+ return Array.from(new Uint8Array(signature))
33
+ .map((b) => b.toString(16).padStart(2, "0"))
34
+ .join("");
35
+ }
36
+ export async function generateIdentityToken() {
37
+ const env = __getEnv();
38
+ const projectId = env["FLING_PROJECT_ID"];
39
+ const workerSecret = env["FLING_WORKER_SECRET"];
40
+ const projectIdStr = typeof projectId === "string" ? projectId :
41
+ typeof projectId === "number" ? String(projectId) : "";
42
+ const secretStr = typeof workerSecret === "string" ? workerSecret : "";
43
+ if (!secretStr) {
44
+ throw new Error("FLING_WORKER_SECRET not available. Re-deploy your project with 'fling push' to get the latest configuration.");
45
+ }
46
+ const timestamp = Date.now();
47
+ const payload = `${projectIdStr}.${timestamp}`;
48
+ const signature = await hmacSha256(secretStr, payload);
49
+ return `${payload}.${signature}`;
50
+ }
51
+ let cachedIdentityToken = null;
52
+ const TOKEN_CACHE_TTL_MS = 30_000;
53
+ export async function getProjectHeaders() {
54
+ const now = Date.now();
55
+ if (!cachedIdentityToken || cachedIdentityToken.expiresAt <= now) {
56
+ const token = await generateIdentityToken();
57
+ cachedIdentityToken = { token, expiresAt: now + TOKEN_CACHE_TTL_MS };
58
+ }
59
+ return {
60
+ "X-Fling-Identity": cachedIdentityToken.token,
61
+ "Content-Type": "application/json",
62
+ };
63
+ }
64
+ // ═══════════════════════════════════════════════════════
65
+ // ERROR RESPONSE PARSING
66
+ // ═══════════════════════════════════════════════════════
67
+ /**
68
+ * Parse an error response and throw with a descriptive message.
69
+ * Handles both JSON and non-JSON error bodies gracefully.
70
+ */
71
+ export async function throwResponseError(response, defaultMessage) {
72
+ const text = await response.text();
73
+ try {
74
+ const json = JSON.parse(text);
75
+ throw new Error(json.error ?? defaultMessage);
76
+ }
77
+ catch (e) {
78
+ if (e instanceof SyntaxError) {
79
+ throw new Error(`${defaultMessage} (HTTP ${response.status}): ${text}`);
80
+ }
81
+ throw e;
82
+ }
83
+ }
84
+ /**
85
+ * Reset the identity token cache. Exposed for testing only.
86
+ * @internal
87
+ */
88
+ export function __resetTokenCache() {
89
+ cachedIdentityToken = null;
90
+ }
91
+ //# sourceMappingURL=plugin-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-common.js","sourceRoot":"","sources":["../../src/worker-runtime/plugin-common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Fling Worker Runtime - Slack Integration
3
+ *
4
+ * Worker-compatible Slack runtime for Cloudflare Workers deployment.
5
+ * This module provides Slack-specific exports for the worker environment.
6
+ *
7
+ * Used via the "flingit/plugin/slack" subpath export.
8
+ */
9
+ export type { SlackEvent, SlackBlock, SlackMessage, SendMessageOptions, EditMessageOptions, } from "../shared/slack-types.js";
10
+ import type { SlackEvent, SlackMessage, SendMessageOptions, EditMessageOptions } from "../shared/slack-types.js";
11
+ /**
12
+ * An app mention event from Slack.
13
+ */
14
+ export interface MentionEvent {
15
+ type: "app_mention";
16
+ channel: string;
17
+ user: string;
18
+ text: string;
19
+ ts: string;
20
+ thread_ts?: string;
21
+ team?: string;
22
+ }
23
+ type MentionHandler = (event: MentionEvent) => Promise<void> | void;
24
+ type GenericEventHandler = (event: SlackEvent) => Promise<void> | void;
25
+ /**
26
+ * Internal: Route an event to the appropriate handler.
27
+ */
28
+ export declare function __handleSlackEvent(event: SlackEvent): Promise<void>;
29
+ /**
30
+ * Common entry point for the bundler-generated worker.
31
+ */
32
+ export declare function __handlePluginRequest(request: Request): Promise<Response>;
33
+ export declare const slack: {
34
+ /**
35
+ * Register a handler for @mentions of your bot.
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * slack.onMention(async (event) => {
40
+ * await slack.sendMessage({
41
+ * channelId: event.channel,
42
+ * threadTs: event.ts,
43
+ * text: "Hey! How can I help?",
44
+ * });
45
+ * });
46
+ * ```
47
+ */
48
+ onMention(handler: MentionHandler): void;
49
+ /**
50
+ * Register a fallback handler for events that aren't handled by other handlers.
51
+ * Use this for advanced cases where you need to handle raw events.
52
+ */
53
+ onEvent(handler: GenericEventHandler): void;
54
+ /**
55
+ * Send a message to a Slack channel.
56
+ */
57
+ sendMessage(options: SendMessageOptions): Promise<SlackMessage>;
58
+ /**
59
+ * Edit a message.
60
+ */
61
+ editMessage(channelId: string, ts: string, options: EditMessageOptions): Promise<SlackMessage>;
62
+ /**
63
+ * Add a reaction to a message.
64
+ */
65
+ addReaction(channelId: string, ts: string, emoji: string): Promise<void>;
66
+ };
67
+ //# sourceMappingURL=slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/worker-runtime/slack.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,YAAY,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAMlC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAgBD,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpE,KAAK,mBAAmB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAMvE;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAczE;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAa/E;AAED,eAAO,MAAM,KAAK;IAChB;;;;;;;;;;;;;OAaG;uBACgB,cAAc,GAAG,IAAI;IAIxC;;;OAGG;qBACc,mBAAmB,GAAG,IAAI;IAI3C;;OAEG;yBACwB,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBrE;;OAEG;2BAEU,MAAM,MACb,MAAM,WACD,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC;IAiBxB;;OAEG;2BAC0B,MAAM,MAAM,MAAM,SAAS,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAa/E,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Fling Worker Runtime - Slack Integration
3
+ *
4
+ * Worker-compatible Slack runtime for Cloudflare Workers deployment.
5
+ * This module provides Slack-specific exports for the worker environment.
6
+ *
7
+ * Used via the "flingit/plugin/slack" subpath export.
8
+ */
9
+ import { getPluginMeta } from "../shared/plugin-metadata.js";
10
+ import { createPluginFetch, getProjectHeaders, throwResponseError } from "./plugin-common.js";
11
+ // ═══════════════════════════════════════════════════════
12
+ // INTERNAL HELPERS
13
+ // ═══════════════════════════════════════════════════════
14
+ // Service binding name from plugin metadata (single source of truth)
15
+ const meta = getPluginMeta("slack");
16
+ if (!meta)
17
+ throw new Error("slack plugin not found in metadata registry");
18
+ const pluginFetch = createPluginFetch(meta.serviceBinding);
19
+ // Registered handlers
20
+ let _mentionHandler = null;
21
+ let _fallbackHandler = null;
22
+ /**
23
+ * Internal: Route an event to the appropriate handler.
24
+ */
25
+ export async function __handleSlackEvent(event) {
26
+ // Handle app mentions
27
+ if (event.type === "event_callback") {
28
+ const innerEvent = event.event;
29
+ if (innerEvent?.type === "app_mention" && _mentionHandler) {
30
+ await _mentionHandler(innerEvent);
31
+ return;
32
+ }
33
+ }
34
+ // Fallback handler
35
+ if (_fallbackHandler) {
36
+ await _fallbackHandler(event);
37
+ }
38
+ }
39
+ // ═══════════════════════════════════════════════════════
40
+ // PUBLIC API
41
+ // ═══════════════════════════════════════════════════════
42
+ /**
43
+ * Common entry point for the bundler-generated worker.
44
+ */
45
+ export async function __handlePluginRequest(request) {
46
+ const event = await request.json();
47
+ try {
48
+ await __handleSlackEvent(event);
49
+ return new Response(JSON.stringify({ ok: true }), {
50
+ headers: { "Content-Type": "application/json" },
51
+ });
52
+ }
53
+ catch (error) {
54
+ console.error("Slack event handler error:", error);
55
+ return new Response(JSON.stringify({ ok: true }), {
56
+ headers: { "Content-Type": "application/json" },
57
+ });
58
+ }
59
+ }
60
+ export const slack = {
61
+ /**
62
+ * Register a handler for @mentions of your bot.
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * slack.onMention(async (event) => {
67
+ * await slack.sendMessage({
68
+ * channelId: event.channel,
69
+ * threadTs: event.ts,
70
+ * text: "Hey! How can I help?",
71
+ * });
72
+ * });
73
+ * ```
74
+ */
75
+ onMention(handler) {
76
+ _mentionHandler = handler;
77
+ },
78
+ /**
79
+ * Register a fallback handler for events that aren't handled by other handlers.
80
+ * Use this for advanced cases where you need to handle raw events.
81
+ */
82
+ onEvent(handler) {
83
+ _fallbackHandler = handler;
84
+ },
85
+ /**
86
+ * Send a message to a Slack channel.
87
+ */
88
+ async sendMessage(options) {
89
+ const response = await pluginFetch("/proxy/messages", {
90
+ method: "POST",
91
+ headers: await getProjectHeaders(),
92
+ body: JSON.stringify({
93
+ channelId: options.channelId,
94
+ text: options.text,
95
+ blocks: options.blocks,
96
+ threadTs: options.threadTs,
97
+ }),
98
+ });
99
+ if (!response.ok) {
100
+ await throwResponseError(response, "Failed to send message");
101
+ }
102
+ return response.json();
103
+ },
104
+ /**
105
+ * Edit a message.
106
+ */
107
+ async editMessage(channelId, ts, options) {
108
+ const response = await pluginFetch(`/proxy/messages/${channelId}/${ts}`, {
109
+ method: "PATCH",
110
+ headers: await getProjectHeaders(),
111
+ body: JSON.stringify({
112
+ text: options.text,
113
+ blocks: options.blocks,
114
+ }),
115
+ });
116
+ if (!response.ok) {
117
+ await throwResponseError(response, "Failed to edit message");
118
+ }
119
+ return response.json();
120
+ },
121
+ /**
122
+ * Add a reaction to a message.
123
+ */
124
+ async addReaction(channelId, ts, emoji) {
125
+ const encodedEmoji = encodeURIComponent(emoji);
126
+ const response = await pluginFetch(`/proxy/reactions/${channelId}/${ts}/${encodedEmoji}`, {
127
+ method: "PUT",
128
+ headers: await getProjectHeaders(),
129
+ });
130
+ if (!response.ok) {
131
+ await throwResponseError(response, "Failed to add reaction");
132
+ }
133
+ },
134
+ };
135
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/worker-runtime/slack.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flingit",
3
- "version": "0.0.19",
3
+ "version": "0.0.22",
4
4
  "description": "Personal Software Platform - Build and deploy personal tools through conversation",
5
5
  "type": "module",
6
6
  "engines": {
@@ -24,6 +24,12 @@
24
24
  "import": "./dist/runtime/discord.js",
25
25
  "default": "./dist/runtime/discord.js"
26
26
  },
27
+ "./plugin/slack": {
28
+ "workerd": "./dist/worker-runtime/slack.js",
29
+ "types": "./dist/runtime/slack.d.ts",
30
+ "import": "./dist/runtime/slack.js",
31
+ "default": "./dist/runtime/slack.js"
32
+ },
27
33
  "./worker-runtime": {
28
34
  "types": "./dist/worker-runtime/index.d.ts",
29
35
  "import": "./dist/worker-runtime/index.js"
@@ -71,6 +77,7 @@
71
77
  "zod": "^3.25.76"
72
78
  },
73
79
  "devDependencies": {
80
+ "@cloudflare/workers-types": "^4.0.0",
74
81
  "@eslint/js": "^9.39.2",
75
82
  "@types/better-sqlite3": "^7.6.12",
76
83
  "@types/node": "^24.10.9",
@@ -1 +1 @@
1
- 0c819de03c00959a7d8ccbeeb548a9f4
1
+ dd33c214c5af4499ac2d2f5ce4c3ff1e