@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.
Files changed (191) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +51 -0
  3. package/dist/composio/bounded-data.d.ts +36 -0
  4. package/dist/composio/bounded-data.d.ts.map +1 -0
  5. package/dist/composio/bounded-data.js +181 -0
  6. package/dist/composio/bounded-data.js.map +1 -0
  7. package/dist/composio/catalog.d.ts +147 -0
  8. package/dist/composio/catalog.d.ts.map +1 -0
  9. package/dist/composio/catalog.js +126 -0
  10. package/dist/composio/catalog.js.map +1 -0
  11. package/dist/composio/composio-config.d.ts +42 -0
  12. package/dist/composio/composio-config.d.ts.map +1 -0
  13. package/dist/composio/composio-config.js +145 -0
  14. package/dist/composio/composio-config.js.map +1 -0
  15. package/dist/composio/composio-descriptions.d.ts +16 -0
  16. package/dist/composio/composio-descriptions.d.ts.map +1 -0
  17. package/dist/composio/composio-descriptions.js +766 -0
  18. package/dist/composio/composio-descriptions.js.map +1 -0
  19. package/dist/composio/composio.d.ts +364 -0
  20. package/dist/composio/composio.d.ts.map +1 -0
  21. package/dist/composio/composio.js +1902 -0
  22. package/dist/composio/composio.js.map +1 -0
  23. package/dist/composio/errors.d.ts +15 -0
  24. package/dist/composio/errors.d.ts.map +1 -0
  25. package/dist/composio/errors.js +16 -0
  26. package/dist/composio/errors.js.map +1 -0
  27. package/dist/composio/file-lock.d.ts +13 -0
  28. package/dist/composio/file-lock.d.ts.map +1 -0
  29. package/dist/composio/file-lock.js +92 -0
  30. package/dist/composio/file-lock.js.map +1 -0
  31. package/dist/composio/index.d.ts +18 -0
  32. package/dist/composio/index.d.ts.map +1 -0
  33. package/dist/composio/index.js +7 -0
  34. package/dist/composio/index.js.map +1 -0
  35. package/dist/composio/json-schema.d.ts +93 -0
  36. package/dist/composio/json-schema.d.ts.map +1 -0
  37. package/dist/composio/json-schema.js +498 -0
  38. package/dist/composio/json-schema.js.map +1 -0
  39. package/dist/composio/output-protection.d.ts +32 -0
  40. package/dist/composio/output-protection.d.ts.map +1 -0
  41. package/dist/composio/output-protection.js +105 -0
  42. package/dist/composio/output-protection.js.map +1 -0
  43. package/dist/composio/service.d.ts +181 -0
  44. package/dist/composio/service.d.ts.map +1 -0
  45. package/dist/composio/service.js +758 -0
  46. package/dist/composio/service.js.map +1 -0
  47. package/dist/media-providers/capability-registry.d.ts +28 -0
  48. package/dist/media-providers/capability-registry.d.ts.map +1 -0
  49. package/dist/media-providers/capability-registry.js +27 -0
  50. package/dist/media-providers/capability-registry.js.map +1 -0
  51. package/dist/media-providers/catalog.d.ts +20 -0
  52. package/dist/media-providers/catalog.d.ts.map +1 -0
  53. package/dist/media-providers/catalog.js +20 -0
  54. package/dist/media-providers/catalog.js.map +1 -0
  55. package/dist/media-providers/dispatch/context.d.ts +21 -0
  56. package/dist/media-providers/dispatch/context.d.ts.map +1 -0
  57. package/dist/media-providers/dispatch/context.js +36 -0
  58. package/dist/media-providers/dispatch/context.js.map +1 -0
  59. package/dist/media-providers/dispatch/credentials.d.ts +4 -0
  60. package/dist/media-providers/dispatch/credentials.d.ts.map +1 -0
  61. package/dist/media-providers/dispatch/credentials.js +25 -0
  62. package/dist/media-providers/dispatch/credentials.js.map +1 -0
  63. package/dist/media-providers/dispatch/engine.d.ts +30 -0
  64. package/dist/media-providers/dispatch/engine.d.ts.map +1 -0
  65. package/dist/media-providers/dispatch/engine.js +208 -0
  66. package/dist/media-providers/dispatch/engine.js.map +1 -0
  67. package/dist/media-providers/dispatch/index.d.ts +25 -0
  68. package/dist/media-providers/dispatch/index.d.ts.map +1 -0
  69. package/dist/media-providers/dispatch/index.js +24 -0
  70. package/dist/media-providers/dispatch/index.js.map +1 -0
  71. package/dist/media-providers/dispatch/openai-compatible.d.ts +44 -0
  72. package/dist/media-providers/dispatch/openai-compatible.d.ts.map +1 -0
  73. package/dist/media-providers/dispatch/openai-compatible.js +214 -0
  74. package/dist/media-providers/dispatch/openai-compatible.js.map +1 -0
  75. package/dist/media-providers/dispatch/providers/aihubmix-shared.d.ts +72 -0
  76. package/dist/media-providers/dispatch/providers/aihubmix-shared.d.ts.map +1 -0
  77. package/dist/media-providers/dispatch/providers/aihubmix-shared.js +131 -0
  78. package/dist/media-providers/dispatch/providers/aihubmix-shared.js.map +1 -0
  79. package/dist/media-providers/dispatch/providers/aihubmix.d.ts +4 -0
  80. package/dist/media-providers/dispatch/providers/aihubmix.d.ts.map +1 -0
  81. package/dist/media-providers/dispatch/providers/aihubmix.js +205 -0
  82. package/dist/media-providers/dispatch/providers/aihubmix.js.map +1 -0
  83. package/dist/media-providers/dispatch/providers/custom-image.d.ts +6 -0
  84. package/dist/media-providers/dispatch/providers/custom-image.d.ts.map +1 -0
  85. package/dist/media-providers/dispatch/providers/custom-image.js +94 -0
  86. package/dist/media-providers/dispatch/providers/custom-image.js.map +1 -0
  87. package/dist/media-providers/dispatch/providers/elevenlabs.d.ts +4 -0
  88. package/dist/media-providers/dispatch/providers/elevenlabs.d.ts.map +1 -0
  89. package/dist/media-providers/dispatch/providers/elevenlabs.js +163 -0
  90. package/dist/media-providers/dispatch/providers/elevenlabs.js.map +1 -0
  91. package/dist/media-providers/dispatch/providers/fishaudio.d.ts +3 -0
  92. package/dist/media-providers/dispatch/providers/fishaudio.d.ts.map +1 -0
  93. package/dist/media-providers/dispatch/providers/fishaudio.js +83 -0
  94. package/dist/media-providers/dispatch/providers/fishaudio.js.map +1 -0
  95. package/dist/media-providers/dispatch/providers/grok.d.ts +15 -0
  96. package/dist/media-providers/dispatch/providers/grok.d.ts.map +1 -0
  97. package/dist/media-providers/dispatch/providers/grok.js +150 -0
  98. package/dist/media-providers/dispatch/providers/grok.js.map +1 -0
  99. package/dist/media-providers/dispatch/providers/imagerouter.d.ts +6 -0
  100. package/dist/media-providers/dispatch/providers/imagerouter.d.ts.map +1 -0
  101. package/dist/media-providers/dispatch/providers/imagerouter.js +131 -0
  102. package/dist/media-providers/dispatch/providers/imagerouter.js.map +1 -0
  103. package/dist/media-providers/dispatch/providers/minimax.d.ts +3 -0
  104. package/dist/media-providers/dispatch/providers/minimax.d.ts.map +1 -0
  105. package/dist/media-providers/dispatch/providers/minimax.js +96 -0
  106. package/dist/media-providers/dispatch/providers/minimax.js.map +1 -0
  107. package/dist/media-providers/dispatch/providers/nanobanana.d.ts +3 -0
  108. package/dist/media-providers/dispatch/providers/nanobanana.d.ts.map +1 -0
  109. package/dist/media-providers/dispatch/providers/nanobanana.js +142 -0
  110. package/dist/media-providers/dispatch/providers/nanobanana.js.map +1 -0
  111. package/dist/media-providers/dispatch/providers/openai.d.ts +4 -0
  112. package/dist/media-providers/dispatch/providers/openai.d.ts.map +1 -0
  113. package/dist/media-providers/dispatch/providers/openai.js +231 -0
  114. package/dist/media-providers/dispatch/providers/openai.js.map +1 -0
  115. package/dist/media-providers/dispatch/providers/openrouter.d.ts +13 -0
  116. package/dist/media-providers/dispatch/providers/openrouter.d.ts.map +1 -0
  117. package/dist/media-providers/dispatch/providers/openrouter.js +152 -0
  118. package/dist/media-providers/dispatch/providers/openrouter.js.map +1 -0
  119. package/dist/media-providers/dispatch/providers/senseaudio.d.ts +4 -0
  120. package/dist/media-providers/dispatch/providers/senseaudio.d.ts.map +1 -0
  121. package/dist/media-providers/dispatch/providers/senseaudio.js +190 -0
  122. package/dist/media-providers/dispatch/providers/senseaudio.js.map +1 -0
  123. package/dist/media-providers/dispatch/providers/volcengine.d.ts +3 -0
  124. package/dist/media-providers/dispatch/providers/volcengine.d.ts.map +1 -0
  125. package/dist/media-providers/dispatch/providers/volcengine.js +95 -0
  126. package/dist/media-providers/dispatch/providers/volcengine.js.map +1 -0
  127. package/dist/media-providers/dispatch/response-parsers.d.ts +44 -0
  128. package/dist/media-providers/dispatch/response-parsers.d.ts.map +1 -0
  129. package/dist/media-providers/dispatch/response-parsers.js +103 -0
  130. package/dist/media-providers/dispatch/response-parsers.js.map +1 -0
  131. package/dist/media-providers/dispatch/ssrf-guard.d.ts +51 -0
  132. package/dist/media-providers/dispatch/ssrf-guard.d.ts.map +1 -0
  133. package/dist/media-providers/dispatch/ssrf-guard.js +215 -0
  134. package/dist/media-providers/dispatch/ssrf-guard.js.map +1 -0
  135. package/dist/media-providers/dispatch/stub.d.ts +5 -0
  136. package/dist/media-providers/dispatch/stub.d.ts.map +1 -0
  137. package/dist/media-providers/dispatch/stub.js +98 -0
  138. package/dist/media-providers/dispatch/stub.js.map +1 -0
  139. package/dist/media-providers/dispatch/types.d.ts +133 -0
  140. package/dist/media-providers/dispatch/types.d.ts.map +1 -0
  141. package/dist/media-providers/dispatch/types.js +2 -0
  142. package/dist/media-providers/dispatch/types.js.map +1 -0
  143. package/dist/media-providers/dispatch/vendor-adapter.d.ts +54 -0
  144. package/dist/media-providers/dispatch/vendor-adapter.d.ts.map +1 -0
  145. package/dist/media-providers/dispatch/vendor-adapter.js +68 -0
  146. package/dist/media-providers/dispatch/vendor-adapter.js.map +1 -0
  147. package/dist/media-providers/dispatch/vendor-registry.d.ts +36 -0
  148. package/dist/media-providers/dispatch/vendor-registry.d.ts.map +1 -0
  149. package/dist/media-providers/dispatch/vendor-registry.js +46 -0
  150. package/dist/media-providers/dispatch/vendor-registry.js.map +1 -0
  151. package/dist/media-providers/index.d.ts +22 -0
  152. package/dist/media-providers/index.d.ts.map +1 -0
  153. package/dist/media-providers/index.js +22 -0
  154. package/dist/media-providers/index.js.map +1 -0
  155. package/dist/media-providers/policy.d.ts +49 -0
  156. package/dist/media-providers/policy.d.ts.map +1 -0
  157. package/dist/media-providers/policy.js +39 -0
  158. package/dist/media-providers/policy.js.map +1 -0
  159. package/dist/media-providers/providers.d.ts +33 -0
  160. package/dist/media-providers/providers.d.ts.map +1 -0
  161. package/dist/media-providers/providers.js +200 -0
  162. package/dist/media-providers/providers.js.map +1 -0
  163. package/dist/media-providers/seed.d.ts +14 -0
  164. package/dist/media-providers/seed.d.ts.map +1 -0
  165. package/dist/media-providers/seed.js +109 -0
  166. package/dist/media-providers/seed.js.map +1 -0
  167. package/dist/media-providers/sqlite-task-store.d.ts +29 -0
  168. package/dist/media-providers/sqlite-task-store.d.ts.map +1 -0
  169. package/dist/media-providers/sqlite-task-store.js +234 -0
  170. package/dist/media-providers/sqlite-task-store.js.map +1 -0
  171. package/dist/media-providers/staging.d.ts +29 -0
  172. package/dist/media-providers/staging.d.ts.map +1 -0
  173. package/dist/media-providers/staging.js +141 -0
  174. package/dist/media-providers/staging.js.map +1 -0
  175. package/dist/media-providers/task-store.d.ts +94 -0
  176. package/dist/media-providers/task-store.d.ts.map +1 -0
  177. package/dist/media-providers/task-store.js +160 -0
  178. package/dist/media-providers/task-store.js.map +1 -0
  179. package/dist/media-providers/tokens.d.ts +7 -0
  180. package/dist/media-providers/tokens.d.ts.map +1 -0
  181. package/dist/media-providers/tokens.js +13 -0
  182. package/dist/media-providers/tokens.js.map +1 -0
  183. package/dist/media-providers/types.d.ts +123 -0
  184. package/dist/media-providers/types.d.ts.map +1 -0
  185. package/dist/media-providers/types.js +12 -0
  186. package/dist/media-providers/types.js.map +1 -0
  187. package/dist/media-providers/video-request.d.ts +62 -0
  188. package/dist/media-providers/video-request.d.ts.map +1 -0
  189. package/dist/media-providers/video-request.js +219 -0
  190. package/dist/media-providers/video-request.js.map +1 -0
  191. 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"}