@jini-ai/integrations 0.1.0
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/LICENSE +201 -0
- package/README.md +51 -0
- package/dist/composio/bounded-data.d.ts +36 -0
- package/dist/composio/bounded-data.d.ts.map +1 -0
- package/dist/composio/bounded-data.js +181 -0
- package/dist/composio/bounded-data.js.map +1 -0
- package/dist/composio/catalog.d.ts +147 -0
- package/dist/composio/catalog.d.ts.map +1 -0
- package/dist/composio/catalog.js +126 -0
- package/dist/composio/catalog.js.map +1 -0
- package/dist/composio/composio-config.d.ts +42 -0
- package/dist/composio/composio-config.d.ts.map +1 -0
- package/dist/composio/composio-config.js +145 -0
- package/dist/composio/composio-config.js.map +1 -0
- package/dist/composio/composio-descriptions.d.ts +16 -0
- package/dist/composio/composio-descriptions.d.ts.map +1 -0
- package/dist/composio/composio-descriptions.js +766 -0
- package/dist/composio/composio-descriptions.js.map +1 -0
- package/dist/composio/composio.d.ts +364 -0
- package/dist/composio/composio.d.ts.map +1 -0
- package/dist/composio/composio.js +1902 -0
- package/dist/composio/composio.js.map +1 -0
- package/dist/composio/errors.d.ts +15 -0
- package/dist/composio/errors.d.ts.map +1 -0
- package/dist/composio/errors.js +16 -0
- package/dist/composio/errors.js.map +1 -0
- package/dist/composio/file-lock.d.ts +13 -0
- package/dist/composio/file-lock.d.ts.map +1 -0
- package/dist/composio/file-lock.js +92 -0
- package/dist/composio/file-lock.js.map +1 -0
- package/dist/composio/index.d.ts +18 -0
- package/dist/composio/index.d.ts.map +1 -0
- package/dist/composio/index.js +7 -0
- package/dist/composio/index.js.map +1 -0
- package/dist/composio/json-schema.d.ts +93 -0
- package/dist/composio/json-schema.d.ts.map +1 -0
- package/dist/composio/json-schema.js +498 -0
- package/dist/composio/json-schema.js.map +1 -0
- package/dist/composio/output-protection.d.ts +32 -0
- package/dist/composio/output-protection.d.ts.map +1 -0
- package/dist/composio/output-protection.js +105 -0
- package/dist/composio/output-protection.js.map +1 -0
- package/dist/composio/service.d.ts +181 -0
- package/dist/composio/service.d.ts.map +1 -0
- package/dist/composio/service.js +758 -0
- package/dist/composio/service.js.map +1 -0
- package/dist/media-providers/capability-registry.d.ts +28 -0
- package/dist/media-providers/capability-registry.d.ts.map +1 -0
- package/dist/media-providers/capability-registry.js +27 -0
- package/dist/media-providers/capability-registry.js.map +1 -0
- package/dist/media-providers/catalog.d.ts +20 -0
- package/dist/media-providers/catalog.d.ts.map +1 -0
- package/dist/media-providers/catalog.js +20 -0
- package/dist/media-providers/catalog.js.map +1 -0
- package/dist/media-providers/dispatch/context.d.ts +21 -0
- package/dist/media-providers/dispatch/context.d.ts.map +1 -0
- package/dist/media-providers/dispatch/context.js +36 -0
- package/dist/media-providers/dispatch/context.js.map +1 -0
- package/dist/media-providers/dispatch/credentials.d.ts +4 -0
- package/dist/media-providers/dispatch/credentials.d.ts.map +1 -0
- package/dist/media-providers/dispatch/credentials.js +25 -0
- package/dist/media-providers/dispatch/credentials.js.map +1 -0
- package/dist/media-providers/dispatch/engine.d.ts +30 -0
- package/dist/media-providers/dispatch/engine.d.ts.map +1 -0
- package/dist/media-providers/dispatch/engine.js +208 -0
- package/dist/media-providers/dispatch/engine.js.map +1 -0
- package/dist/media-providers/dispatch/index.d.ts +25 -0
- package/dist/media-providers/dispatch/index.d.ts.map +1 -0
- package/dist/media-providers/dispatch/index.js +24 -0
- package/dist/media-providers/dispatch/index.js.map +1 -0
- package/dist/media-providers/dispatch/openai-compatible.d.ts +44 -0
- package/dist/media-providers/dispatch/openai-compatible.d.ts.map +1 -0
- package/dist/media-providers/dispatch/openai-compatible.js +214 -0
- package/dist/media-providers/dispatch/openai-compatible.js.map +1 -0
- package/dist/media-providers/dispatch/providers/aihubmix-shared.d.ts +72 -0
- package/dist/media-providers/dispatch/providers/aihubmix-shared.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/aihubmix-shared.js +131 -0
- package/dist/media-providers/dispatch/providers/aihubmix-shared.js.map +1 -0
- package/dist/media-providers/dispatch/providers/aihubmix.d.ts +4 -0
- package/dist/media-providers/dispatch/providers/aihubmix.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/aihubmix.js +205 -0
- package/dist/media-providers/dispatch/providers/aihubmix.js.map +1 -0
- package/dist/media-providers/dispatch/providers/custom-image.d.ts +6 -0
- package/dist/media-providers/dispatch/providers/custom-image.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/custom-image.js +94 -0
- package/dist/media-providers/dispatch/providers/custom-image.js.map +1 -0
- package/dist/media-providers/dispatch/providers/elevenlabs.d.ts +4 -0
- package/dist/media-providers/dispatch/providers/elevenlabs.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/elevenlabs.js +163 -0
- package/dist/media-providers/dispatch/providers/elevenlabs.js.map +1 -0
- package/dist/media-providers/dispatch/providers/fishaudio.d.ts +3 -0
- package/dist/media-providers/dispatch/providers/fishaudio.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/fishaudio.js +83 -0
- package/dist/media-providers/dispatch/providers/fishaudio.js.map +1 -0
- package/dist/media-providers/dispatch/providers/grok.d.ts +15 -0
- package/dist/media-providers/dispatch/providers/grok.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/grok.js +150 -0
- package/dist/media-providers/dispatch/providers/grok.js.map +1 -0
- package/dist/media-providers/dispatch/providers/imagerouter.d.ts +6 -0
- package/dist/media-providers/dispatch/providers/imagerouter.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/imagerouter.js +131 -0
- package/dist/media-providers/dispatch/providers/imagerouter.js.map +1 -0
- package/dist/media-providers/dispatch/providers/minimax.d.ts +3 -0
- package/dist/media-providers/dispatch/providers/minimax.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/minimax.js +96 -0
- package/dist/media-providers/dispatch/providers/minimax.js.map +1 -0
- package/dist/media-providers/dispatch/providers/nanobanana.d.ts +3 -0
- package/dist/media-providers/dispatch/providers/nanobanana.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/nanobanana.js +142 -0
- package/dist/media-providers/dispatch/providers/nanobanana.js.map +1 -0
- package/dist/media-providers/dispatch/providers/openai.d.ts +4 -0
- package/dist/media-providers/dispatch/providers/openai.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/openai.js +231 -0
- package/dist/media-providers/dispatch/providers/openai.js.map +1 -0
- package/dist/media-providers/dispatch/providers/openrouter.d.ts +13 -0
- package/dist/media-providers/dispatch/providers/openrouter.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/openrouter.js +152 -0
- package/dist/media-providers/dispatch/providers/openrouter.js.map +1 -0
- package/dist/media-providers/dispatch/providers/senseaudio.d.ts +4 -0
- package/dist/media-providers/dispatch/providers/senseaudio.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/senseaudio.js +190 -0
- package/dist/media-providers/dispatch/providers/senseaudio.js.map +1 -0
- package/dist/media-providers/dispatch/providers/volcengine.d.ts +3 -0
- package/dist/media-providers/dispatch/providers/volcengine.d.ts.map +1 -0
- package/dist/media-providers/dispatch/providers/volcengine.js +95 -0
- package/dist/media-providers/dispatch/providers/volcengine.js.map +1 -0
- package/dist/media-providers/dispatch/response-parsers.d.ts +44 -0
- package/dist/media-providers/dispatch/response-parsers.d.ts.map +1 -0
- package/dist/media-providers/dispatch/response-parsers.js +103 -0
- package/dist/media-providers/dispatch/response-parsers.js.map +1 -0
- package/dist/media-providers/dispatch/ssrf-guard.d.ts +51 -0
- package/dist/media-providers/dispatch/ssrf-guard.d.ts.map +1 -0
- package/dist/media-providers/dispatch/ssrf-guard.js +215 -0
- package/dist/media-providers/dispatch/ssrf-guard.js.map +1 -0
- package/dist/media-providers/dispatch/stub.d.ts +5 -0
- package/dist/media-providers/dispatch/stub.d.ts.map +1 -0
- package/dist/media-providers/dispatch/stub.js +98 -0
- package/dist/media-providers/dispatch/stub.js.map +1 -0
- package/dist/media-providers/dispatch/types.d.ts +133 -0
- package/dist/media-providers/dispatch/types.d.ts.map +1 -0
- package/dist/media-providers/dispatch/types.js +2 -0
- package/dist/media-providers/dispatch/types.js.map +1 -0
- package/dist/media-providers/dispatch/vendor-adapter.d.ts +54 -0
- package/dist/media-providers/dispatch/vendor-adapter.d.ts.map +1 -0
- package/dist/media-providers/dispatch/vendor-adapter.js +68 -0
- package/dist/media-providers/dispatch/vendor-adapter.js.map +1 -0
- package/dist/media-providers/dispatch/vendor-registry.d.ts +36 -0
- package/dist/media-providers/dispatch/vendor-registry.d.ts.map +1 -0
- package/dist/media-providers/dispatch/vendor-registry.js +46 -0
- package/dist/media-providers/dispatch/vendor-registry.js.map +1 -0
- package/dist/media-providers/index.d.ts +22 -0
- package/dist/media-providers/index.d.ts.map +1 -0
- package/dist/media-providers/index.js +22 -0
- package/dist/media-providers/index.js.map +1 -0
- package/dist/media-providers/policy.d.ts +49 -0
- package/dist/media-providers/policy.d.ts.map +1 -0
- package/dist/media-providers/policy.js +39 -0
- package/dist/media-providers/policy.js.map +1 -0
- package/dist/media-providers/providers.d.ts +33 -0
- package/dist/media-providers/providers.d.ts.map +1 -0
- package/dist/media-providers/providers.js +200 -0
- package/dist/media-providers/providers.js.map +1 -0
- package/dist/media-providers/seed.d.ts +14 -0
- package/dist/media-providers/seed.d.ts.map +1 -0
- package/dist/media-providers/seed.js +109 -0
- package/dist/media-providers/seed.js.map +1 -0
- package/dist/media-providers/sqlite-task-store.d.ts +29 -0
- package/dist/media-providers/sqlite-task-store.d.ts.map +1 -0
- package/dist/media-providers/sqlite-task-store.js +234 -0
- package/dist/media-providers/sqlite-task-store.js.map +1 -0
- package/dist/media-providers/staging.d.ts +29 -0
- package/dist/media-providers/staging.d.ts.map +1 -0
- package/dist/media-providers/staging.js +141 -0
- package/dist/media-providers/staging.js.map +1 -0
- package/dist/media-providers/task-store.d.ts +94 -0
- package/dist/media-providers/task-store.d.ts.map +1 -0
- package/dist/media-providers/task-store.js +160 -0
- package/dist/media-providers/task-store.js.map +1 -0
- package/dist/media-providers/tokens.d.ts +7 -0
- package/dist/media-providers/tokens.d.ts.map +1 -0
- package/dist/media-providers/tokens.js +13 -0
- package/dist/media-providers/tokens.js.map +1 -0
- package/dist/media-providers/types.d.ts +123 -0
- package/dist/media-providers/types.d.ts.map +1 -0
- package/dist/media-providers/types.js +12 -0
- package/dist/media-providers/types.js.map +1 -0
- package/dist/media-providers/video-request.d.ts +62 -0
- package/dist/media-providers/video-request.d.ts.map +1 -0
- package/dist/media-providers/video-request.js +219 -0
- package/dist/media-providers/video-request.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { getConnectorSchemaSupportError } from './json-schema.js';
|
|
2
|
+
const destructiveHintPattern = /(?:^|[._:\-/\s])(?:ban|deactivate|delete|destroy|disconnect|drop|erase|purge|remove-all|remove_all|reset|revoke|terminate|truncate|unlink|wipe)(?:$|[._:\-/\s])/i;
|
|
3
|
+
const writeHintPattern = /(?:^|[._:\-/\s])(?:add|admin|append|approve|archive|assign|cancel|close|comment|complete|copy|create|disable|edit|enable|import|invite|join|leave|like|manage|mark|merge|move|mute|post|publish|react|rename|reply|restore|schedule|send|set|share|star|submit|subscribe|transfer|unarchive|update|upload|upsert|write)(?:$|[._:\-/\s])/i;
|
|
4
|
+
const readOnlyHintPattern = /(?:^|[._:\-/\s])(?:download|fetch|find|get|inspect|list|lookup|query|read|readonly|read-only|read_only|search|status|summary|view)(?:$|[._:\-/\s])/i;
|
|
5
|
+
function connectorToolSafetyHaystack(input) {
|
|
6
|
+
return [input.name, input.providerToolId, input.title, input.description, ...(input.requiredScopes ?? [])]
|
|
7
|
+
.filter((value) => typeof value === 'string' && value.length > 0)
|
|
8
|
+
.join(' ');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Classifies a provider tool conservatively from its name, description, and
|
|
12
|
+
* scopes. Ambiguous tools require confirmation.
|
|
13
|
+
*/
|
|
14
|
+
export function classifyConnectorToolSafety(input) {
|
|
15
|
+
const haystack = connectorToolSafetyHaystack(input);
|
|
16
|
+
if (destructiveHintPattern.test(haystack)) {
|
|
17
|
+
return {
|
|
18
|
+
sideEffect: 'destructive',
|
|
19
|
+
approval: 'disabled',
|
|
20
|
+
reason: 'Tool name, scope, or description contains destructive hints; destructive tools are not refreshable.',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
if (writeHintPattern.test(haystack)) {
|
|
24
|
+
return {
|
|
25
|
+
sideEffect: 'write',
|
|
26
|
+
approval: 'confirm',
|
|
27
|
+
reason: 'Tool name, scope, or description indicates write-capable behavior; explicit confirmation is required.',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (readOnlyHintPattern.test(haystack)) {
|
|
31
|
+
return {
|
|
32
|
+
sideEffect: 'read',
|
|
33
|
+
approval: 'auto',
|
|
34
|
+
reason: 'Tool metadata consistently indicates explicit read-only behavior.',
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
sideEffect: 'write',
|
|
39
|
+
approval: 'confirm',
|
|
40
|
+
reason: 'Tool safety could not be proven read-only; defaulting to confirmation-required write policy.',
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Returns whether a tool is safe for unattended refresh execution. */
|
|
44
|
+
export function isRefreshEligibleConnectorToolSafety(safety) {
|
|
45
|
+
return safety.sideEffect === 'read' && safety.approval === 'auto';
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Builds a catalog tool and derives safety defaults when the caller omitted
|
|
49
|
+
* them.
|
|
50
|
+
*
|
|
51
|
+
* @overallScore 100/100
|
|
52
|
+
*/
|
|
53
|
+
export function defineConnectorTool(tool) {
|
|
54
|
+
const safety = tool.safety ?? classifyConnectorToolSafety(tool);
|
|
55
|
+
const inputSchemaUnsupportedReason = tool.inputSchemaUnsupportedReason
|
|
56
|
+
?? (tool.inputSchemaJson === undefined
|
|
57
|
+
? 'connector input schema is missing'
|
|
58
|
+
: getConnectorSchemaSupportError(tool.inputSchemaJson));
|
|
59
|
+
return {
|
|
60
|
+
...tool,
|
|
61
|
+
safety,
|
|
62
|
+
...(inputSchemaUnsupportedReason === undefined ? {} : { inputSchemaUnsupportedReason }),
|
|
63
|
+
refreshEligible: inputSchemaUnsupportedReason === undefined
|
|
64
|
+
&& (tool.refreshEligible ?? isRefreshEligibleConnectorToolSafety(safety)),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function cloneJsonValue(value) {
|
|
68
|
+
if (Array.isArray(value))
|
|
69
|
+
return value.map((item) => cloneJsonValue(item));
|
|
70
|
+
if (value !== null && typeof value === 'object') {
|
|
71
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, cloneJsonValue(entry)]));
|
|
72
|
+
}
|
|
73
|
+
return value;
|
|
74
|
+
}
|
|
75
|
+
function cloneJsonObject(value) {
|
|
76
|
+
return cloneJsonValue(value);
|
|
77
|
+
}
|
|
78
|
+
function toolDefinitionToDetail(tool) {
|
|
79
|
+
return {
|
|
80
|
+
name: tool.name,
|
|
81
|
+
title: tool.title,
|
|
82
|
+
...(tool.description === undefined ? {} : { description: tool.description }),
|
|
83
|
+
...(tool.inputSchemaJson === undefined ? {} : { inputSchemaJson: cloneJsonObject(tool.inputSchemaJson) }),
|
|
84
|
+
...(tool.inputSchemaUnsupportedReason === undefined ? {} : { inputSchemaUnsupportedReason: tool.inputSchemaUnsupportedReason }),
|
|
85
|
+
...(tool.outputSchemaJson === undefined ? {} : { outputSchemaJson: cloneJsonObject(tool.outputSchemaJson) }),
|
|
86
|
+
safety: { ...tool.safety },
|
|
87
|
+
refreshEligible: tool.refreshEligible,
|
|
88
|
+
...(tool.curation === undefined
|
|
89
|
+
? {}
|
|
90
|
+
: { curation: { ...(tool.curation.useCases === undefined ? {} : { useCases: [...tool.curation.useCases] }), ...(tool.curation.reason === undefined ? {} : { reason: tool.curation.reason }) } }),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a detached wire detail from a catalog definition.
|
|
95
|
+
*
|
|
96
|
+
* @overallScore 100/100
|
|
97
|
+
*/
|
|
98
|
+
export function connectorDefinitionToDetail(definition) {
|
|
99
|
+
return {
|
|
100
|
+
id: definition.id,
|
|
101
|
+
name: definition.name,
|
|
102
|
+
provider: definition.provider,
|
|
103
|
+
category: definition.category,
|
|
104
|
+
...(definition.description === undefined ? {} : { description: definition.description }),
|
|
105
|
+
status: definition.disabled ? 'disabled' : 'available',
|
|
106
|
+
tools: definition.tools.map((tool) => toolDefinitionToDetail(tool)),
|
|
107
|
+
allowedToolNames: [...definition.allowedToolNames],
|
|
108
|
+
// Fall back to `allowedToolNames` when `curatedToolNames` isn't
|
|
109
|
+
// explicitly set — non-Composio connectors don't go through a
|
|
110
|
+
// dynamic merge, so for them the two are equivalent and the badge
|
|
111
|
+
// is stable either way (issue #748).
|
|
112
|
+
curatedToolNames: [...(definition.curatedToolNames ?? definition.allowedToolNames)],
|
|
113
|
+
...(definition.toolCount === undefined ? {} : { toolCount: definition.toolCount }),
|
|
114
|
+
...(definition.toolsNextCursor === undefined ? {} : { toolsNextCursor: definition.toolsNextCursor }),
|
|
115
|
+
...(definition.toolsHasMore === undefined ? {} : { toolsHasMore: definition.toolsHasMore }),
|
|
116
|
+
...(definition.featuredToolNames === undefined
|
|
117
|
+
? {}
|
|
118
|
+
: { featuredToolNames: [...definition.featuredToolNames] }),
|
|
119
|
+
...(definition.minimumApproval === undefined ? {} : { minimumApproval: definition.minimumApproval }),
|
|
120
|
+
auth: {
|
|
121
|
+
provider: definition.authentication,
|
|
122
|
+
configured: definition.authentication === 'local' || definition.authentication === 'none',
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/composio/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Secret Composio project configuration persisted by a host. */
|
|
2
|
+
export interface ComposioConfig {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
authConfigIds: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
/** Safe configuration projection for status surfaces. */
|
|
7
|
+
export interface PublicComposioConfig {
|
|
8
|
+
configured: boolean;
|
|
9
|
+
apiKeyTail: string;
|
|
10
|
+
}
|
|
11
|
+
/** Persistence boundary consumed by {@link ComposioConnectorProvider}. */
|
|
12
|
+
export interface ComposioConfigStore {
|
|
13
|
+
read(): ComposioConfig;
|
|
14
|
+
readPublic(): PublicComposioConfig;
|
|
15
|
+
write(input: unknown): PublicComposioConfig;
|
|
16
|
+
setAuthConfigId(connectorId: string, authConfigId: string): void;
|
|
17
|
+
deleteAuthConfigId(connectorId: string): void;
|
|
18
|
+
}
|
|
19
|
+
/** File adapter options. */
|
|
20
|
+
export interface FileComposioConfigStoreOptions {
|
|
21
|
+
/** Absolute or host-resolved path to the secret JSON file. */
|
|
22
|
+
filePath: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Creates an isolated file-backed config store.
|
|
26
|
+
*
|
|
27
|
+
* Writes use a same-directory temporary file followed by an atomic rename.
|
|
28
|
+
* Directories are created as `0700` and the final secret file is forced to
|
|
29
|
+
* `0600`.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* const store = createFileComposioConfigStore({
|
|
34
|
+
* filePath: '/var/lib/example/composio/config.json',
|
|
35
|
+
* });
|
|
36
|
+
* store.write({ apiKey: 'project-key' });
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @overallScore 100/100
|
|
40
|
+
*/
|
|
41
|
+
export declare function createFileComposioConfigStore({ filePath }: FileComposioConfigStoreOptions): ComposioConfigStore;
|
|
42
|
+
//# sourceMappingURL=composio-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composio-config.d.ts","sourceRoot":"","sources":["../../src/composio/composio-config.ts"],"names":[],"mappings":"AAeA,iEAAiE;AACjE,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,yDAAyD;AACzD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC,IAAI,IAAI,cAAc,CAAC;IACvB,UAAU,IAAI,oBAAoB,CAAC;IACnC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAAC;IAC5C,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACjE,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C;AAED,4BAA4B;AAC5B,MAAM,WAAW,8BAA8B;IAC7C,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,EAAE,QAAQ,EAAE,EAAE,8BAA8B,GAC3C,mBAAmB,CA6CrB"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module composio-config
|
|
3
|
+
*
|
|
4
|
+
* Instance-scoped configuration persistence for the Composio adapter.
|
|
5
|
+
*/
|
|
6
|
+
import crypto from 'node:crypto';
|
|
7
|
+
import fs from 'node:fs';
|
|
8
|
+
import path from 'node:path';
|
|
9
|
+
import { COMPOSIO_MAX_SECRET_STORE_BYTES, readPrivateBoundedUtf8File, } from './bounded-data.js';
|
|
10
|
+
import { withExclusiveFileLock } from './file-lock.js';
|
|
11
|
+
/**
|
|
12
|
+
* Creates an isolated file-backed config store.
|
|
13
|
+
*
|
|
14
|
+
* Writes use a same-directory temporary file followed by an atomic rename.
|
|
15
|
+
* Directories are created as `0700` and the final secret file is forced to
|
|
16
|
+
* `0600`.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const store = createFileComposioConfigStore({
|
|
21
|
+
* filePath: '/var/lib/example/composio/config.json',
|
|
22
|
+
* });
|
|
23
|
+
* store.write({ apiKey: 'project-key' });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @overallScore 100/100
|
|
27
|
+
*/
|
|
28
|
+
export function createFileComposioConfigStore({ filePath }) {
|
|
29
|
+
if (!filePath.trim())
|
|
30
|
+
throw new TypeError('Composio config filePath must not be empty.');
|
|
31
|
+
const resolvedFilePath = path.resolve(filePath);
|
|
32
|
+
const read = () => normalizeComposioConfig(readRawConfig(resolvedFilePath));
|
|
33
|
+
const readPublic = () => toPublicComposioConfig(read());
|
|
34
|
+
const write = (input) => withExclusiveFileLock(resolvedFilePath, () => {
|
|
35
|
+
const prior = normalizeComposioConfig(readRawConfig(resolvedFilePath));
|
|
36
|
+
const record = asRecord(input);
|
|
37
|
+
const hasApiKey = Object.prototype.hasOwnProperty.call(record, 'apiKey');
|
|
38
|
+
const hasAuthConfigIds = Object.prototype.hasOwnProperty.call(record, 'authConfigIds');
|
|
39
|
+
const nextApiKey = hasApiKey ? normalizeOptionalString(record.apiKey) ?? '' : prior.apiKey;
|
|
40
|
+
const apiKeyChanged = prior.apiKey !== nextApiKey;
|
|
41
|
+
const next = normalizeComposioConfig({
|
|
42
|
+
apiKey: nextApiKey,
|
|
43
|
+
authConfigIds: apiKeyChanged ? {} : hasAuthConfigIds ? record.authConfigIds : prior.authConfigIds,
|
|
44
|
+
});
|
|
45
|
+
writeRawConfig(resolvedFilePath, next);
|
|
46
|
+
return toPublicComposioConfig(next);
|
|
47
|
+
});
|
|
48
|
+
const setAuthConfigId = (connectorId, authConfigId) => {
|
|
49
|
+
const normalizedConnectorId = normalizeOptionalString(connectorId);
|
|
50
|
+
const normalizedAuthConfigId = normalizeOptionalString(authConfigId);
|
|
51
|
+
if (!normalizedConnectorId || !normalizedAuthConfigId)
|
|
52
|
+
return;
|
|
53
|
+
withExclusiveFileLock(resolvedFilePath, () => {
|
|
54
|
+
const prior = normalizeComposioConfig(readRawConfig(resolvedFilePath));
|
|
55
|
+
writeRawConfig(resolvedFilePath, {
|
|
56
|
+
apiKey: prior.apiKey,
|
|
57
|
+
authConfigIds: { ...prior.authConfigIds, [normalizedConnectorId]: normalizedAuthConfigId },
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
};
|
|
61
|
+
const deleteAuthConfigId = (connectorId) => {
|
|
62
|
+
const normalizedConnectorId = normalizeOptionalString(connectorId);
|
|
63
|
+
if (!normalizedConnectorId)
|
|
64
|
+
return;
|
|
65
|
+
withExclusiveFileLock(resolvedFilePath, () => {
|
|
66
|
+
const prior = normalizeComposioConfig(readRawConfig(resolvedFilePath));
|
|
67
|
+
if (prior.authConfigIds[normalizedConnectorId] === undefined)
|
|
68
|
+
return;
|
|
69
|
+
const authConfigIds = { ...prior.authConfigIds };
|
|
70
|
+
delete authConfigIds[normalizedConnectorId];
|
|
71
|
+
writeRawConfig(resolvedFilePath, { apiKey: prior.apiKey, authConfigIds });
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
return { read, readPublic, write, setAuthConfigId, deleteAuthConfigId };
|
|
75
|
+
}
|
|
76
|
+
function readRawConfig(filePath) {
|
|
77
|
+
try {
|
|
78
|
+
return JSON.parse(readPrivateBoundedUtf8File(filePath, COMPOSIO_MAX_SECRET_STORE_BYTES));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (isErrno(error, 'ENOENT'))
|
|
82
|
+
return {};
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function writeRawConfig(filePath, config) {
|
|
87
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true, mode: 0o700 });
|
|
88
|
+
fs.chmodSync(path.dirname(filePath), 0o700);
|
|
89
|
+
const tempPath = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`;
|
|
90
|
+
const serialized = `${JSON.stringify(config, null, 2)}\n`;
|
|
91
|
+
if (Buffer.byteLength(serialized, 'utf8') > COMPOSIO_MAX_SECRET_STORE_BYTES) {
|
|
92
|
+
throw new RangeError(`Composio config exceeds the ${COMPOSIO_MAX_SECRET_STORE_BYTES}-byte limit.`);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
fs.writeFileSync(tempPath, serialized, { encoding: 'utf8', mode: 0o600 });
|
|
96
|
+
fs.renameSync(tempPath, filePath);
|
|
97
|
+
fs.chmodSync(filePath, 0o600);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
try {
|
|
101
|
+
fs.unlinkSync(tempPath);
|
|
102
|
+
}
|
|
103
|
+
catch (cleanupError) {
|
|
104
|
+
if (!isErrno(cleanupError, 'ENOENT'))
|
|
105
|
+
throw cleanupError;
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function toPublicComposioConfig(config) {
|
|
111
|
+
return {
|
|
112
|
+
configured: Boolean(config.apiKey),
|
|
113
|
+
apiKeyTail: config.apiKey ? config.apiKey.slice(-4) : '',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
function normalizeComposioConfig(value) {
|
|
117
|
+
const raw = asRecord(value);
|
|
118
|
+
return {
|
|
119
|
+
apiKey: normalizeOptionalString(raw.apiKey) ?? '',
|
|
120
|
+
authConfigIds: normalizeAuthConfigIds(raw.authConfigIds),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function normalizeAuthConfigIds(value) {
|
|
124
|
+
const raw = asRecord(value);
|
|
125
|
+
const next = {};
|
|
126
|
+
for (const [connectorId, authConfigId] of Object.entries(raw)) {
|
|
127
|
+
const normalizedConnectorId = normalizeOptionalString(connectorId);
|
|
128
|
+
const normalizedAuthConfigId = normalizeOptionalString(authConfigId);
|
|
129
|
+
if (normalizedConnectorId && normalizedAuthConfigId)
|
|
130
|
+
next[normalizedConnectorId] = normalizedAuthConfigId;
|
|
131
|
+
}
|
|
132
|
+
return next;
|
|
133
|
+
}
|
|
134
|
+
function asRecord(value) {
|
|
135
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
136
|
+
? value
|
|
137
|
+
: {};
|
|
138
|
+
}
|
|
139
|
+
function normalizeOptionalString(value) {
|
|
140
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
|
|
141
|
+
}
|
|
142
|
+
function isErrno(error, code) {
|
|
143
|
+
return Boolean(error && typeof error === 'object' && 'code' in error && error.code === code);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=composio-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composio-config.js","sourceRoot":"","sources":["../../src/composio/composio-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ComposioToolkitMetadata {
|
|
2
|
+
/** Human-authored description tailored to the SaaS/tool. */
|
|
3
|
+
description: string;
|
|
4
|
+
/** Preferred category tag for the connector card. */
|
|
5
|
+
category: string;
|
|
6
|
+
/** Snapshot count for first paint before live toolkit metadata loads. */
|
|
7
|
+
toolCount?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const COMPOSIO_TOOLKIT_METADATA: Record<string, ComposioToolkitMetadata>;
|
|
10
|
+
/**
|
|
11
|
+
* Resolve curated metadata for a toolkit slug. Returns undefined when the
|
|
12
|
+
* toolkit has not been manually described yet — callers should fall back
|
|
13
|
+
* to a generic description in that case.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getComposioToolkitMetadata(slug: string): ComposioToolkitMetadata | undefined;
|
|
16
|
+
//# sourceMappingURL=composio-descriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composio-descriptions.d.ts","sourceRoot":"","sources":["../../src/composio/composio-descriptions.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,uBAAuB;IACtC,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAswB7E,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAE5F"}
|