ralph-starter 0.0.1 → 0.1.1-beta.1
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/README.md +707 -17
- package/dist/auth/browser.d.ts +10 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +56 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +20 -0
- package/dist/auth/oauth-server.d.ts.map +1 -0
- package/dist/auth/oauth-server.js +168 -0
- package/dist/auth/oauth-server.js.map +1 -0
- package/dist/auth/pkce.d.ts +46 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +57 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/base.d.ts +52 -0
- package/dist/auth/providers/base.d.ts.map +1 -0
- package/dist/auth/providers/base.js +70 -0
- package/dist/auth/providers/base.js.map +1 -0
- package/dist/auth/providers/index.d.ts +23 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +39 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/linear.d.ts +37 -0
- package/dist/auth/providers/linear.d.ts.map +1 -0
- package/dist/auth/providers/linear.js +46 -0
- package/dist/auth/providers/linear.js.map +1 -0
- package/dist/auth/providers/notion.d.ts +36 -0
- package/dist/auth/providers/notion.d.ts.map +1 -0
- package/dist/auth/providers/notion.js +75 -0
- package/dist/auth/providers/notion.js.map +1 -0
- package/dist/auth/providers/todoist.d.ts +29 -0
- package/dist/auth/providers/todoist.d.ts.map +1 -0
- package/dist/auth/providers/todoist.js +40 -0
- package/dist/auth/providers/todoist.js.map +1 -0
- package/dist/automation/git.d.ts +15 -0
- package/dist/automation/git.d.ts.map +1 -0
- package/dist/automation/git.js +73 -0
- package/dist/automation/git.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +192 -19
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +14 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +243 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +12 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +124 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +13 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +374 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +31 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +353 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integrations.d.ts +17 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +193 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/plan.d.ts +5 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +80 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/run.d.ts +26 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +351 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/scaffold.d.ts +9 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +128 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/commands/setup.d.ts +12 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +27 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +6 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +151 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/source.d.ts +17 -0
- package/dist/commands/source.d.ts.map +1 -0
- package/dist/commands/source.js +173 -0
- package/dist/commands/source.js.map +1 -0
- package/dist/config/manager.d.ts +70 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +227 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -0
- package/dist/integrations/_template/auth.d.ts +29 -0
- package/dist/integrations/_template/auth.d.ts.map +1 -0
- package/dist/integrations/_template/auth.js +42 -0
- package/dist/integrations/_template/auth.js.map +1 -0
- package/dist/integrations/_template/index.d.ts +8 -0
- package/dist/integrations/_template/index.d.ts.map +1 -0
- package/dist/integrations/_template/index.js +8 -0
- package/dist/integrations/_template/index.js.map +1 -0
- package/dist/integrations/_template/source.d.ts +34 -0
- package/dist/integrations/_template/source.d.ts.map +1 -0
- package/dist/integrations/_template/source.js +124 -0
- package/dist/integrations/_template/source.js.map +1 -0
- package/dist/integrations/base.d.ts +158 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +109 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/github/index.d.ts +8 -0
- package/dist/integrations/github/index.d.ts.map +1 -0
- package/dist/integrations/github/index.js +8 -0
- package/dist/integrations/github/index.js.map +1 -0
- package/dist/integrations/github/source.d.ts +26 -0
- package/dist/integrations/github/source.d.ts.map +1 -0
- package/dist/integrations/github/source.js +190 -0
- package/dist/integrations/github/source.js.map +1 -0
- package/dist/integrations/index.d.ts +37 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +71 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/linear/auth.d.ts +37 -0
- package/dist/integrations/linear/auth.d.ts.map +1 -0
- package/dist/integrations/linear/auth.js +45 -0
- package/dist/integrations/linear/auth.js.map +1 -0
- package/dist/integrations/linear/index.d.ts +9 -0
- package/dist/integrations/linear/index.d.ts.map +1 -0
- package/dist/integrations/linear/index.js +9 -0
- package/dist/integrations/linear/index.js.map +1 -0
- package/dist/integrations/linear/source.d.ts +26 -0
- package/dist/integrations/linear/source.d.ts.map +1 -0
- package/dist/integrations/linear/source.js +248 -0
- package/dist/integrations/linear/source.js.map +1 -0
- package/dist/integrations/notion/index.d.ts +8 -0
- package/dist/integrations/notion/index.d.ts.map +1 -0
- package/dist/integrations/notion/index.js +8 -0
- package/dist/integrations/notion/index.js.map +1 -0
- package/dist/integrations/notion/source.d.ts +53 -0
- package/dist/integrations/notion/source.d.ts.map +1 -0
- package/dist/integrations/notion/source.js +463 -0
- package/dist/integrations/notion/source.js.map +1 -0
- package/dist/llm/api.d.ts +29 -0
- package/dist/llm/api.d.ts.map +1 -0
- package/dist/llm/api.js +152 -0
- package/dist/llm/api.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/providers.d.ts +24 -0
- package/dist/llm/providers.d.ts.map +1 -0
- package/dist/llm/providers.js +51 -0
- package/dist/llm/providers.js.map +1 -0
- package/dist/loop/__tests__/agents.test.d.ts +2 -0
- package/dist/loop/__tests__/agents.test.d.ts.map +1 -0
- package/dist/loop/__tests__/agents.test.js +183 -0
- package/dist/loop/__tests__/agents.test.js.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts +2 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.js +161 -0
- package/dist/loop/__tests__/circuit-breaker.test.js.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts +2 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.js +200 -0
- package/dist/loop/__tests__/cost-tracker.test.js.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts +2 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.js +198 -0
- package/dist/loop/__tests__/rate-limiter.test.js.map +1 -0
- package/dist/loop/__tests__/validation.test.d.ts +2 -0
- package/dist/loop/__tests__/validation.test.d.ts.map +1 -0
- package/dist/loop/__tests__/validation.test.js +234 -0
- package/dist/loop/__tests__/validation.test.js.map +1 -0
- package/dist/loop/agents.d.ts +26 -0
- package/dist/loop/agents.d.ts.map +1 -0
- package/dist/loop/agents.js +188 -0
- package/dist/loop/agents.js.map +1 -0
- package/dist/loop/circuit-breaker.d.ts +61 -0
- package/dist/loop/circuit-breaker.d.ts.map +1 -0
- package/dist/loop/circuit-breaker.js +143 -0
- package/dist/loop/circuit-breaker.js.map +1 -0
- package/dist/loop/cost-tracker.d.ts +90 -0
- package/dist/loop/cost-tracker.d.ts.map +1 -0
- package/dist/loop/cost-tracker.js +229 -0
- package/dist/loop/cost-tracker.js.map +1 -0
- package/dist/loop/estimator.d.ts +20 -0
- package/dist/loop/estimator.d.ts.map +1 -0
- package/dist/loop/estimator.js +123 -0
- package/dist/loop/estimator.js.map +1 -0
- package/dist/loop/executor.d.ts +44 -0
- package/dist/loop/executor.d.ts.map +1 -0
- package/dist/loop/executor.js +646 -0
- package/dist/loop/executor.js.map +1 -0
- package/dist/loop/progress.d.ts +34 -0
- package/dist/loop/progress.d.ts.map +1 -0
- package/dist/loop/progress.js +186 -0
- package/dist/loop/progress.js.map +1 -0
- package/dist/loop/rate-limiter.d.ts +71 -0
- package/dist/loop/rate-limiter.d.ts.map +1 -0
- package/dist/loop/rate-limiter.js +151 -0
- package/dist/loop/rate-limiter.js.map +1 -0
- package/dist/loop/semantic-analyzer.d.ts +33 -0
- package/dist/loop/semantic-analyzer.d.ts.map +1 -0
- package/dist/loop/semantic-analyzer.js +153 -0
- package/dist/loop/semantic-analyzer.js.map +1 -0
- package/dist/loop/skills.d.ts +29 -0
- package/dist/loop/skills.d.ts.map +1 -0
- package/dist/loop/skills.js +174 -0
- package/dist/loop/skills.js.map +1 -0
- package/dist/loop/step-detector.d.ts +17 -0
- package/dist/loop/step-detector.d.ts.map +1 -0
- package/dist/loop/step-detector.js +280 -0
- package/dist/loop/step-detector.js.map +1 -0
- package/dist/loop/task-counter.d.ts +41 -0
- package/dist/loop/task-counter.d.ts.map +1 -0
- package/dist/loop/task-counter.js +99 -0
- package/dist/loop/task-counter.js.map +1 -0
- package/dist/loop/validation.d.ts +28 -0
- package/dist/loop/validation.d.ts.map +1 -0
- package/dist/loop/validation.js +138 -0
- package/dist/loop/validation.js.map +1 -0
- package/dist/mcp/core/init.d.ts +15 -0
- package/dist/mcp/core/init.d.ts.map +1 -0
- package/dist/mcp/core/init.js +272 -0
- package/dist/mcp/core/init.js.map +1 -0
- package/dist/mcp/core/plan.d.ts +15 -0
- package/dist/mcp/core/plan.d.ts.map +1 -0
- package/dist/mcp/core/plan.js +90 -0
- package/dist/mcp/core/plan.js.map +1 -0
- package/dist/mcp/core/run.d.ts +26 -0
- package/dist/mcp/core/run.d.ts.map +1 -0
- package/dist/mcp/core/run.js +114 -0
- package/dist/mcp/core/run.js.map +1 -0
- package/dist/mcp/prompts.d.ts +10 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +163 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +16 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +114 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +73 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +316 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/presets/index.d.ts +36 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +236 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/setup/agent-detector.d.ts +57 -0
- package/dist/setup/agent-detector.d.ts.map +1 -0
- package/dist/setup/agent-detector.js +170 -0
- package/dist/setup/agent-detector.js.map +1 -0
- package/dist/setup/index.d.ts +7 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +7 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/llm-tester.d.ts +33 -0
- package/dist/setup/llm-tester.d.ts.map +1 -0
- package/dist/setup/llm-tester.js +105 -0
- package/dist/setup/llm-tester.js.map +1 -0
- package/dist/setup/wizard.d.ts +19 -0
- package/dist/setup/wizard.d.ts.map +1 -0
- package/dist/setup/wizard.js +313 -0
- package/dist/setup/wizard.js.map +1 -0
- package/dist/sources/__tests__/file.test.d.ts +2 -0
- package/dist/sources/__tests__/file.test.d.ts.map +1 -0
- package/dist/sources/__tests__/file.test.js +126 -0
- package/dist/sources/__tests__/file.test.js.map +1 -0
- package/dist/sources/__tests__/github.test.d.ts +2 -0
- package/dist/sources/__tests__/github.test.d.ts.map +1 -0
- package/dist/sources/__tests__/github.test.js +157 -0
- package/dist/sources/__tests__/github.test.js.map +1 -0
- package/dist/sources/base.d.ts +72 -0
- package/dist/sources/base.d.ts.map +1 -0
- package/dist/sources/base.js +127 -0
- package/dist/sources/base.js.map +1 -0
- package/dist/sources/builtin/file.d.ts +21 -0
- package/dist/sources/builtin/file.d.ts.map +1 -0
- package/dist/sources/builtin/file.js +129 -0
- package/dist/sources/builtin/file.js.map +1 -0
- package/dist/sources/builtin/github-scraper.d.ts +65 -0
- package/dist/sources/builtin/github-scraper.d.ts.map +1 -0
- package/dist/sources/builtin/github-scraper.js +324 -0
- package/dist/sources/builtin/github-scraper.js.map +1 -0
- package/dist/sources/builtin/pdf.d.ts +24 -0
- package/dist/sources/builtin/pdf.d.ts.map +1 -0
- package/dist/sources/builtin/pdf.js +174 -0
- package/dist/sources/builtin/pdf.js.map +1 -0
- package/dist/sources/builtin/url.d.ts +47 -0
- package/dist/sources/builtin/url.d.ts.map +1 -0
- package/dist/sources/builtin/url.js +429 -0
- package/dist/sources/builtin/url.js.map +1 -0
- package/dist/sources/config.d.ts +72 -0
- package/dist/sources/config.d.ts.map +1 -0
- package/dist/sources/config.js +215 -0
- package/dist/sources/config.js.map +1 -0
- package/dist/sources/index.d.ts +47 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +210 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/integrations/github.d.ts +24 -0
- package/dist/sources/integrations/github.d.ts.map +1 -0
- package/dist/sources/integrations/github.js +193 -0
- package/dist/sources/integrations/github.js.map +1 -0
- package/dist/sources/integrations/linear.d.ts +18 -0
- package/dist/sources/integrations/linear.d.ts.map +1 -0
- package/dist/sources/integrations/linear.js +197 -0
- package/dist/sources/integrations/linear.js.map +1 -0
- package/dist/sources/integrations/notion.d.ts +39 -0
- package/dist/sources/integrations/notion.d.ts.map +1 -0
- package/dist/sources/integrations/notion.js +343 -0
- package/dist/sources/integrations/notion.js.map +1 -0
- package/dist/sources/integrations/todoist.d.ts +18 -0
- package/dist/sources/integrations/todoist.d.ts.map +1 -0
- package/dist/sources/integrations/todoist.js +154 -0
- package/dist/sources/integrations/todoist.js.map +1 -0
- package/dist/sources/types.d.ts +106 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +9 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress-renderer.d.ts +54 -0
- package/dist/ui/progress-renderer.d.ts.map +1 -0
- package/dist/ui/progress-renderer.js +118 -0
- package/dist/ui/progress-renderer.js.map +1 -0
- package/dist/ui/shimmer.d.ts +16 -0
- package/dist/ui/shimmer.d.ts.map +1 -0
- package/dist/ui/shimmer.js +31 -0
- package/dist/ui/shimmer.js.map +1 -0
- package/dist/wizard/ascii-art.d.ts +93 -0
- package/dist/wizard/ascii-art.d.ts.map +1 -0
- package/dist/wizard/ascii-art.js +378 -0
- package/dist/wizard/ascii-art.js.map +1 -0
- package/dist/wizard/idea-prompts.d.ts +18 -0
- package/dist/wizard/idea-prompts.d.ts.map +1 -0
- package/dist/wizard/idea-prompts.js +154 -0
- package/dist/wizard/idea-prompts.js.map +1 -0
- package/dist/wizard/idea-ui.d.ts +34 -0
- package/dist/wizard/idea-ui.d.ts.map +1 -0
- package/dist/wizard/idea-ui.js +225 -0
- package/dist/wizard/idea-ui.js.map +1 -0
- package/dist/wizard/ideas.d.ts +27 -0
- package/dist/wizard/ideas.d.ts.map +1 -0
- package/dist/wizard/ideas.js +511 -0
- package/dist/wizard/ideas.js.map +1 -0
- package/dist/wizard/index.d.ts +11 -0
- package/dist/wizard/index.d.ts.map +1 -0
- package/dist/wizard/index.js +472 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/llm.d.ts +14 -0
- package/dist/wizard/llm.d.ts.map +1 -0
- package/dist/wizard/llm.js +420 -0
- package/dist/wizard/llm.js.map +1 -0
- package/dist/wizard/prompts.d.ts +75 -0
- package/dist/wizard/prompts.d.ts.map +1 -0
- package/dist/wizard/prompts.js +455 -0
- package/dist/wizard/prompts.js.map +1 -0
- package/dist/wizard/spec-generator.d.ts +14 -0
- package/dist/wizard/spec-generator.d.ts.map +1 -0
- package/dist/wizard/spec-generator.js +200 -0
- package/dist/wizard/spec-generator.js.map +1 -0
- package/dist/wizard/types.d.ts +53 -0
- package/dist/wizard/types.d.ts.map +1 -0
- package/dist/wizard/types.js +10 -0
- package/dist/wizard/types.js.map +1 -0
- package/dist/wizard/ui.d.ts +57 -0
- package/dist/wizard/ui.d.ts.map +1 -0
- package/dist/wizard/ui.js +211 -0
- package/dist/wizard/ui.js.map +1 -0
- package/package.json +67 -8
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear OAuth Provider with PKCE Support
|
|
3
|
+
*
|
|
4
|
+
* Linear supports PKCE (Proof Key for Code Exchange) which allows
|
|
5
|
+
* public clients (like CLI apps) to authenticate without a client secret.
|
|
6
|
+
*
|
|
7
|
+
* Linear's OAuth flow:
|
|
8
|
+
* https://developers.linear.app/docs/oauth/authentication
|
|
9
|
+
*
|
|
10
|
+
* To configure ralph-starter's Linear OAuth app:
|
|
11
|
+
* 1. Go to https://linear.app/settings/api/applications
|
|
12
|
+
* 2. Create a new OAuth application
|
|
13
|
+
* 3. Set redirect URI to http://127.0.0.1:52847/callback
|
|
14
|
+
* 4. Copy the Client ID and set RALPH_LINEAR_CLIENT_ID env var
|
|
15
|
+
*/
|
|
16
|
+
import { BaseOAuthProvider } from '../../auth/providers/base.js';
|
|
17
|
+
export declare class LinearOAuthProvider extends BaseOAuthProvider {
|
|
18
|
+
name: string;
|
|
19
|
+
displayName: string;
|
|
20
|
+
authorizationUrl: string;
|
|
21
|
+
tokenUrl: string;
|
|
22
|
+
supportsPKCE: boolean;
|
|
23
|
+
scopes: string[];
|
|
24
|
+
clientId: string;
|
|
25
|
+
clientSecret: string | undefined;
|
|
26
|
+
authParams: {
|
|
27
|
+
prompt: string;
|
|
28
|
+
actor: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Check if Linear OAuth is configured
|
|
32
|
+
* With PKCE, we only need the client_id (no secret required)
|
|
33
|
+
*/
|
|
34
|
+
isConfigured(): boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const linearProvider: LinearOAuthProvider;
|
|
37
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,gBAAgB,SAAwC;IACxD,QAAQ,SAAwC;IAGhD,YAAY,UAAQ;IAGpB,MAAM,WAEJ;IAGF,QAAQ,SAA4C;IAGpD,YAAY,qBAA0C;IAEtD,UAAU;;;MAGR;IAEF;;;OAGG;IACH,YAAY,IAAI,OAAO;CAGxB;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear OAuth Provider with PKCE Support
|
|
3
|
+
*
|
|
4
|
+
* Linear supports PKCE (Proof Key for Code Exchange) which allows
|
|
5
|
+
* public clients (like CLI apps) to authenticate without a client secret.
|
|
6
|
+
*
|
|
7
|
+
* Linear's OAuth flow:
|
|
8
|
+
* https://developers.linear.app/docs/oauth/authentication
|
|
9
|
+
*
|
|
10
|
+
* To configure ralph-starter's Linear OAuth app:
|
|
11
|
+
* 1. Go to https://linear.app/settings/api/applications
|
|
12
|
+
* 2. Create a new OAuth application
|
|
13
|
+
* 3. Set redirect URI to http://127.0.0.1:52847/callback
|
|
14
|
+
* 4. Copy the Client ID and set RALPH_LINEAR_CLIENT_ID env var
|
|
15
|
+
*/
|
|
16
|
+
import { BaseOAuthProvider } from '../../auth/providers/base.js';
|
|
17
|
+
export class LinearOAuthProvider extends BaseOAuthProvider {
|
|
18
|
+
name = 'linear';
|
|
19
|
+
displayName = 'Linear';
|
|
20
|
+
authorizationUrl = 'https://linear.app/oauth/authorize';
|
|
21
|
+
tokenUrl = 'https://api.linear.app/oauth/token';
|
|
22
|
+
// Linear supports PKCE - no client secret needed!
|
|
23
|
+
supportsPKCE = true;
|
|
24
|
+
// Linear scopes
|
|
25
|
+
scopes = [
|
|
26
|
+
'read', // Read access to all resources
|
|
27
|
+
];
|
|
28
|
+
// Client ID from environment variable
|
|
29
|
+
clientId = process.env.RALPH_LINEAR_CLIENT_ID || '';
|
|
30
|
+
// Client secret is optional with PKCE
|
|
31
|
+
clientSecret = process.env.RALPH_LINEAR_CLIENT_SECRET;
|
|
32
|
+
authParams = {
|
|
33
|
+
prompt: 'consent', // Always show consent screen
|
|
34
|
+
actor: 'user', // Act as the authorizing user
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Check if Linear OAuth is configured
|
|
38
|
+
* With PKCE, we only need the client_id (no secret required)
|
|
39
|
+
*/
|
|
40
|
+
isConfigured() {
|
|
41
|
+
return !!this.clientId;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export const linearProvider = new LinearOAuthProvider();
|
|
45
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/integrations/linear/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,QAAQ,CAAC;IACvB,gBAAgB,GAAG,oCAAoC,CAAC;IACxD,QAAQ,GAAG,oCAAoC,CAAC;IAEhD,kDAAkD;IAClD,YAAY,GAAG,IAAI,CAAC;IAEpB,gBAAgB;IAChB,MAAM,GAAG;QACP,MAAM,EAAE,+BAA+B;KACxC,CAAC;IAEF,sCAAsC;IACtC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEpD,sCAAsC;IACtC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAEtD,UAAU,GAAG;QACX,MAAM,EAAE,SAAS,EAAE,6BAA6B;QAChD,KAAK,EAAE,MAAM,EAAE,8BAA8B;KAC9C,CAAC;IAEF;;;OAGG;IACH,YAAY;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Integration
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from Linear workspaces.
|
|
5
|
+
* Uses the Linear CLI for authentication or API key.
|
|
6
|
+
*/
|
|
7
|
+
export { LinearOAuthProvider, linearProvider } from './auth.js';
|
|
8
|
+
export { LinearIntegration } from './source.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Integration
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from Linear workspaces.
|
|
5
|
+
* Uses the Linear CLI for authentication or API key.
|
|
6
|
+
*/
|
|
7
|
+
export { LinearOAuthProvider, linearProvider } from './auth.js';
|
|
8
|
+
export { LinearIntegration } from './source.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Integration Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from Linear using GraphQL API.
|
|
5
|
+
* Supports CLI auth (`linear auth login`) or API key.
|
|
6
|
+
*/
|
|
7
|
+
import { type AuthMethod, BaseIntegration, type IntegrationOptions, type IntegrationResult } from '../base.js';
|
|
8
|
+
export declare class LinearIntegration extends BaseIntegration {
|
|
9
|
+
name: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
description: string;
|
|
12
|
+
website: string;
|
|
13
|
+
authMethods: AuthMethod[];
|
|
14
|
+
private readonly API_URL;
|
|
15
|
+
private linearCliAvailable;
|
|
16
|
+
/**
|
|
17
|
+
* Check if Linear CLI is available and authenticated
|
|
18
|
+
*/
|
|
19
|
+
protected isCliAvailable(): Promise<boolean>;
|
|
20
|
+
fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
21
|
+
private getApiKeyFromCli;
|
|
22
|
+
private fetchIssues;
|
|
23
|
+
private formatIssues;
|
|
24
|
+
getHelp(): string;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAkCpB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,WAAW,SAA8B;IACzC,OAAO,SAAwB;IAG/B,WAAW,EAAE,UAAU,EAAE,CAA+B;IAExD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,kBAAkB,CAAwB;IAElD;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB5C,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAyB3E,gBAAgB;YAYhB,WAAW;IA2FzB,OAAO,CAAC,YAAY;IAuFpB,OAAO,IAAI,MAAM;CA8BlB"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Linear Integration Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches issues from Linear using GraphQL API.
|
|
5
|
+
* Supports CLI auth (`linear auth login`) or API key.
|
|
6
|
+
*/
|
|
7
|
+
import { BaseIntegration, } from '../base.js';
|
|
8
|
+
export class LinearIntegration extends BaseIntegration {
|
|
9
|
+
name = 'linear';
|
|
10
|
+
displayName = 'Linear';
|
|
11
|
+
description = 'Fetch issues from Linear';
|
|
12
|
+
website = 'https://linear.app';
|
|
13
|
+
// Supports CLI auth, API key, and OAuth
|
|
14
|
+
authMethods = ['cli', 'api-key', 'oauth'];
|
|
15
|
+
API_URL = 'https://api.linear.app/graphql';
|
|
16
|
+
linearCliAvailable = null;
|
|
17
|
+
/**
|
|
18
|
+
* Check if Linear CLI is available and authenticated
|
|
19
|
+
*/
|
|
20
|
+
async isCliAvailable() {
|
|
21
|
+
if (this.linearCliAvailable !== null) {
|
|
22
|
+
return this.linearCliAvailable;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const { execa } = await import('execa');
|
|
26
|
+
// Check if linear CLI is installed and authenticated
|
|
27
|
+
const result = await execa('linear', ['whoami'], { reject: false });
|
|
28
|
+
this.linearCliAvailable = result.exitCode === 0;
|
|
29
|
+
return this.linearCliAvailable;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
this.linearCliAvailable = false;
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async fetch(identifier, options) {
|
|
37
|
+
const projectName = options?.project || identifier;
|
|
38
|
+
const authMethod = await this.getConfiguredAuthMethod();
|
|
39
|
+
if (!authMethod) {
|
|
40
|
+
this.error('No authentication configured. Options:\n' +
|
|
41
|
+
' 1. Install Linear CLI: npm install -g @linear/cli && linear auth login\n' +
|
|
42
|
+
' 2. Use API key: ralph-starter config set linear.apiKey <key>');
|
|
43
|
+
}
|
|
44
|
+
// Get API key based on auth method
|
|
45
|
+
let apiKey;
|
|
46
|
+
if (authMethod === 'cli') {
|
|
47
|
+
apiKey = await this.getApiKeyFromCli();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
apiKey = await this.getApiKey();
|
|
51
|
+
}
|
|
52
|
+
const issues = await this.fetchIssues(apiKey, projectName, options);
|
|
53
|
+
return this.formatIssues(issues, projectName);
|
|
54
|
+
}
|
|
55
|
+
async getApiKeyFromCli() {
|
|
56
|
+
try {
|
|
57
|
+
const { execa } = await import('execa');
|
|
58
|
+
// Linear CLI stores token which we can use
|
|
59
|
+
const result = await execa('linear', ['config', 'get', 'apiKey']);
|
|
60
|
+
return result.stdout.trim();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Fall back to regular API key
|
|
64
|
+
return this.getApiKey();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
async fetchIssues(apiKey, projectName, options) {
|
|
68
|
+
const limit = options?.limit || 50;
|
|
69
|
+
// Build filter
|
|
70
|
+
const filter = {};
|
|
71
|
+
if (projectName && projectName !== 'all') {
|
|
72
|
+
filter.or = [
|
|
73
|
+
{ project: { name: { containsIgnoreCase: projectName } } },
|
|
74
|
+
{ team: { name: { containsIgnoreCase: projectName } } },
|
|
75
|
+
{ team: { key: { eq: projectName.toUpperCase() } } },
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
if (options?.label) {
|
|
79
|
+
filter.labels = { name: { containsIgnoreCase: options.label } };
|
|
80
|
+
}
|
|
81
|
+
if (options?.status) {
|
|
82
|
+
filter.state = { name: { containsIgnoreCase: options.status } };
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Default to non-completed issues
|
|
86
|
+
filter.completedAt = { null: true };
|
|
87
|
+
}
|
|
88
|
+
const query = `
|
|
89
|
+
query GetIssues($filter: IssueFilter, $first: Int) {
|
|
90
|
+
issues(filter: $filter, first: $first, orderBy: updatedAt) {
|
|
91
|
+
nodes {
|
|
92
|
+
id
|
|
93
|
+
identifier
|
|
94
|
+
title
|
|
95
|
+
description
|
|
96
|
+
priority
|
|
97
|
+
priorityLabel
|
|
98
|
+
state {
|
|
99
|
+
name
|
|
100
|
+
type
|
|
101
|
+
}
|
|
102
|
+
labels {
|
|
103
|
+
nodes {
|
|
104
|
+
name
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
project {
|
|
108
|
+
name
|
|
109
|
+
}
|
|
110
|
+
team {
|
|
111
|
+
name
|
|
112
|
+
key
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
const response = await fetch(this.API_URL, {
|
|
119
|
+
method: 'POST',
|
|
120
|
+
headers: {
|
|
121
|
+
'Content-Type': 'application/json',
|
|
122
|
+
Authorization: apiKey,
|
|
123
|
+
},
|
|
124
|
+
body: JSON.stringify({
|
|
125
|
+
query,
|
|
126
|
+
variables: {
|
|
127
|
+
filter: Object.keys(filter).length > 0 ? filter : undefined,
|
|
128
|
+
first: limit,
|
|
129
|
+
},
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
if (!response.ok) {
|
|
133
|
+
if (response.status === 401) {
|
|
134
|
+
this.error('Invalid Linear API key. Run: ralph-starter config set linear.apiKey <key>');
|
|
135
|
+
}
|
|
136
|
+
this.error(`Linear API error: ${response.status} ${response.statusText}`);
|
|
137
|
+
}
|
|
138
|
+
const data = (await response.json());
|
|
139
|
+
if (data.errors) {
|
|
140
|
+
this.error(`Linear API error: ${data.errors[0].message}`);
|
|
141
|
+
}
|
|
142
|
+
return data.data.issues.nodes;
|
|
143
|
+
}
|
|
144
|
+
formatIssues(issues, projectName) {
|
|
145
|
+
const title = projectName === 'all' ? 'All Issues' : `${projectName} Issues`;
|
|
146
|
+
if (issues.length === 0) {
|
|
147
|
+
return {
|
|
148
|
+
content: `# ${title}\n\nNo issues found.`,
|
|
149
|
+
source: `linear:${projectName}`,
|
|
150
|
+
title,
|
|
151
|
+
metadata: { type: 'linear', issues: 0 },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const sections = [`# ${title}\n`];
|
|
155
|
+
// Group by priority
|
|
156
|
+
const priorityOrder = ['Urgent', 'High', 'Medium', 'Low', 'No priority'];
|
|
157
|
+
const byPriority = {};
|
|
158
|
+
for (const issue of issues) {
|
|
159
|
+
const priority = issue.priorityLabel || 'No priority';
|
|
160
|
+
if (!byPriority[priority]) {
|
|
161
|
+
byPriority[priority] = [];
|
|
162
|
+
}
|
|
163
|
+
byPriority[priority].push(issue);
|
|
164
|
+
}
|
|
165
|
+
const priorityEmoji = {
|
|
166
|
+
Urgent: '🔴',
|
|
167
|
+
High: '🟠',
|
|
168
|
+
Medium: '🟡',
|
|
169
|
+
Low: '🔵',
|
|
170
|
+
'No priority': '⚪',
|
|
171
|
+
};
|
|
172
|
+
for (const priority of priorityOrder) {
|
|
173
|
+
const priorityIssues = byPriority[priority];
|
|
174
|
+
if (!priorityIssues || priorityIssues.length === 0)
|
|
175
|
+
continue;
|
|
176
|
+
sections.push(`\n## ${priorityEmoji[priority] || '⚪'} ${priority}\n`);
|
|
177
|
+
for (const issue of priorityIssues) {
|
|
178
|
+
sections.push(`### ${issue.identifier}: ${issue.title}`);
|
|
179
|
+
const meta = [];
|
|
180
|
+
if (issue.state?.name) {
|
|
181
|
+
meta.push(`Status: ${issue.state.name}`);
|
|
182
|
+
}
|
|
183
|
+
if (issue.team?.name) {
|
|
184
|
+
meta.push(`Team: ${issue.team.name}`);
|
|
185
|
+
}
|
|
186
|
+
if (issue.project?.name) {
|
|
187
|
+
meta.push(`Project: ${issue.project.name}`);
|
|
188
|
+
}
|
|
189
|
+
const labels = issue.labels?.nodes?.map((l) => l.name).filter(Boolean);
|
|
190
|
+
if (labels && labels.length > 0) {
|
|
191
|
+
meta.push(`Labels: ${labels.join(', ')}`);
|
|
192
|
+
}
|
|
193
|
+
if (meta.length > 0) {
|
|
194
|
+
sections.push(`*${meta.join(' | ')}*`);
|
|
195
|
+
}
|
|
196
|
+
sections.push('');
|
|
197
|
+
if (issue.description) {
|
|
198
|
+
sections.push(issue.description);
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
sections.push('*No description*');
|
|
202
|
+
}
|
|
203
|
+
sections.push('');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
content: sections.join('\n'),
|
|
208
|
+
source: `linear:${projectName}`,
|
|
209
|
+
title,
|
|
210
|
+
metadata: {
|
|
211
|
+
type: 'linear',
|
|
212
|
+
project: projectName,
|
|
213
|
+
issues: issues.length,
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
getHelp() {
|
|
218
|
+
return `
|
|
219
|
+
linear: Fetch issues from Linear
|
|
220
|
+
|
|
221
|
+
Usage:
|
|
222
|
+
ralph-starter run --from linear --project "My Project"
|
|
223
|
+
ralph-starter run --from linear --project TEAM-KEY --label "feature"
|
|
224
|
+
|
|
225
|
+
Options:
|
|
226
|
+
--project Project name, team name, or team key (e.g., ENG)
|
|
227
|
+
--label Filter by label name
|
|
228
|
+
--status Filter by status name (e.g., "In Progress", "Todo")
|
|
229
|
+
--limit Maximum issues to fetch (default: 50)
|
|
230
|
+
|
|
231
|
+
Authentication:
|
|
232
|
+
|
|
233
|
+
Option 1: Linear CLI (recommended)
|
|
234
|
+
1. Install: npm install -g @linear/cli
|
|
235
|
+
2. Login: linear auth login
|
|
236
|
+
|
|
237
|
+
Option 2: API Key
|
|
238
|
+
1. Get API key from: https://linear.app/settings/api
|
|
239
|
+
2. Run: ralph-starter config set linear.apiKey <key>
|
|
240
|
+
|
|
241
|
+
Examples:
|
|
242
|
+
ralph-starter run --from linear --project "Mobile App"
|
|
243
|
+
ralph-starter run --from linear --project ENG --label "bug"
|
|
244
|
+
ralph-starter run --from linear --project all --status "In Progress"
|
|
245
|
+
`.trim();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/integrations/linear/source.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/notion/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notion Integration Source
|
|
3
|
+
*
|
|
4
|
+
* Fetches pages from Notion:
|
|
5
|
+
* - Public pages: HTML fetch (no auth needed)
|
|
6
|
+
* - Private pages: Notion API (requires token)
|
|
7
|
+
*/
|
|
8
|
+
import { type AuthMethod, BaseIntegration, type IntegrationOptions, type IntegrationResult } from '../base.js';
|
|
9
|
+
export declare class NotionIntegration extends BaseIntegration {
|
|
10
|
+
name: string;
|
|
11
|
+
displayName: string;
|
|
12
|
+
description: string;
|
|
13
|
+
website: string;
|
|
14
|
+
authMethods: AuthMethod[];
|
|
15
|
+
private readonly API_BASE;
|
|
16
|
+
private readonly API_VERSION;
|
|
17
|
+
fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
|
|
18
|
+
private isNotionUrl;
|
|
19
|
+
/**
|
|
20
|
+
* Fetch a public Notion page via HTML
|
|
21
|
+
* Returns null if the page is not public
|
|
22
|
+
*/
|
|
23
|
+
private fetchPublicPage;
|
|
24
|
+
/**
|
|
25
|
+
* Convert Notion HTML to markdown
|
|
26
|
+
*/
|
|
27
|
+
private htmlToMarkdown;
|
|
28
|
+
/**
|
|
29
|
+
* Extract title from Notion HTML
|
|
30
|
+
*/
|
|
31
|
+
private extractTitle;
|
|
32
|
+
/**
|
|
33
|
+
* Fetch via Notion API (for private pages or search)
|
|
34
|
+
*/
|
|
35
|
+
private fetchViaApi;
|
|
36
|
+
private isNotionId;
|
|
37
|
+
private extractIdFromUrl;
|
|
38
|
+
private formatNotionId;
|
|
39
|
+
private fetchPageById;
|
|
40
|
+
private searchNotion;
|
|
41
|
+
private apiRequest;
|
|
42
|
+
private formatPage;
|
|
43
|
+
private formatDatabase;
|
|
44
|
+
private getPageTitle;
|
|
45
|
+
private getDatabaseTitle;
|
|
46
|
+
private formatProperties;
|
|
47
|
+
private getPropertyValue;
|
|
48
|
+
private blocksToMarkdown;
|
|
49
|
+
private blockToMarkdown;
|
|
50
|
+
private richTextToPlain;
|
|
51
|
+
getHelp(): string;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAoBpB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,WAAW,SAAiD;IAC5D,OAAO,SAAuB;IAG9B,WAAW,EAAE,UAAU,EAAE,CAAuB;IAEhD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAEtC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BzF,OAAO,CAAC,WAAW;IAInB;;;OAGG;YACW,eAAe;IAuC7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;YACW,WAAW;IAqBzB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;YAKR,aAAa;YA+Bb,YAAY;YAsDZ,UAAU;IA8BxB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,eAAe;IAKvB,OAAO,IAAI,MAAM;CAsClB"}
|