一键导入
integrations
Connected apps, OAuth tokens, webhooks, and sync logs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Connected apps, OAuth tokens, webhooks, and sync logs
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Backend skills for Supabase — CRM, billing, support, and more
Run comprehensive PLG analysis on a codebase to detect tech stack, existing growth features, and revenue opportunities. Use when the user says "analyze", "scan", "audit codebase", or "find growth opportunities".
Generate context-aware implementation prompts for a selected growth loop. Use when the user says "build", "implement", "generate code", "create prompt", or "how do I build this".
Set up analytics and tracking infrastructure for growth loops. Use when the user says "deploy telemetry", "set up analytics", "tracking", "events", "push to supabase", or "skene push".
Generate prioritized growth loops with implementation roadmaps based on codebase analysis. Use when the user says "plan", "growth loops", "prioritize", "what should I build", or "roadmap".
Check if growth loop requirements are actually implemented in the codebase. Use when the user says "validate", "check status", "skene status", "is it done", or "verify implementation".
| name | integrations |
| description | Connected apps, OAuth tokens, webhooks, and sync logs |
Connected apps, OAuth tokens, webhooks, and sync logs. Manages third-party connections, credential storage, outgoing webhook delivery, and data synchronization tracking.
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key, auto-generated |
| org_id | uuid | References organizations(id), cascade delete |
| name | text | Display name of the connected app |
| provider | text | Provider identifier (slack, hubspot, stripe, etc.) |
| status | integration_status | Connection health status, defaults to active |
| config | jsonb | Provider-specific configuration |
| connected_by | uuid | References users(id), set null on delete |
| connected_at | timestamptz | When the connection was established |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Auto-updated on modification |
| metadata | jsonb | Arbitrary key-value data |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key, auto-generated |
| org_id | uuid | References organizations(id), cascade delete |
| app_id | uuid | References connected_apps(id), cascade delete |
| user_id | uuid | References users(id), cascade delete |
| access_token_enc | text | Encrypted access token |
| refresh_token_enc | text | Encrypted refresh token (optional) |
| token_type | text | Token type, defaults to bearer |
| scopes | text[] | Granted OAuth scopes |
| expires_at | timestamptz | Token expiration time |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Auto-updated on modification |
| metadata | jsonb | Arbitrary key-value data |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key, auto-generated |
| org_id | uuid | References organizations(id), cascade delete |
| url | text | Destination URL for webhook delivery |
| secret | text | Signing secret for payload verification |
| events | text[] | Event types this webhook subscribes to |
| is_active | boolean | Whether the webhook is enabled, defaults to true |
| created_by | uuid | References users(id), set null on delete |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Auto-updated on modification |
| metadata | jsonb | Arbitrary key-value data |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key, auto-generated |
| org_id | uuid | References organizations(id), cascade delete |
| webhook_id | uuid | References webhooks(id), cascade delete |
| event_type | text | The type of event that triggered delivery |
| payload | jsonb | Event payload sent to the endpoint |
| status | webhook_event_status | Delivery status, defaults to pending |
| response_code | smallint | HTTP response code from the endpoint |
| attempts | integer | Number of delivery attempts, defaults to 0 |
| last_attempt_at | timestamptz | Timestamp of the most recent attempt |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Auto-updated on modification |
| metadata | jsonb | Arbitrary key-value data |
| Column | Type | Description |
|---|---|---|
| id | uuid | Primary key, auto-generated |
| org_id | uuid | References organizations(id), cascade delete |
| app_id | uuid | References connected_apps(id), cascade delete |
| direction | sync_direction | Whether the sync is inbound or outbound |
| entity_type | text | Type of entity being synced (contacts, deals, etc.) |
| entity_id | uuid | Optional specific entity being synced |
| status | sync_status | Current sync status, defaults to pending |
| records_processed | integer | Number of records handled, defaults to 0 |
| records_failed | integer | Number of records that failed, defaults to 0 |
| started_at | timestamptz | When the sync run began |
| completed_at | timestamptz | When the sync run finished |
| error | text | Error details if the sync failed |
| created_at | timestamptz | Row creation timestamp |
| updated_at | timestamptz | Auto-updated on modification |
| metadata | jsonb | Arbitrary key-value data |
| Value | Description |
|---|---|
| active | Connection is healthy and operational |
| inactive | Connection is disabled |
| error | Connection has a problem that needs attention |
| Value | Description |
|---|---|
| pending | Event is queued for delivery |
| sent | Event was delivered successfully |
| failed | Delivery failed after all retry attempts |
| Value | Description |
|---|---|
| inbound | Data flowing from the external app into the platform |
| outbound | Data flowing from the platform to the external app |
| Value | Description |
|---|---|
| pending | Sync is queued but has not started |
| running | Sync is currently executing |
| completed | Sync finished successfully |
| failed | Sync finished with an error |
All five tables are scoped to the current user's organization via get_user_org_id(). Select, insert, and update are allowed for any org member. Delete requires the is_admin() check.
get_user_org_id() and is_admin() functions, set_updated_at() trigger functionList all active connected apps for the current org:
SELECT id, name, provider, status, connected_at
FROM connected_apps
WHERE status = 'active'
ORDER BY connected_at DESC;
Webhook delivery status summary (last 30 days):
SELECT
w.url,
count(we.id) AS total_events,
count(we.id) FILTER (WHERE we.status = 'sent') AS delivered,
count(we.id) FILTER (WHERE we.status = 'failed') AS failed,
count(we.id) FILTER (WHERE we.status = 'pending') AS pending
FROM webhooks w
LEFT JOIN webhook_events we ON we.webhook_id = w.id
AND we.created_at >= now() - interval '30 days'
WHERE w.is_active = true
GROUP BY w.id, w.url
ORDER BY w.url;
Sync history for a specific app:
SELECT
sl.direction,
sl.entity_type,
sl.status,
sl.records_processed,
sl.records_failed,
sl.started_at,
sl.completed_at,
sl.error
FROM sync_logs sl
WHERE sl.app_id = '<app_id>'
ORDER BY sl.started_at DESC
LIMIT 20;
Failed syncs in the last 7 days:
SELECT
ca.name AS app_name,
sl.direction,
sl.entity_type,
sl.error,
sl.started_at
FROM sync_logs sl
JOIN connected_apps ca ON ca.id = sl.app_id
WHERE sl.status = 'failed'
AND sl.started_at >= now() - interval '7 days'
ORDER BY sl.started_at DESC;
Active integrations with token expiration status:
SELECT
ca.name AS app_name,
ca.provider,
ot.user_id,
ot.scopes,
ot.expires_at,
CASE
WHEN ot.expires_at < now() THEN 'expired'
WHEN ot.expires_at < now() + interval '7 days' THEN 'expiring_soon'
ELSE 'valid'
END AS token_status
FROM connected_apps ca
JOIN oauth_tokens ot ON ot.app_id = ca.id
WHERE ca.status = 'active'
ORDER BY ot.expires_at ASC;
Failed webhook events awaiting retry:
SELECT
w.url,
we.event_type,
we.attempts,
we.response_code,
we.last_attempt_at,
we.payload
FROM webhook_events we
JOIN webhooks w ON w.id = we.webhook_id
WHERE we.status = 'failed'
ORDER BY we.last_attempt_at DESC;