repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
public Clawd ADK gateway launch mirror
stars
latest
clone command
git clone gitlawb://did:key:z6Mkq5mY...iFZ5/my-project-publ...git clone gitlawb://did:key:z6Mkq5mY.../my-project-publ...2fa351d6docs: add automaton and perps launch sources16d ago| #1 | import { describe, it, expect } from 'vitest'; |
| #2 | import { buildEnvVars } from './env'; |
| #3 | import { createMockEnv } from '../test-utils'; |
| #4 | |
| #5 | describe('buildEnvVars', () => { |
| #6 | it('returns empty object when no env vars set', () => { |
| #7 | const env = createMockEnv(); |
| #8 | const result = buildEnvVars(env); |
| #9 | expect(result).toEqual({}); |
| #10 | }); |
| #11 | |
| #12 | it('includes ANTHROPIC_API_KEY when set directly', () => { |
| #13 | const env = createMockEnv({ ANTHROPIC_API_KEY: 'sk-test-key' }); |
| #14 | const result = buildEnvVars(env); |
| #15 | expect(result.ANTHROPIC_API_KEY).toBe('sk-test-key'); |
| #16 | }); |
| #17 | |
| #18 | it('maps AI_GATEWAY_API_KEY to ANTHROPIC_API_KEY for Anthropic gateway', () => { |
| #19 | const env = createMockEnv({ |
| #20 | AI_GATEWAY_API_KEY: 'sk-gateway-key', |
| #21 | AI_GATEWAY_BASE_URL: 'https://gateway.ai.cloudflare.com/v1/123/my-gw/anthropic', |
| #22 | }); |
| #23 | const result = buildEnvVars(env); |
| #24 | expect(result.ANTHROPIC_API_KEY).toBe('sk-gateway-key'); |
| #25 | expect(result.ANTHROPIC_BASE_URL).toBe('https://gateway.ai.cloudflare.com/v1/123/my-gw/anthropic'); |
| #26 | expect(result.OPENAI_API_KEY).toBeUndefined(); |
| #27 | }); |
| #28 | |
| #29 | it('maps AI_GATEWAY_API_KEY to OPENAI_API_KEY for OpenAI gateway', () => { |
| #30 | const env = createMockEnv({ |
| #31 | AI_GATEWAY_API_KEY: 'sk-gateway-key', |
| #32 | AI_GATEWAY_BASE_URL: 'https://gateway.ai.cloudflare.com/v1/123/my-gw/openai', |
| #33 | }); |
| #34 | const result = buildEnvVars(env); |
| #35 | expect(result.OPENAI_API_KEY).toBe('sk-gateway-key'); |
| #36 | expect(result.OPENAI_BASE_URL).toBe('https://gateway.ai.cloudflare.com/v1/123/my-gw/openai'); |
| #37 | expect(result.ANTHROPIC_API_KEY).toBeUndefined(); |
| #38 | }); |
| #39 | |
| #40 | it('passes AI_GATEWAY_BASE_URL directly', () => { |
| #41 | const env = createMockEnv({ |
| #42 | AI_GATEWAY_BASE_URL: 'https://gateway.ai.cloudflare.com/v1/123/my-gw/anthropic', |
| #43 | }); |
| #44 | const result = buildEnvVars(env); |
| #45 | expect(result.AI_GATEWAY_BASE_URL).toBe('https://gateway.ai.cloudflare.com/v1/123/my-gw/anthropic'); |
| #46 | }); |
| #47 | |
| #48 | it('AI_GATEWAY_* takes precedence over direct provider keys for Anthropic', () => { |
| #49 | const env = createMockEnv({ |
| #50 | AI_GATEWAY_API_KEY: 'gateway-key', |
| #51 | AI_GATEWAY_BASE_URL: 'https://gateway.example.com/anthropic', |
| #52 | ANTHROPIC_API_KEY: 'direct-key', |
| #53 | ANTHROPIC_BASE_URL: 'https://api.anthropic.com', |
| #54 | }); |
| #55 | const result = buildEnvVars(env); |
| #56 | expect(result.ANTHROPIC_API_KEY).toBe('gateway-key'); |
| #57 | expect(result.AI_GATEWAY_BASE_URL).toBe('https://gateway.example.com/anthropic'); |
| #58 | }); |
| #59 | |
| #60 | it('AI_GATEWAY_* takes precedence over direct provider keys for OpenAI', () => { |
| #61 | const env = createMockEnv({ |
| #62 | AI_GATEWAY_API_KEY: 'gateway-key', |
| #63 | AI_GATEWAY_BASE_URL: 'https://gateway.example.com/openai', |
| #64 | OPENAI_API_KEY: 'direct-key', |
| #65 | }); |
| #66 | const result = buildEnvVars(env); |
| #67 | expect(result.OPENAI_API_KEY).toBe('gateway-key'); |
| #68 | expect(result.AI_GATEWAY_BASE_URL).toBe('https://gateway.example.com/openai'); |
| #69 | expect(result.OPENAI_BASE_URL).toBe('https://gateway.example.com/openai'); |
| #70 | }); |
| #71 | |
| #72 | it('falls back to ANTHROPIC_* when AI_GATEWAY_* not set', () => { |
| #73 | const env = createMockEnv({ |
| #74 | ANTHROPIC_API_KEY: 'direct-key', |
| #75 | ANTHROPIC_BASE_URL: 'https://api.anthropic.com', |
| #76 | }); |
| #77 | const result = buildEnvVars(env); |
| #78 | expect(result.ANTHROPIC_API_KEY).toBe('direct-key'); |
| #79 | expect(result.ANTHROPIC_BASE_URL).toBe('https://api.anthropic.com'); |
| #80 | }); |
| #81 | |
| #82 | it('includes OPENAI_API_KEY when set directly (no gateway)', () => { |
| #83 | const env = createMockEnv({ OPENAI_API_KEY: 'sk-openai-key' }); |
| #84 | const result = buildEnvVars(env); |
| #85 | expect(result.OPENAI_API_KEY).toBe('sk-openai-key'); |
| #86 | }); |
| #87 | |
| #88 | it('maps MOLTBOT_GATEWAY_TOKEN to CLAWDBOT_GATEWAY_TOKEN for container', () => { |
| #89 | const env = createMockEnv({ MOLTBOT_GATEWAY_TOKEN: 'my-token' }); |
| #90 | const result = buildEnvVars(env); |
| #91 | expect(result.CLAWDBOT_GATEWAY_TOKEN).toBe('my-token'); |
| #92 | }); |
| #93 | |
| #94 | it('includes all channel tokens when set', () => { |
| #95 | const env = createMockEnv({ |
| #96 | TELEGRAM_BOT_TOKEN: 'tg-token', |
| #97 | TELEGRAM_DM_POLICY: 'pairing', |
| #98 | DISCORD_BOT_TOKEN: 'discord-token', |
| #99 | DISCORD_DM_POLICY: 'open', |
| #100 | SLACK_BOT_TOKEN: 'slack-bot', |
| #101 | SLACK_APP_TOKEN: 'slack-app', |
| #102 | }); |
| #103 | const result = buildEnvVars(env); |
| #104 | |
| #105 | expect(result.TELEGRAM_BOT_TOKEN).toBe('tg-token'); |
| #106 | expect(result.TELEGRAM_DM_POLICY).toBe('pairing'); |
| #107 | expect(result.DISCORD_BOT_TOKEN).toBe('discord-token'); |
| #108 | expect(result.DISCORD_DM_POLICY).toBe('open'); |
| #109 | expect(result.SLACK_BOT_TOKEN).toBe('slack-bot'); |
| #110 | expect(result.SLACK_APP_TOKEN).toBe('slack-app'); |
| #111 | }); |
| #112 | |
| #113 | it('maps DEV_MODE to CLAWDBOT_DEV_MODE for container', () => { |
| #114 | const env = createMockEnv({ |
| #115 | DEV_MODE: 'true', |
| #116 | CLAWDBOT_BIND_MODE: 'lan', |
| #117 | }); |
| #118 | const result = buildEnvVars(env); |
| #119 | |
| #120 | expect(result.CLAWDBOT_DEV_MODE).toBe('true'); |
| #121 | expect(result.CLAWDBOT_BIND_MODE).toBe('lan'); |
| #122 | }); |
| #123 | |
| #124 | it('combines all env vars correctly', () => { |
| #125 | const env = createMockEnv({ |
| #126 | ANTHROPIC_API_KEY: 'sk-key', |
| #127 | MOLTBOT_GATEWAY_TOKEN: 'token', |
| #128 | TELEGRAM_BOT_TOKEN: 'tg', |
| #129 | }); |
| #130 | const result = buildEnvVars(env); |
| #131 | |
| #132 | expect(result).toEqual({ |
| #133 | ANTHROPIC_API_KEY: 'sk-key', |
| #134 | CLAWDBOT_GATEWAY_TOKEN: 'token', |
| #135 | TELEGRAM_BOT_TOKEN: 'tg', |
| #136 | }); |
| #137 | }); |
| #138 | }); |
| #139 |