{"version":3,"sources":["../src/schemas/index.ts","../src/schemas/settings.ts","../src/schemas/mapping.ts","../src/examples/index.ts","../src/examples/env.ts","../src/examples/step.ts"],"sourcesContent":["import { zodToSchema } from '@walkeros/core/dev';\nimport { SettingsSchema } from './settings';\nimport { MappingSchema } from './mapping';\n\nexport { SettingsSchema, type Settings } from './settings';\nexport { MappingSchema, type Mapping } from './mapping';\n\n// JSON Schema\nexport const settings = zodToSchema(SettingsSchema);\nexport const mapping = zodToSchema(MappingSchema);\n","import { z } from '@walkeros/core/dev';\n\nexport const SettingsSchema = z\n  .object({\n    token: z\n      .string()\n      .startsWith('xoxb-')\n      .describe(\n        'Slack Bot token (xoxb-...). Enables Web API mode. Mutually exclusive with webhookUrl.',\n      )\n      .optional(),\n    webhookUrl: z\n      .string()\n      .url()\n      .describe(\n        'Incoming Webhook URL. Enables webhook mode. Mutually exclusive with token.',\n      )\n      .optional(),\n    channel: z\n      .string()\n      .describe(\n        'Default Slack channel ID or name (e.g. \"#alerts\" or \"C024BE91L\"). Required for Web API mode unless every rule supplies one. Ignored in webhook mode.',\n      )\n      .optional(),\n    text: z\n      .string()\n      .describe(\n        'Default text template. Supports `${data.field}` interpolation against the walkerOS event.',\n      )\n      .optional(),\n    blocks: z\n      .array(z.record(z.string(), z.unknown()))\n      .describe(\n        'Default Block Kit blocks applied when no mapping override is set.',\n      )\n      .optional(),\n    includeHeader: z\n      .boolean()\n      .describe(\n        'Auto-add an event-name header block when generating default blocks. Default: true.',\n      )\n      .optional(),\n    unfurlLinks: z\n      .boolean()\n      .describe(\n        'Enable link unfurling. Default: false (cleaner for automated alerts).',\n      )\n      .optional(),\n    unfurlMedia: z\n      .boolean()\n      .describe('Enable media unfurling. Default: false.')\n      .optional(),\n    mrkdwn: z\n      .boolean()\n      .describe('Use mrkdwn formatting in text. Default: true.')\n      .optional(),\n    threadTs: z\n      .string()\n      .describe(\n        'Static thread_ts for replies (rarely set at destination level).',\n      )\n      .optional(),\n    retryConfig: z\n      .enum(['default', 'fiveRetriesInFiveMinutes', 'none'])\n      .describe('Retry policy passed to WebClient. Default: \"default\".')\n      .optional(),\n  })\n  .refine((v) => Boolean(v.token) !== Boolean(v.webhookUrl), {\n    message: 'Provide exactly one of `token` or `webhookUrl`.',\n  });\n\nexport type Settings = z.infer<typeof SettingsSchema>;\n","import { z } from '@walkeros/core/dev';\n\nexport const MappingSchema = z.object({\n  channel: z\n    .string()\n    .describe(\n      'Override the destination channel for this rule. Web API mode only -- ignored in webhook mode.',\n    )\n    .optional(),\n  text: z\n    .string()\n    .describe(\n      'Override the text template for this rule. Supports `${data.field}` interpolation.',\n    )\n    .optional(),\n  blocks: z\n    .array(z.record(z.string(), z.unknown()))\n    .describe('Override Block Kit blocks for this rule.')\n    .optional(),\n  threadTs: z\n    .string()\n    .describe('thread_ts for posting as a reply in a thread.')\n    .optional(),\n  replyBroadcast: z\n    .boolean()\n    .describe('Also broadcast the threaded reply back to the channel.')\n    .optional(),\n  ephemeral: z\n    .boolean()\n    .describe('Send via chat.postEphemeral. Requires `user`.')\n    .optional(),\n  user: z\n    .string()\n    .describe('Slack user ID for ephemeral or DM delivery.')\n    .optional(),\n  dm: z\n    .boolean()\n    .describe(\n      'Send as DM via conversations.open + chat.postMessage. Requires `user`.',\n    )\n    .optional(),\n});\n\nexport type Mapping = z.infer<typeof MappingSchema>;\n","export * as env from './env';\nexport * as step from './step';\n","import type { Env, SlackClientMock } from '../types';\n\nconst okMessageResponse = {\n  ok: true as const,\n  channel: 'CMOCK',\n  ts: '1700000000.000100',\n};\n\nconst okEphemeralResponse = { ok: true as const };\n\nconst okOpenResponse = {\n  ok: true as const,\n  channel: { id: 'D-MOCK-DM' },\n};\n\nfunction createMockClient(): SlackClientMock {\n  return {\n    chat: {\n      postMessage: () => Promise.resolve(okMessageResponse as never),\n      postEphemeral: () => Promise.resolve(okEphemeralResponse as never),\n    },\n    conversations: {\n      open: () => Promise.resolve(okOpenResponse as never),\n    },\n  };\n}\n\nexport const push: Env = {\n  slackClient: createMockClient(),\n  sendServer: (() =>\n    Promise.resolve({ ok: true } as never)) as Env['sendServer'],\n};\n\nexport const simulation = [\n  'call:slackClient.chat.postMessage',\n  'call:slackClient.chat.postEphemeral',\n  'call:slackClient.conversations.open',\n  'call:sendServer',\n];\n","import type { Flow } from '@walkeros/core';\nimport { getEvent } from '@walkeros/core';\nimport type { Settings } from '../types';\n\n/**\n * Extended step example that may carry destination-level settings overrides.\n */\nexport type SlackStepExample = Flow.StepExample & {\n  settings?: Partial<Settings>;\n};\n\n/**\n * Slack server destination operates in two modes:\n *\n * 1. Web API mode - calls the injected `env.slackClient` SDK methods\n *    (`chat.postMessage`, `chat.postEphemeral`, `conversations.open`).\n *    Captured as `[callable, args]` with dotted callable names such as\n *    `'slackClient.chat.postMessage'`.\n *\n * 2. Webhook mode - calls `env.sendServer(url, JSON.stringify(body))`.\n *    Captured as `['sendServer', url, bodyAsString]` where `bodyAsString`\n *    is the already-stringified JSON body. Key insertion order in the\n *    source object matters for string equality.\n *\n * A single push may emit multiple calls (e.g. a DM opens a conversation\n * then posts to the returned channel id), so every `out` is wrapped as\n * `[[callable, ...args], ...]`.\n */\n\n/**\n * Purchase notification -- Web API mode, channel from mapping override,\n * text template interpolated against event.data.\n */\nexport const purchaseAlert: SlackStepExample = {\n  title: 'Purchase alert',\n  description:\n    'A completed order posts a templated message to a sales channel via the Slack Web API.',\n  in: getEvent('order complete', {\n    timestamp: 1700000100,\n    data: {\n      id: 'ORD-500',\n      total: 299.99,\n      currency: 'EUR',\n      product: 'Pro Plan',\n    },\n    user: { id: 'buyer-42' },\n  }),\n  mapping: {\n    settings: {\n      channel: '#sales',\n      text: ':moneybag: New order: ${data.id} - ${data.total} ${data.currency}',\n    },\n  },\n  out: [\n    [\n      'slackClient.chat.postMessage',\n      {\n        channel: '#sales',\n        text: ':moneybag: New order: ORD-500 - 299.99 EUR',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n      },\n    ],\n  ],\n};\n\n/**\n * Error alert -- routes to a different channel via mapping override.\n */\nexport const errorAlert: SlackStepExample = {\n  title: 'Error alert',\n  description:\n    'An error event posts a critical alert to an engineering channel using a mapping-level channel override.',\n  in: getEvent('error occur', {\n    timestamp: 1700000200,\n    data: {\n      message: 'Payment gateway timeout',\n      code: 'PGW_TIMEOUT',\n      severity: 'critical',\n    },\n  }),\n  mapping: {\n    settings: {\n      channel: '#engineering-alerts',\n      text: ':rotating_light: Error: ${data.message}',\n    },\n  },\n  out: [\n    [\n      'slackClient.chat.postMessage',\n      {\n        channel: '#engineering-alerts',\n        text: ':rotating_light: Error: Payment gateway timeout',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n      },\n    ],\n  ],\n};\n\n/**\n * Welcome DM -- conversations.open(users) -> chat.postMessage(channel: D-id).\n */\nexport const welcomeDM: SlackStepExample = {\n  title: 'Welcome DM',\n  description:\n    'A user signup opens a Slack DM channel and posts a welcome message with the selected plan.',\n  in: getEvent('user signup', {\n    timestamp: 1700000300,\n    data: { plan: 'enterprise' },\n    user: { id: 'U-NEW-USER' },\n  }),\n  mapping: {\n    settings: {\n      dm: true,\n      user: 'U-NEW-USER',\n      text: ':wave: Welcome aboard! You signed up for the ${data.plan} plan.',\n    },\n  },\n  out: [\n    ['slackClient.conversations.open', { users: 'U-NEW-USER' }],\n    [\n      'slackClient.chat.postMessage',\n      {\n        channel: 'D-MOCK-DM',\n        text: ':wave: Welcome aboard! You signed up for the enterprise plan.',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n      },\n    ],\n  ],\n};\n\n/**\n * Threaded checkout step -- thread_ts override puts the reply into a thread.\n */\nexport const threadedCheckoutStep: SlackStepExample = {\n  title: 'Threaded reply',\n  description:\n    'A checkout step posts as a threaded reply in Slack via thread_ts with broadcast to the channel.',\n  in: getEvent('checkout step', {\n    timestamp: 1700000400,\n    data: { step: 'payment', sessionTs: '1700000000.000050' },\n  }),\n  mapping: {\n    settings: {\n      channel: '#sales',\n      text: 'Checkout step: ${data.step}',\n      threadTs: '1700000000.000050',\n      replyBroadcast: true,\n    },\n  },\n  out: [\n    [\n      'slackClient.chat.postMessage',\n      {\n        channel: '#sales',\n        text: 'Checkout step: payment',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n        thread_ts: '1700000000.000050',\n        reply_broadcast: true,\n      },\n    ],\n  ],\n};\n\n/**\n * Ephemeral message -- visible to one user in the target channel.\n */\nexport const ephemeralMessage: SlackStepExample = {\n  title: 'Ephemeral message',\n  description:\n    'A quota warning posts an ephemeral Slack message visible only to a target admin user.',\n  in: getEvent('quota warning', {\n    timestamp: 1700000500,\n    data: { remaining: 5 },\n  }),\n  mapping: {\n    settings: {\n      channel: '#admin',\n      ephemeral: true,\n      user: 'U-ADMIN-1',\n      text: 'Heads up: ${data.remaining} requests remaining',\n    },\n  },\n  out: [\n    [\n      'slackClient.chat.postEphemeral',\n      {\n        channel: '#admin',\n        text: 'Heads up: 5 requests remaining',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n        user: 'U-ADMIN-1',\n      },\n    ],\n  ],\n};\n\n/**\n * Default blocks -- no custom text/blocks, destination auto-generates a\n * Block Kit message from the event data.\n */\nexport const defaultBlocks: SlackStepExample = {\n  title: 'Default blocks',\n  description:\n    'With no custom text the destination auto-generates a Block Kit message from event data and source.',\n  in: getEvent('lead submit', {\n    timestamp: 1700000600,\n    data: { name: 'Acme', email: 'sales@acme.test' },\n    source: { type: 'crm', platform: 'server' },\n  }),\n  mapping: {\n    settings: {\n      channel: '#growth',\n    },\n  },\n  out: [\n    [\n      'slackClient.chat.postMessage',\n      {\n        channel: '#growth',\n        text: 'lead submit',\n        blocks: [\n          {\n            type: 'header',\n            text: { type: 'plain_text', text: 'lead submit' },\n          },\n          {\n            type: 'section',\n            fields: [\n              { type: 'mrkdwn', text: '*name:*\\nAcme' },\n              { type: 'mrkdwn', text: '*email:*\\nsales@acme.test' },\n            ],\n          },\n          {\n            type: 'context',\n            elements: [{ type: 'mrkdwn', text: 'Source: crm' }],\n          },\n        ],\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n      },\n    ],\n  ],\n};\n\n/**\n * Webhook mode -- no token, just webhookUrl. The destination calls\n * `env.sendServer(url, JSON.stringify(body))`. Channel is baked into the\n * URL by Slack.\n */\nexport const deployNotification: SlackStepExample = {\n  title: 'Webhook deploy',\n  description:\n    'Without a token the destination posts to an incoming Slack webhook URL with the rendered message body.',\n  in: getEvent('deploy complete', {\n    timestamp: 1700000700,\n    data: { version: '1.4.2', environment: 'prod' },\n  }),\n  settings: {\n    token: undefined,\n    webhookUrl: 'https://hooks.slack.com/services/T00/B00/xxx',\n  },\n  mapping: {\n    settings: {\n      text: ':rocket: Deployment complete: ${data.version} to ${data.environment}',\n    },\n  },\n  out: [\n    [\n      'sendServer',\n      'https://hooks.slack.com/services/T00/B00/xxx',\n      JSON.stringify({\n        text: ':rocket: Deployment complete: 1.4.2 to prod',\n        unfurl_links: false,\n        unfurl_media: false,\n        mrkdwn: true,\n      }),\n    ],\n  ],\n};\n"],"mappings":"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","names":["z"]}