@commandable/mcp 0.10.0 → 0.11.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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/9441a86b-16e9-4000-bffc-3b2e78e57710.json +1 -0
- package/.output/server/chunks/build/styles.mjs +2 -2
- package/.output/server/chunks/nitro/nitro.mjs +729 -107
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/package.json +2 -2
- package/.output/public/_nuxt/builds/meta/0857a55b-f766-4fe6-86be-9bd9d857861a.json +0 -1
package/.output/nitro.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"
|
|
1
|
+
{"id":"9441a86b-16e9-4000-bffc-3b2e78e57710","timestamp":1775546010813}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"id":"9441a86b-16e9-4000-bffc-3b2e78e57710","timestamp":1775546010813,"prerendered":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const interopDefault = r => r.default || r || [];
|
|
2
2
|
const styles = {
|
|
3
|
-
"../../node_modules/nuxt/dist/app/components/error-404.vue": () => import('./error-404-styles.Bvxdxqjk.mjs').then(interopDefault),
|
|
4
3
|
"../../node_modules/nuxt/dist/app/components/error-500.vue": () => import('./error-500-styles.BnYAAXSg.mjs').then(interopDefault),
|
|
5
|
-
"../../node_modules/nuxt/dist/app/components/error-404.vue
|
|
4
|
+
"../../node_modules/nuxt/dist/app/components/error-404.vue": () => import('./error-404-styles.Bvxdxqjk.mjs').then(interopDefault),
|
|
6
5
|
"../../node_modules/nuxt/dist/app/components/error-500.vue?vue&type=style&index=0&scoped=4b5190e7&lang.css": () => import('./error-500-styles.BnYAAXSg.mjs').then(interopDefault),
|
|
6
|
+
"../../node_modules/nuxt/dist/app/components/error-404.vue?vue&type=style&index=0&scoped=eed6b592&lang.css": () => import('./error-404-styles.Bvxdxqjk.mjs').then(interopDefault),
|
|
7
7
|
"components/IntegrationCredentials.vue": () => import('./IntegrationCredentials-styles.COcCfJmp.mjs').then(interopDefault),
|
|
8
8
|
"components/IntegrationCredentials.vue?vue&type=style&index=0&scoped=7de84f63&lang.css": () => import('./IntegrationCredentials-styles.COcCfJmp.mjs').then(interopDefault)
|
|
9
9
|
};
|
|
@@ -4431,7 +4431,7 @@ function _expandFromEnv(value) {
|
|
|
4431
4431
|
const _inlineRuntimeConfig = {
|
|
4432
4432
|
"app": {
|
|
4433
4433
|
"baseURL": "/",
|
|
4434
|
-
"buildId": "
|
|
4434
|
+
"buildId": "9441a86b-16e9-4000-bffc-3b2e78e57710",
|
|
4435
4435
|
"buildAssetsDir": "/_nuxt/",
|
|
4436
4436
|
"cdnURL": ""
|
|
4437
4437
|
},
|
|
@@ -15844,6 +15844,467 @@ const GENERATED_INTEGRATIONS = {
|
|
|
15844
15844
|
],
|
|
15845
15845
|
"variantOwnerType": null
|
|
15846
15846
|
},
|
|
15847
|
+
"sharepoint": {
|
|
15848
|
+
"manifest": {
|
|
15849
|
+
"name": "sharepoint",
|
|
15850
|
+
"version": "0.1.0",
|
|
15851
|
+
"baseUrl": "https://graph.microsoft.com/v1.0",
|
|
15852
|
+
"tools": [
|
|
15853
|
+
{
|
|
15854
|
+
"name": "search_sites",
|
|
15855
|
+
"description": "Search SharePoint sites by keyword across the tenant. Returns compact site summaries with IDs and web URLs. Use this when you know the site name or topic but not the site ID. If you already know the hostname and path, use get_site_by_path instead.",
|
|
15856
|
+
"inputSchema": "schemas/search_sites.json",
|
|
15857
|
+
"handler": "handlers/search_sites.js",
|
|
15858
|
+
"scope": "read"
|
|
15859
|
+
},
|
|
15860
|
+
{
|
|
15861
|
+
"name": "get_site_by_path",
|
|
15862
|
+
"description": "Resolve a SharePoint site from its hostname and server-relative path, such as hostname='contoso.sharepoint.com' and relativePath='//Marketing'. Use this when you know the SharePoint URL structure and need the stable site ID for later calls.",
|
|
15863
|
+
"inputSchema": "schemas/get_site_by_path.json",
|
|
15864
|
+
"handler": "handlers/get_site_by_path.js",
|
|
15865
|
+
"scope": "read"
|
|
15866
|
+
},
|
|
15867
|
+
{
|
|
15868
|
+
"name": "get_site",
|
|
15869
|
+
"description": "Get metadata for a SharePoint site by site ID. Returns the site name, description, web URL, and timestamps. Use search_sites or get_site_by_path first if you do not already know the site ID.",
|
|
15870
|
+
"inputSchema": "schemas/get_site.json",
|
|
15871
|
+
"handler": "handlers/get_site.js",
|
|
15872
|
+
"scope": "read"
|
|
15873
|
+
},
|
|
15874
|
+
{
|
|
15875
|
+
"name": "list_site_drives",
|
|
15876
|
+
"description": "List document libraries (drives) for a SharePoint site. Returns compact drive summaries including IDs, names, web URLs, and drive type. Use this after resolving a site to discover the right document library before browsing folders or reading files.",
|
|
15877
|
+
"inputSchema": "schemas/list_site_drives.json",
|
|
15878
|
+
"handler": "handlers/list_site_drives.js",
|
|
15879
|
+
"scope": "read"
|
|
15880
|
+
},
|
|
15881
|
+
{
|
|
15882
|
+
"name": "list_drive_children",
|
|
15883
|
+
"description": "List the files and folders inside a SharePoint document library folder. By default this lists the root of the drive. Provide itemId to browse a specific folder. Returns compact entries with file-or-folder flags, MIME type when available, and parent references. Use get_drive_item_meta when you need one specific item.",
|
|
15884
|
+
"inputSchema": "schemas/list_drive_children.json",
|
|
15885
|
+
"handler": "handlers/list_drive_children.js",
|
|
15886
|
+
"scope": "read"
|
|
15887
|
+
},
|
|
15888
|
+
{
|
|
15889
|
+
"name": "get_drive_item_meta",
|
|
15890
|
+
"description": "Get metadata for a single SharePoint file or folder by drive ID and item ID. Returns a compact item summary including IDs, name, type flags, web URL, size, timestamps, and parent reference. Use read_file_content to read the actual file contents.",
|
|
15891
|
+
"inputSchema": "schemas/get_drive_item.json",
|
|
15892
|
+
"handler": "handlers/get_drive_item.js",
|
|
15893
|
+
"scope": "read"
|
|
15894
|
+
},
|
|
15895
|
+
{
|
|
15896
|
+
"name": "search_files",
|
|
15897
|
+
"description": "Search SharePoint and OneDrive content through Microsoft Graph search and return flattened file hits. Provide a query string; Graph KQL syntax is supported. Optional siteId and driveId filters narrow the flattened results after search. Use this for broad file discovery when folder-by-folder browsing is too narrow.",
|
|
15898
|
+
"inputSchema": "schemas/search_files.json",
|
|
15899
|
+
"handler": "handlers/search_files.js",
|
|
15900
|
+
"scope": "read"
|
|
15901
|
+
},
|
|
15902
|
+
{
|
|
15903
|
+
"name": "read_file_content",
|
|
15904
|
+
"description": "Read a SharePoint file into agent-friendly text using the shared file extraction pipeline. This is the standard way to consume document contents such as PDF, DOCX, XLSX, PPTX, and text-like files stored in SharePoint document libraries. Provide driveId and itemId. Folders are rejected; use list_drive_children to browse them.",
|
|
15905
|
+
"inputSchema": "schemas/read_file_content.json",
|
|
15906
|
+
"handler": "handlers/read_file_content.js",
|
|
15907
|
+
"scope": "read"
|
|
15908
|
+
},
|
|
15909
|
+
{
|
|
15910
|
+
"name": "create_folder",
|
|
15911
|
+
"description": "Create a new folder in a SharePoint document library. By default the folder is created in the drive root. Provide parentItemId to create it inside an existing folder. Returns the created folder metadata including its item ID for later browsing or moves.",
|
|
15912
|
+
"inputSchema": "schemas/create_folder.json",
|
|
15913
|
+
"handler": "handlers/create_folder.js",
|
|
15914
|
+
"scope": "write"
|
|
15915
|
+
},
|
|
15916
|
+
{
|
|
15917
|
+
"name": "move_drive_item",
|
|
15918
|
+
"description": "Move a SharePoint file or folder to a different parent folder in the same drive. Provide destinationParentId and optionally a newName to rename during the move. Use get_drive_item_meta or list_drive_children first to discover the current item and destination IDs.",
|
|
15919
|
+
"inputSchema": "schemas/move_drive_item.json",
|
|
15920
|
+
"handler": "handlers/move_drive_item.js",
|
|
15921
|
+
"scope": "write"
|
|
15922
|
+
},
|
|
15923
|
+
{
|
|
15924
|
+
"name": "delete_drive_item",
|
|
15925
|
+
"description": "Delete a SharePoint file or folder by drive ID and item ID. This is a destructive operation. Use get_drive_item_meta or list_drive_children first to confirm you have the correct item before deleting it.",
|
|
15926
|
+
"inputSchema": "schemas/delete_drive_item.json",
|
|
15927
|
+
"handler": "handlers/delete_drive_item.js",
|
|
15928
|
+
"scope": "write"
|
|
15929
|
+
}
|
|
15930
|
+
]
|
|
15931
|
+
},
|
|
15932
|
+
"prompt": "Use this integration for SharePoint document libraries and files.\n\nRecommended workflow:\n\n1. If you know the SharePoint hostname and path, start with `get_site_by_path`.\n2. Otherwise use `search_sites` to discover the correct site.\n3. Use `list_site_drives` to find the relevant document library for that site.\n4. Use `list_drive_children` for deterministic folder browsing or `search_files` for broader file discovery.\n5. Use `get_drive_item_meta` when you need compact metadata for a specific file or folder.\n6. Use `read_file_content` to consume the actual contents of a file in agent-friendly text.\n\nNotes:\n\n- `search_files` uses Microsoft Graph search. The `query` field accepts normal keywords and Graph KQL syntax.\n- `siteId` and `driveId` filters on `search_files` are applied to the flattened search results after Graph returns them.\n- `read_file_content` is for files only. Folders do not have readable file content.\n- This v1 integration is intentionally focused on SharePoint sites, document libraries, folders, and files. It does not include classic SharePoint list/list-item tools or file upload.\n",
|
|
15933
|
+
"variants": {
|
|
15934
|
+
"variants": {
|
|
15935
|
+
"app_credentials": {
|
|
15936
|
+
"label": "Microsoft Graph App Credentials",
|
|
15937
|
+
"schema": {
|
|
15938
|
+
"type": "object",
|
|
15939
|
+
"properties": {
|
|
15940
|
+
"tenantId": {
|
|
15941
|
+
"type": "string",
|
|
15942
|
+
"title": "Tenant ID",
|
|
15943
|
+
"description": "Microsoft Entra tenant ID (GUID) that owns the SharePoint tenant."
|
|
15944
|
+
},
|
|
15945
|
+
"clientId": {
|
|
15946
|
+
"type": "string",
|
|
15947
|
+
"title": "Client ID",
|
|
15948
|
+
"description": "Application (client) ID of the Microsoft Entra app registration."
|
|
15949
|
+
},
|
|
15950
|
+
"clientSecret": {
|
|
15951
|
+
"type": "string",
|
|
15952
|
+
"title": "Client Secret",
|
|
15953
|
+
"description": "Client secret value for the Microsoft Entra app registration.",
|
|
15954
|
+
"format": "password"
|
|
15955
|
+
}
|
|
15956
|
+
},
|
|
15957
|
+
"required": [
|
|
15958
|
+
"tenantId",
|
|
15959
|
+
"clientId",
|
|
15960
|
+
"clientSecret"
|
|
15961
|
+
],
|
|
15962
|
+
"additionalProperties": false
|
|
15963
|
+
},
|
|
15964
|
+
"preprocess": {
|
|
15965
|
+
"type": "handler",
|
|
15966
|
+
"handlerCode": "async (creds, utils) => {\n const tenantId = String(creds?.tenantId || '').trim()\n const clientId = String(creds?.clientId || '').trim()\n const clientSecret = String(creds?.clientSecret || '').trim()\n\n if (!tenantId)\n throw new Error('Missing tenantId')\n if (!clientId)\n throw new Error('Missing clientId')\n if (!clientSecret)\n throw new Error('Missing clientSecret')\n\n const response = await utils.tokenFetch(\n `https://login.microsoftonline.com/${encodeURIComponent(tenantId)}/oauth2/v2.0/token`,\n {\n method: 'POST',\n body: new URLSearchParams({\n grant_type: 'client_credentials',\n client_id: clientId,\n client_secret: clientSecret,\n scope: 'https://graph.microsoft.com/.default',\n }),\n },\n )\n\n const data = await response.json()\n if (!response.ok) {\n const message = typeof data?.error_description === 'string'\n ? data.error_description\n : (typeof data?.error === 'string' ? data.error : `Token request failed with status ${response.status}`)\n throw new Error(message)\n }\n\n const token = typeof data?.access_token === 'string' ? data.access_token : ''\n if (!token)\n throw new Error('Microsoft token response did not include access_token')\n\n return {\n token,\n expiresIn: data?.expires_in,\n }\n}",
|
|
15967
|
+
"allowedOrigins": [
|
|
15968
|
+
"https://login.microsoftonline.com"
|
|
15969
|
+
]
|
|
15970
|
+
},
|
|
15971
|
+
"injection": {
|
|
15972
|
+
"headers": {
|
|
15973
|
+
"Authorization": "Bearer {{token}}"
|
|
15974
|
+
}
|
|
15975
|
+
},
|
|
15976
|
+
"healthCheck": {
|
|
15977
|
+
"notViable": true
|
|
15978
|
+
}
|
|
15979
|
+
}
|
|
15980
|
+
},
|
|
15981
|
+
"default": "app_credentials"
|
|
15982
|
+
},
|
|
15983
|
+
"hint": "1. Create or use a Microsoft Entra app registration for Microsoft Graph at https://entra.microsoft.com/#view/Microsoft_AAD_RegisteredApps/ApplicationsListBlade\n2. Create a client secret for that app and copy the **tenant ID**, **client ID**, and **client secret value**.\n3. In Microsoft Graph **Application permissions**, grant at least `Sites.Read.All` and `Files.Read.All`.\n4. If you intend to use write actions such as folder creation, moves, and deletes, also grant `Sites.ReadWrite.All` and `Files.ReadWrite.All`.\n5. Grant admin consent for those application permissions in the tenant.\n6. Paste the tenant ID, client ID, and client secret into this integration. The integration exchanges them for short-lived Microsoft Graph access tokens automatically.",
|
|
15984
|
+
"hintsByVariant": {},
|
|
15985
|
+
"tools": [
|
|
15986
|
+
{
|
|
15987
|
+
"name": "search_sites",
|
|
15988
|
+
"description": "Search SharePoint sites by keyword across the tenant. Returns compact site summaries with IDs and web URLs. Use this when you know the site name or topic but not the site ID. If you already know the hostname and path, use get_site_by_path instead.",
|
|
15989
|
+
"inputSchema": {
|
|
15990
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
15991
|
+
"type": "object",
|
|
15992
|
+
"required": [
|
|
15993
|
+
"query"
|
|
15994
|
+
],
|
|
15995
|
+
"properties": {
|
|
15996
|
+
"query": {
|
|
15997
|
+
"type": "string",
|
|
15998
|
+
"description": "Keyword search for SharePoint sites, such as a team name or department."
|
|
15999
|
+
}
|
|
16000
|
+
},
|
|
16001
|
+
"additionalProperties": false
|
|
16002
|
+
},
|
|
16003
|
+
"handlerCode": "async (input) => {\n const params = new URLSearchParams()\n params.set('search', input.query)\n const res = await integration.fetch(`/sites?${params.toString()}`)\n const data = await res.json()\n const sites = Array.isArray(data?.value)\n ? data.value.map(site => ({\n id: site.id,\n name: site.displayName || site.name || null,\n displayName: site.displayName || site.name || null,\n description: site.description || '',\n webUrl: site.webUrl || null,\n createdDateTime: site.createdDateTime || null,\n lastModifiedDateTime: site.lastModifiedDateTime || null,\n }))\n : []\n return { query: input.query, sites }\n}",
|
|
16004
|
+
"scope": "read"
|
|
16005
|
+
},
|
|
16006
|
+
{
|
|
16007
|
+
"name": "get_site_by_path",
|
|
16008
|
+
"description": "Resolve a SharePoint site from its hostname and server-relative path, such as hostname='contoso.sharepoint.com' and relativePath='//Marketing'. Use this when you know the SharePoint URL structure and need the stable site ID for later calls.",
|
|
16009
|
+
"inputSchema": {
|
|
16010
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16011
|
+
"type": "object",
|
|
16012
|
+
"required": [
|
|
16013
|
+
"hostname",
|
|
16014
|
+
"relativePath"
|
|
16015
|
+
],
|
|
16016
|
+
"properties": {
|
|
16017
|
+
"hostname": {
|
|
16018
|
+
"type": "string",
|
|
16019
|
+
"description": "SharePoint hostname, such as contoso.sharepoint.com."
|
|
16020
|
+
},
|
|
16021
|
+
"relativePath": {
|
|
16022
|
+
"type": "string",
|
|
16023
|
+
"description": "Server-relative site path, such as /sites/Marketing."
|
|
16024
|
+
}
|
|
16025
|
+
},
|
|
16026
|
+
"additionalProperties": false
|
|
16027
|
+
},
|
|
16028
|
+
"handlerCode": "async (input) => {\n const hostname = String(input.hostname || '').trim()\n const rawPath = String(input.relativePath || '').trim()\n const normalizedPath = `/${rawPath.replace(/^\\/+/, '')}`\n const encodedPath = normalizedPath\n .split('/')\n .map((segment, index) => index === 0 ? '' : encodeURIComponent(segment))\n .join('/')\n const res = await integration.fetch(`/sites/${hostname}:${encodedPath}`)\n const site = await res.json()\n return {\n id: site.id,\n name: site.displayName || site.name || null,\n displayName: site.displayName || site.name || null,\n description: site.description || '',\n webUrl: site.webUrl || null,\n createdDateTime: site.createdDateTime || null,\n lastModifiedDateTime: site.lastModifiedDateTime || null,\n }\n}",
|
|
16029
|
+
"scope": "read"
|
|
16030
|
+
},
|
|
16031
|
+
{
|
|
16032
|
+
"name": "get_site",
|
|
16033
|
+
"description": "Get metadata for a SharePoint site by site ID. Returns the site name, description, web URL, and timestamps. Use search_sites or get_site_by_path first if you do not already know the site ID.",
|
|
16034
|
+
"inputSchema": {
|
|
16035
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16036
|
+
"type": "object",
|
|
16037
|
+
"required": [
|
|
16038
|
+
"siteId"
|
|
16039
|
+
],
|
|
16040
|
+
"properties": {
|
|
16041
|
+
"siteId": {
|
|
16042
|
+
"type": "string",
|
|
16043
|
+
"description": "Microsoft Graph SharePoint site ID."
|
|
16044
|
+
}
|
|
16045
|
+
},
|
|
16046
|
+
"additionalProperties": false
|
|
16047
|
+
},
|
|
16048
|
+
"handlerCode": "async (input) => {\n const res = await integration.fetch(`/sites/${encodeURIComponent(input.siteId)}`)\n const site = await res.json()\n return {\n id: site.id,\n name: site.displayName || site.name || null,\n displayName: site.displayName || site.name || null,\n description: site.description || '',\n webUrl: site.webUrl || null,\n createdDateTime: site.createdDateTime || null,\n lastModifiedDateTime: site.lastModifiedDateTime || null,\n }\n}",
|
|
16049
|
+
"scope": "read"
|
|
16050
|
+
},
|
|
16051
|
+
{
|
|
16052
|
+
"name": "list_site_drives",
|
|
16053
|
+
"description": "List document libraries (drives) for a SharePoint site. Returns compact drive summaries including IDs, names, web URLs, and drive type. Use this after resolving a site to discover the right document library before browsing folders or reading files.",
|
|
16054
|
+
"inputSchema": {
|
|
16055
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16056
|
+
"type": "object",
|
|
16057
|
+
"required": [
|
|
16058
|
+
"siteId"
|
|
16059
|
+
],
|
|
16060
|
+
"properties": {
|
|
16061
|
+
"siteId": {
|
|
16062
|
+
"type": "string",
|
|
16063
|
+
"description": "Microsoft Graph SharePoint site ID."
|
|
16064
|
+
},
|
|
16065
|
+
"top": {
|
|
16066
|
+
"type": "integer",
|
|
16067
|
+
"minimum": 1,
|
|
16068
|
+
"maximum": 200,
|
|
16069
|
+
"description": "Maximum number of drives to return."
|
|
16070
|
+
},
|
|
16071
|
+
"includeSystem": {
|
|
16072
|
+
"type": "boolean",
|
|
16073
|
+
"description": "Set true to include hidden/system drives."
|
|
16074
|
+
}
|
|
16075
|
+
},
|
|
16076
|
+
"additionalProperties": false
|
|
16077
|
+
},
|
|
16078
|
+
"handlerCode": "async (input) => {\n const params = new URLSearchParams()\n params.set('$select', input.includeSystem\n ? 'id,name,webUrl,driveType,createdDateTime,lastModifiedDateTime,system'\n : 'id,name,webUrl,driveType,createdDateTime,lastModifiedDateTime')\n if (input.top)\n params.set('$top', String(input.top))\n\n const res = await integration.fetch(`/sites/${encodeURIComponent(input.siteId)}/drives?${params.toString()}`)\n const data = await res.json()\n const drives = Array.isArray(data?.value)\n ? data.value.map(drive => ({\n id: drive.id,\n name: drive.name || null,\n webUrl: drive.webUrl || null,\n driveType: drive.driveType || null,\n createdDateTime: drive.createdDateTime || null,\n lastModifiedDateTime: drive.lastModifiedDateTime || null,\n isSystem: Boolean(drive.system),\n }))\n : []\n\n return {\n siteId: input.siteId,\n drives,\n nextLink: data?.['@odata.nextLink'] || null,\n }\n}",
|
|
16079
|
+
"scope": "read"
|
|
16080
|
+
},
|
|
16081
|
+
{
|
|
16082
|
+
"name": "list_drive_children",
|
|
16083
|
+
"description": "List the files and folders inside a SharePoint document library folder. By default this lists the root of the drive. Provide itemId to browse a specific folder. Returns compact entries with file-or-folder flags, MIME type when available, and parent references. Use get_drive_item_meta when you need one specific item.",
|
|
16084
|
+
"inputSchema": {
|
|
16085
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16086
|
+
"type": "object",
|
|
16087
|
+
"required": [
|
|
16088
|
+
"driveId"
|
|
16089
|
+
],
|
|
16090
|
+
"properties": {
|
|
16091
|
+
"driveId": {
|
|
16092
|
+
"type": "string",
|
|
16093
|
+
"description": "Document library drive ID."
|
|
16094
|
+
},
|
|
16095
|
+
"itemId": {
|
|
16096
|
+
"type": "string",
|
|
16097
|
+
"description": "Optional folder item ID. Omit to list the drive root."
|
|
16098
|
+
},
|
|
16099
|
+
"top": {
|
|
16100
|
+
"type": "integer",
|
|
16101
|
+
"minimum": 1,
|
|
16102
|
+
"maximum": 200,
|
|
16103
|
+
"description": "Maximum number of children to return."
|
|
16104
|
+
},
|
|
16105
|
+
"orderBy": {
|
|
16106
|
+
"type": "string",
|
|
16107
|
+
"description": "Optional Microsoft Graph orderBy expression, such as name or lastModifiedDateTime desc."
|
|
16108
|
+
}
|
|
16109
|
+
},
|
|
16110
|
+
"additionalProperties": false
|
|
16111
|
+
},
|
|
16112
|
+
"handlerCode": "async (input) => {\n const flattenItem = item => ({\n id: item.id,\n name: item.name || null,\n webUrl: item.webUrl || null,\n size: item.size ?? null,\n createdDateTime: item.createdDateTime || null,\n lastModifiedDateTime: item.lastModifiedDateTime || null,\n eTag: item.eTag || null,\n cTag: item.cTag || null,\n mimeType: item.file?.mimeType || null,\n isFolder: Boolean(item.folder || item.package),\n isFile: Boolean(item.file),\n childCount: item.folder?.childCount ?? null,\n parentReference: item.parentReference || null,\n })\n\n const params = new URLSearchParams()\n params.set(\n '$select',\n 'id,name,webUrl,size,createdDateTime,lastModifiedDateTime,eTag,cTag,parentReference,file,folder,package',\n )\n if (input.top)\n params.set('$top', String(input.top))\n if (input.orderBy)\n params.set('$orderby', input.orderBy)\n\n const basePath = input.itemId\n ? `/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}/children`\n : `/drives/${encodeURIComponent(input.driveId)}/root/children`\n\n const res = await integration.fetch(`${basePath}?${params.toString()}`)\n const data = await res.json()\n\n return {\n driveId: input.driveId,\n itemId: input.itemId || null,\n children: Array.isArray(data?.value) ? data.value.map(flattenItem) : [],\n nextLink: data?.['@odata.nextLink'] || null,\n }\n}",
|
|
16113
|
+
"scope": "read"
|
|
16114
|
+
},
|
|
16115
|
+
{
|
|
16116
|
+
"name": "get_drive_item_meta",
|
|
16117
|
+
"description": "Get metadata for a single SharePoint file or folder by drive ID and item ID. Returns a compact item summary including IDs, name, type flags, web URL, size, timestamps, and parent reference. Use read_file_content to read the actual file contents.",
|
|
16118
|
+
"inputSchema": {
|
|
16119
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16120
|
+
"type": "object",
|
|
16121
|
+
"required": [
|
|
16122
|
+
"driveId",
|
|
16123
|
+
"itemId"
|
|
16124
|
+
],
|
|
16125
|
+
"properties": {
|
|
16126
|
+
"driveId": {
|
|
16127
|
+
"type": "string",
|
|
16128
|
+
"description": "Document library drive ID."
|
|
16129
|
+
},
|
|
16130
|
+
"itemId": {
|
|
16131
|
+
"type": "string",
|
|
16132
|
+
"description": "Drive item ID for the file or folder."
|
|
16133
|
+
}
|
|
16134
|
+
},
|
|
16135
|
+
"additionalProperties": false
|
|
16136
|
+
},
|
|
16137
|
+
"handlerCode": "async (input) => {\n const flattenItem = item => ({\n id: item.id,\n name: item.name || null,\n webUrl: item.webUrl || null,\n size: item.size ?? null,\n createdDateTime: item.createdDateTime || null,\n lastModifiedDateTime: item.lastModifiedDateTime || null,\n eTag: item.eTag || null,\n cTag: item.cTag || null,\n mimeType: item.file?.mimeType || null,\n isFolder: Boolean(item.folder || item.package),\n isFile: Boolean(item.file),\n childCount: item.folder?.childCount ?? null,\n parentReference: item.parentReference || null,\n })\n\n const params = new URLSearchParams()\n params.set(\n '$select',\n 'id,name,webUrl,size,createdDateTime,lastModifiedDateTime,eTag,cTag,parentReference,file,folder,package',\n )\n const res = await integration.fetch(`/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}?${params.toString()}`)\n return flattenItem(await res.json())\n}",
|
|
16138
|
+
"scope": "read"
|
|
16139
|
+
},
|
|
16140
|
+
{
|
|
16141
|
+
"name": "search_files",
|
|
16142
|
+
"description": "Search SharePoint and OneDrive content through Microsoft Graph search and return flattened file hits. Provide a query string; Graph KQL syntax is supported. Optional siteId and driveId filters narrow the flattened results after search. Use this for broad file discovery when folder-by-folder browsing is too narrow.",
|
|
16143
|
+
"inputSchema": {
|
|
16144
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16145
|
+
"type": "object",
|
|
16146
|
+
"required": [
|
|
16147
|
+
"query"
|
|
16148
|
+
],
|
|
16149
|
+
"properties": {
|
|
16150
|
+
"query": {
|
|
16151
|
+
"type": "string",
|
|
16152
|
+
"description": "Search query string. Microsoft Graph KQL syntax is supported."
|
|
16153
|
+
},
|
|
16154
|
+
"siteId": {
|
|
16155
|
+
"type": "string",
|
|
16156
|
+
"description": "Optional site ID to keep only hits from a specific SharePoint site."
|
|
16157
|
+
},
|
|
16158
|
+
"driveId": {
|
|
16159
|
+
"type": "string",
|
|
16160
|
+
"description": "Optional drive ID to keep only hits from a specific document library."
|
|
16161
|
+
},
|
|
16162
|
+
"from": {
|
|
16163
|
+
"type": "integer",
|
|
16164
|
+
"minimum": 0,
|
|
16165
|
+
"description": "Offset into the Graph search results."
|
|
16166
|
+
},
|
|
16167
|
+
"size": {
|
|
16168
|
+
"type": "integer",
|
|
16169
|
+
"minimum": 1,
|
|
16170
|
+
"maximum": 50,
|
|
16171
|
+
"description": "Maximum number of hits to request from Graph."
|
|
16172
|
+
}
|
|
16173
|
+
},
|
|
16174
|
+
"additionalProperties": false
|
|
16175
|
+
},
|
|
16176
|
+
"handlerCode": "async (input) => {\n const extractFallbackRegion = (error) => {\n const texts = [error?.data?.body, error?.message].filter(s => typeof s === 'string')\n for (const text of texts) {\n const match = text.match(/Only valid regions are ([A-Z,\\s]+)/i)\n const region = match?.[1]?.split(',').map(r => r.trim().toUpperCase()).filter(Boolean)[0]\n if (region)\n return region\n }\n return null\n }\n\n const runSearch = async (region) => {\n const res = await integration.fetch('/search/query', {\n method: 'POST',\n body: {\n requests: [{\n entityTypes: ['driveItem'],\n query: { queryString: input.query },\n from: typeof input.from === 'number' ? input.from : 0,\n size: typeof input.size === 'number' ? input.size : 25,\n region,\n }],\n },\n })\n return res.json()\n }\n\n const flattenHit = (hit) => {\n const resource = hit?.resource || {}\n const parentReference = resource.parentReference || {}\n return {\n id: resource.id || hit?.hitId || null,\n name: resource.name || null,\n webUrl: resource.webUrl || null,\n summary: hit?.summary || '',\n rank: hit?.rank ?? null,\n createdDateTime: resource.createdDateTime || null,\n lastModifiedDateTime: resource.lastModifiedDateTime || null,\n mimeType: resource.file?.mimeType || null,\n size: resource.size ?? null,\n isFolder: Boolean(resource.folder || resource.package),\n isFile: Boolean(resource.file),\n driveId: parentReference.driveId || null,\n siteId: parentReference.siteId || null,\n parentReference,\n }\n }\n\n let data\n try {\n data = await runSearch('NAM')\n }\n catch (error) {\n const fallback = extractFallbackRegion(error)\n if (!fallback)\n throw error\n data = await runSearch(fallback)\n }\n\n const container = data?.value?.[0]?.hitsContainers?.[0]\n const allHits = Array.isArray(container?.hits) ? container.hits.map(flattenHit) : []\n const hits = allHits.filter((hit) => {\n if (input.siteId && hit.siteId !== input.siteId)\n return false\n if (input.driveId && hit.driveId !== input.driveId)\n return false\n return true\n })\n\n return {\n query: input.query,\n hits,\n total: container?.total ?? hits.length,\n moreResultsAvailable: Boolean(container?.moreResultsAvailable),\n }\n}",
|
|
16177
|
+
"scope": "read"
|
|
16178
|
+
},
|
|
16179
|
+
{
|
|
16180
|
+
"name": "read_file_content",
|
|
16181
|
+
"description": "Read a SharePoint file into agent-friendly text using the shared file extraction pipeline. This is the standard way to consume document contents such as PDF, DOCX, XLSX, PPTX, and text-like files stored in SharePoint document libraries. Provide driveId and itemId. Folders are rejected; use list_drive_children to browse them.",
|
|
16182
|
+
"inputSchema": {
|
|
16183
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16184
|
+
"type": "object",
|
|
16185
|
+
"required": [
|
|
16186
|
+
"driveId",
|
|
16187
|
+
"itemId"
|
|
16188
|
+
],
|
|
16189
|
+
"properties": {
|
|
16190
|
+
"driveId": {
|
|
16191
|
+
"type": "string",
|
|
16192
|
+
"description": "Document library drive ID."
|
|
16193
|
+
},
|
|
16194
|
+
"itemId": {
|
|
16195
|
+
"type": "string",
|
|
16196
|
+
"description": "Drive item ID for the file."
|
|
16197
|
+
},
|
|
16198
|
+
"mimeType": {
|
|
16199
|
+
"type": "string",
|
|
16200
|
+
"description": "Optional MIME type from get_drive_item_meta or search_files."
|
|
16201
|
+
}
|
|
16202
|
+
},
|
|
16203
|
+
"additionalProperties": false
|
|
16204
|
+
},
|
|
16205
|
+
"handlerCode": "async (input) => {\n const params = new URLSearchParams()\n params.set(\n '$select',\n 'id,name,webUrl,size,createdDateTime,lastModifiedDateTime,parentReference,file,folder,package',\n )\n const res = await integration.fetch(`/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}?${params.toString()}`)\n const item = await res.json()\n const mimeType = input.mimeType || item?.file?.mimeType || null\n\n if (item?.folder || item?.package) {\n return {\n driveId: input.driveId,\n itemId: input.itemId,\n name: item?.name || null,\n mimeType,\n content: null,\n message: 'Folders do not have readable file content.',\n }\n }\n\n const extracted = await utils.extractFileContent({\n auth: true,\n source: `/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}/content`,\n })\n\n return {\n driveId: input.driveId,\n itemId: input.itemId,\n name: item?.name || null,\n webUrl: item?.webUrl || null,\n mimeType,\n ...extracted,\n }\n}",
|
|
16206
|
+
"scope": "read"
|
|
16207
|
+
},
|
|
16208
|
+
{
|
|
16209
|
+
"name": "create_folder",
|
|
16210
|
+
"description": "Create a new folder in a SharePoint document library. By default the folder is created in the drive root. Provide parentItemId to create it inside an existing folder. Returns the created folder metadata including its item ID for later browsing or moves.",
|
|
16211
|
+
"inputSchema": {
|
|
16212
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16213
|
+
"type": "object",
|
|
16214
|
+
"required": [
|
|
16215
|
+
"driveId",
|
|
16216
|
+
"name"
|
|
16217
|
+
],
|
|
16218
|
+
"properties": {
|
|
16219
|
+
"driveId": {
|
|
16220
|
+
"type": "string",
|
|
16221
|
+
"description": "Document library drive ID."
|
|
16222
|
+
},
|
|
16223
|
+
"name": {
|
|
16224
|
+
"type": "string",
|
|
16225
|
+
"description": "Folder name to create."
|
|
16226
|
+
},
|
|
16227
|
+
"parentItemId": {
|
|
16228
|
+
"type": "string",
|
|
16229
|
+
"description": "Optional parent folder item ID. Omit to create in the drive root."
|
|
16230
|
+
},
|
|
16231
|
+
"conflictBehavior": {
|
|
16232
|
+
"type": "string",
|
|
16233
|
+
"enum": [
|
|
16234
|
+
"rename",
|
|
16235
|
+
"replace",
|
|
16236
|
+
"fail"
|
|
16237
|
+
],
|
|
16238
|
+
"description": "How Graph should handle name conflicts. Defaults to rename."
|
|
16239
|
+
}
|
|
16240
|
+
},
|
|
16241
|
+
"additionalProperties": false
|
|
16242
|
+
},
|
|
16243
|
+
"handlerCode": "async (input) => {\n const path = input.parentItemId\n ? `/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.parentItemId)}/children`\n : `/drives/${encodeURIComponent(input.driveId)}/root/children`\n\n const res = await integration.fetch(path, {\n method: 'POST',\n body: {\n name: input.name,\n folder: {},\n '@microsoft.graph.conflictBehavior': input.conflictBehavior || 'rename',\n },\n })\n const item = await res.json()\n return {\n id: item.id,\n name: item.name || null,\n webUrl: item.webUrl || null,\n size: item.size ?? null,\n createdDateTime: item.createdDateTime || null,\n lastModifiedDateTime: item.lastModifiedDateTime || null,\n mimeType: item.file?.mimeType || null,\n isFolder: Boolean(item.folder || item.package),\n isFile: Boolean(item.file),\n childCount: item.folder?.childCount ?? null,\n parentReference: item.parentReference || null,\n }\n}",
|
|
16244
|
+
"scope": "write"
|
|
16245
|
+
},
|
|
16246
|
+
{
|
|
16247
|
+
"name": "move_drive_item",
|
|
16248
|
+
"description": "Move a SharePoint file or folder to a different parent folder in the same drive. Provide destinationParentId and optionally a newName to rename during the move. Use get_drive_item_meta or list_drive_children first to discover the current item and destination IDs.",
|
|
16249
|
+
"inputSchema": {
|
|
16250
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16251
|
+
"type": "object",
|
|
16252
|
+
"required": [
|
|
16253
|
+
"driveId",
|
|
16254
|
+
"itemId",
|
|
16255
|
+
"destinationParentId"
|
|
16256
|
+
],
|
|
16257
|
+
"properties": {
|
|
16258
|
+
"driveId": {
|
|
16259
|
+
"type": "string",
|
|
16260
|
+
"description": "Document library drive ID."
|
|
16261
|
+
},
|
|
16262
|
+
"itemId": {
|
|
16263
|
+
"type": "string",
|
|
16264
|
+
"description": "Drive item ID for the file or folder to move."
|
|
16265
|
+
},
|
|
16266
|
+
"destinationParentId": {
|
|
16267
|
+
"type": "string",
|
|
16268
|
+
"description": "Destination folder item ID."
|
|
16269
|
+
},
|
|
16270
|
+
"newName": {
|
|
16271
|
+
"type": "string",
|
|
16272
|
+
"description": "Optional new item name to apply during the move."
|
|
16273
|
+
}
|
|
16274
|
+
},
|
|
16275
|
+
"additionalProperties": false
|
|
16276
|
+
},
|
|
16277
|
+
"handlerCode": "async (input) => {\n const body = {\n parentReference: {\n id: input.destinationParentId,\n },\n }\n if (input.newName)\n body.name = input.newName\n\n const res = await integration.fetch(`/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}`, {\n method: 'PATCH',\n body,\n })\n const item = await res.json()\n return {\n id: item.id,\n name: item.name || null,\n webUrl: item.webUrl || null,\n size: item.size ?? null,\n createdDateTime: item.createdDateTime || null,\n lastModifiedDateTime: item.lastModifiedDateTime || null,\n mimeType: item.file?.mimeType || null,\n isFolder: Boolean(item.folder || item.package),\n isFile: Boolean(item.file),\n childCount: item.folder?.childCount ?? null,\n parentReference: item.parentReference || null,\n }\n}",
|
|
16278
|
+
"scope": "write"
|
|
16279
|
+
},
|
|
16280
|
+
{
|
|
16281
|
+
"name": "delete_drive_item",
|
|
16282
|
+
"description": "Delete a SharePoint file or folder by drive ID and item ID. This is a destructive operation. Use get_drive_item_meta or list_drive_children first to confirm you have the correct item before deleting it.",
|
|
16283
|
+
"inputSchema": {
|
|
16284
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
16285
|
+
"type": "object",
|
|
16286
|
+
"required": [
|
|
16287
|
+
"driveId",
|
|
16288
|
+
"itemId"
|
|
16289
|
+
],
|
|
16290
|
+
"properties": {
|
|
16291
|
+
"driveId": {
|
|
16292
|
+
"type": "string",
|
|
16293
|
+
"description": "Document library drive ID."
|
|
16294
|
+
},
|
|
16295
|
+
"itemId": {
|
|
16296
|
+
"type": "string",
|
|
16297
|
+
"description": "Drive item ID for the file or folder to delete."
|
|
16298
|
+
}
|
|
16299
|
+
},
|
|
16300
|
+
"additionalProperties": false
|
|
16301
|
+
},
|
|
16302
|
+
"handlerCode": "async (input) => {\n const res = await integration.fetch(`/drives/${encodeURIComponent(input.driveId)}/items/${encodeURIComponent(input.itemId)}`, {\n method: 'DELETE',\n })\n if (res.status === 204)\n return { success: true, status: 204 }\n try {\n return await res.json()\n }\n catch {\n return { success: res.ok, status: res.status }\n }\n}",
|
|
16303
|
+
"scope": "write"
|
|
16304
|
+
}
|
|
16305
|
+
],
|
|
16306
|
+
"variantOwnerType": null
|
|
16307
|
+
},
|
|
15847
16308
|
"trello": {
|
|
15848
16309
|
"manifest": {
|
|
15849
16310
|
"name": "Trello",
|
|
@@ -17737,6 +18198,10 @@ function cloneCredentialVariant(variant) {
|
|
|
17737
18198
|
headers: ((_a = variant.injection) == null ? void 0 : _a.headers) ? { ...variant.injection.headers } : void 0,
|
|
17738
18199
|
query: ((_b = variant.injection) == null ? void 0 : _b.query) ? { ...variant.injection.query } : void 0
|
|
17739
18200
|
},
|
|
18201
|
+
preprocess: typeof variant.preprocess === "object" && variant.preprocess !== null ? {
|
|
18202
|
+
...variant.preprocess,
|
|
18203
|
+
allowedOrigins: Array.isArray(variant.preprocess.allowedOrigins) ? [...variant.preprocess.allowedOrigins] : void 0
|
|
18204
|
+
} : variant.preprocess,
|
|
17740
18205
|
healthCheck: "path" in variant.healthCheck ? { ...variant.healthCheck } : { notViable: true }
|
|
17741
18206
|
};
|
|
17742
18207
|
}
|
|
@@ -18820,7 +19285,8 @@ function ensureExtractorScript() {
|
|
|
18820
19285
|
return path;
|
|
18821
19286
|
}
|
|
18822
19287
|
const FILE_PROCESSING_DISABLED_TOOLS = {
|
|
18823
|
-
"google-workspace": ["read_file_content"]
|
|
19288
|
+
"google-workspace": ["read_file_content"],
|
|
19289
|
+
sharepoint: ["read_file_content"]
|
|
18824
19290
|
};
|
|
18825
19291
|
let capabilityPromise = null;
|
|
18826
19292
|
function pythonExecutable() {
|
|
@@ -19157,6 +19623,9 @@ function buildToolsByIntegration(spaceId, integrations, proxy, opts = {}) {
|
|
|
19157
19623
|
return toolsByIntegration;
|
|
19158
19624
|
}
|
|
19159
19625
|
|
|
19626
|
+
function isHandlerPreprocess(preprocess) {
|
|
19627
|
+
return typeof preprocess === "object" && preprocess !== null && preprocess.type === "handler" && typeof preprocess.handlerCode === "string";
|
|
19628
|
+
}
|
|
19160
19629
|
function getBuiltInIntegrationTypeConfig(typeSlug) {
|
|
19161
19630
|
var _a, _b, _c, _d;
|
|
19162
19631
|
const variantsFile = loadIntegrationVariants(typeSlug);
|
|
@@ -19168,8 +19637,9 @@ function getBuiltInIntegrationTypeConfig(typeSlug) {
|
|
|
19168
19637
|
const variants = {};
|
|
19169
19638
|
for (const [key, variant] of Object.entries(variantsFile.variants)) {
|
|
19170
19639
|
const preprocess = (_c = variant.preprocess) != null ? _c : null;
|
|
19171
|
-
|
|
19172
|
-
|
|
19640
|
+
const isSupportedHandler = isHandlerPreprocess(preprocess);
|
|
19641
|
+
if (preprocess !== null && preprocess !== "google_service_account" && !isSupportedHandler) {
|
|
19642
|
+
throw new Error(`Unsupported preprocess for built-in integration '${typeSlug}/${key}'.`);
|
|
19173
19643
|
}
|
|
19174
19644
|
variants[key] = {
|
|
19175
19645
|
label: variant.label,
|
|
@@ -19180,7 +19650,11 @@ function getBuiltInIntegrationTypeConfig(typeSlug) {
|
|
|
19180
19650
|
allowedOrigins: manifestAllowedOrigins,
|
|
19181
19651
|
healthCheck: (_d = variant.healthCheck) != null ? _d : null,
|
|
19182
19652
|
hintMarkdown: loadIntegrationHint(typeSlug, key),
|
|
19183
|
-
preprocess
|
|
19653
|
+
preprocess: isSupportedHandler ? {
|
|
19654
|
+
type: "handler",
|
|
19655
|
+
handlerCode: preprocess.handlerCode,
|
|
19656
|
+
allowedOrigins: Array.isArray(preprocess.allowedOrigins) ? [...preprocess.allowedOrigins] : null
|
|
19657
|
+
} : preprocess
|
|
19184
19658
|
};
|
|
19185
19659
|
}
|
|
19186
19660
|
return {
|
|
@@ -19283,6 +19757,28 @@ function buildCredentialUrl(integrationId) {
|
|
|
19283
19757
|
const port = portRaw && /^\d+$/.test(portRaw) ? Number(portRaw) : 23432;
|
|
19284
19758
|
return `http://127.0.0.1:${port}/integrations/${encodeURIComponent(integrationId)}`;
|
|
19285
19759
|
}
|
|
19760
|
+
function decodeJwtPayloadForDebug(token) {
|
|
19761
|
+
try {
|
|
19762
|
+
const parts = token.split(".");
|
|
19763
|
+
if (parts.length < 2 || !parts[1])
|
|
19764
|
+
return null;
|
|
19765
|
+
let b64 = parts[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
19766
|
+
const pad = b64.length % 4 === 0 ? "" : "=".repeat(4 - b64.length % 4);
|
|
19767
|
+
b64 = b64 + pad;
|
|
19768
|
+
const json = Buffer$1.from(b64, "base64").toString("utf8");
|
|
19769
|
+
const payload = JSON.parse(json);
|
|
19770
|
+
return {
|
|
19771
|
+
aud: payload.aud,
|
|
19772
|
+
tid: payload.tid,
|
|
19773
|
+
appid: payload.appid,
|
|
19774
|
+
roles: payload.roles,
|
|
19775
|
+
scp: payload.scp,
|
|
19776
|
+
idtyp: payload.idtyp
|
|
19777
|
+
};
|
|
19778
|
+
} catch {
|
|
19779
|
+
return null;
|
|
19780
|
+
}
|
|
19781
|
+
}
|
|
19286
19782
|
function isAbsoluteHttpUrl(value) {
|
|
19287
19783
|
try {
|
|
19288
19784
|
const url = new URL(value);
|
|
@@ -19343,71 +19839,163 @@ function resolveRelativeBaseUrl(provider, baseUrl, rawPath) {
|
|
|
19343
19839
|
return "https://slides.googleapis.com/v1";
|
|
19344
19840
|
return baseUrl;
|
|
19345
19841
|
}
|
|
19842
|
+
function joinWithoutDuplicateSegments(baseUrl, rawPath) {
|
|
19843
|
+
let pathOnly = rawPath || "";
|
|
19844
|
+
let queryPart = "";
|
|
19845
|
+
const qIndex = pathOnly.indexOf("?");
|
|
19846
|
+
if (qIndex >= 0) {
|
|
19847
|
+
queryPart = pathOnly.slice(qIndex + 1);
|
|
19848
|
+
pathOnly = pathOnly.slice(0, qIndex);
|
|
19849
|
+
}
|
|
19850
|
+
try {
|
|
19851
|
+
const base = new URL(baseUrl);
|
|
19852
|
+
const baseSegs = base.pathname.split("/").filter(Boolean);
|
|
19853
|
+
const pathSegs = (pathOnly || "/").split("/").filter(Boolean);
|
|
19854
|
+
let overlap = 0;
|
|
19855
|
+
const maxK = Math.min(baseSegs.length, pathSegs.length);
|
|
19856
|
+
for (let k = maxK; k >= 1; k--) {
|
|
19857
|
+
let ok = true;
|
|
19858
|
+
for (let i = 0; i < k; i++) {
|
|
19859
|
+
if (baseSegs[baseSegs.length - k + i] !== pathSegs[i]) {
|
|
19860
|
+
ok = false;
|
|
19861
|
+
break;
|
|
19862
|
+
}
|
|
19863
|
+
}
|
|
19864
|
+
if (ok) {
|
|
19865
|
+
overlap = k;
|
|
19866
|
+
break;
|
|
19867
|
+
}
|
|
19868
|
+
}
|
|
19869
|
+
const normalizedPath = `/${[...baseSegs, ...pathSegs.slice(overlap)].join("/")}`;
|
|
19870
|
+
const baseOrigin = base.origin;
|
|
19871
|
+
const urlNoQuery = `${baseOrigin}${normalizedPath}`;
|
|
19872
|
+
return queryPart ? `${urlNoQuery}?${queryPart}` : urlNoQuery;
|
|
19873
|
+
} catch {
|
|
19874
|
+
const cleanedBase = baseUrl.replace(/\/+$/, "");
|
|
19875
|
+
const cleanedPath = `/${(pathOnly || "").replace(/^\/+/, "")}`;
|
|
19876
|
+
const baseParts = cleanedBase.split("/").filter(Boolean);
|
|
19877
|
+
const pathParts = cleanedPath.split("/").filter(Boolean);
|
|
19878
|
+
let overlap = 0;
|
|
19879
|
+
const maxK = Math.min(baseParts.length, pathParts.length);
|
|
19880
|
+
for (let k = maxK; k >= 1; k--) {
|
|
19881
|
+
let ok = true;
|
|
19882
|
+
for (let i = 0; i < k; i++) {
|
|
19883
|
+
if (baseParts[baseParts.length - k + i] !== pathParts[i]) {
|
|
19884
|
+
ok = false;
|
|
19885
|
+
break;
|
|
19886
|
+
}
|
|
19887
|
+
}
|
|
19888
|
+
if (ok) {
|
|
19889
|
+
overlap = k;
|
|
19890
|
+
break;
|
|
19891
|
+
}
|
|
19892
|
+
}
|
|
19893
|
+
const joined = `/${[...baseParts, ...pathParts.slice(overlap)].join("/")}`;
|
|
19894
|
+
return queryPart ? `${joined}?${queryPart}` : joined;
|
|
19895
|
+
}
|
|
19896
|
+
}
|
|
19897
|
+
function stableStringify(value) {
|
|
19898
|
+
if (value === null || typeof value !== "object")
|
|
19899
|
+
return JSON.stringify(value);
|
|
19900
|
+
if (Array.isArray(value))
|
|
19901
|
+
return `[${value.map(stableStringify).join(",")}]`;
|
|
19902
|
+
const entries = Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, innerValue]) => `${JSON.stringify(key)}:${stableStringify(innerValue)}`);
|
|
19903
|
+
return `{${entries.join(",")}}`;
|
|
19904
|
+
}
|
|
19905
|
+
const preprocessResultCache = /* @__PURE__ */ new Map();
|
|
19906
|
+
function isHandlerCredentialPreprocess(preprocess) {
|
|
19907
|
+
return typeof preprocess === "object" && preprocess !== null && preprocess.type === "handler" && typeof preprocess.handlerCode === "string";
|
|
19908
|
+
}
|
|
19909
|
+
function getPreprocessCacheKey(provider, variantKey, creds) {
|
|
19910
|
+
return createHash("sha256").update(`${provider}:${variantKey}:${stableStringify(creds)}`).digest("hex");
|
|
19911
|
+
}
|
|
19912
|
+
function getExpiresAtMs(result, now) {
|
|
19913
|
+
var _a;
|
|
19914
|
+
const rawExpiresIn = (_a = result.expiresIn) != null ? _a : result.expires_in;
|
|
19915
|
+
const expiresIn = typeof rawExpiresIn === "number" ? rawExpiresIn : typeof rawExpiresIn === "string" && rawExpiresIn.trim() ? Number(rawExpiresIn) : NaN;
|
|
19916
|
+
if (Number.isFinite(expiresIn) && expiresIn > 0)
|
|
19917
|
+
return now + expiresIn * 1e3;
|
|
19918
|
+
return now + 55 * 6e4;
|
|
19919
|
+
}
|
|
19920
|
+
function normalizeRequestInit(init = {}) {
|
|
19921
|
+
const preparedInit = { ...init };
|
|
19922
|
+
if (preparedInit.body !== void 0 && typeof preparedInit.body !== "string" && !(preparedInit.body instanceof URLSearchParams) && !(preparedInit.body instanceof FormData) && !(preparedInit.body instanceof Blob) && !(preparedInit.body instanceof ArrayBuffer)) {
|
|
19923
|
+
preparedInit.body = JSON.stringify(preparedInit.body);
|
|
19924
|
+
preparedInit.headers = {
|
|
19925
|
+
"Content-Type": "application/json",
|
|
19926
|
+
...preparedInit.headers
|
|
19927
|
+
};
|
|
19928
|
+
} else if (preparedInit.body instanceof URLSearchParams) {
|
|
19929
|
+
preparedInit.body = preparedInit.body.toString();
|
|
19930
|
+
preparedInit.headers = {
|
|
19931
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
19932
|
+
...preparedInit.headers
|
|
19933
|
+
};
|
|
19934
|
+
}
|
|
19935
|
+
return preparedInit;
|
|
19936
|
+
}
|
|
19937
|
+
async function runSandboxCredentialPreprocess(params) {
|
|
19938
|
+
var _a, _b;
|
|
19939
|
+
const { provider, variantKey, preprocess, creds, baseUrl, allowedOrigins } = params;
|
|
19940
|
+
const cacheKey = getPreprocessCacheKey(provider, variantKey, creds);
|
|
19941
|
+
const existing = preprocessResultCache.get(cacheKey);
|
|
19942
|
+
const now = Date.now();
|
|
19943
|
+
if (existing && existing.expiresAtMs - now > 6e4) {
|
|
19944
|
+
Object.assign(creds, existing.data);
|
|
19945
|
+
return;
|
|
19946
|
+
}
|
|
19947
|
+
const tokenFetch = async (path, init = {}) => {
|
|
19948
|
+
let finalUrl;
|
|
19949
|
+
if (isAbsoluteHttpUrl(path)) {
|
|
19950
|
+
assertAbsoluteUrlIsAllowed(path, baseUrl, allowedOrigins);
|
|
19951
|
+
finalUrl = path;
|
|
19952
|
+
} else {
|
|
19953
|
+
finalUrl = joinWithoutDuplicateSegments(baseUrl, path);
|
|
19954
|
+
}
|
|
19955
|
+
const preparedInit = normalizeRequestInit(init);
|
|
19956
|
+
return await fetch(finalUrl, {
|
|
19957
|
+
...preparedInit,
|
|
19958
|
+
method: preparedInit.method || "GET"
|
|
19959
|
+
});
|
|
19960
|
+
};
|
|
19961
|
+
const wrapper = `async (input) => {
|
|
19962
|
+
const __inner = ${preprocess.handlerCode};
|
|
19963
|
+
return await __inner(input, utils)
|
|
19964
|
+
}`;
|
|
19965
|
+
const safeHandler = createSafeHandlerFromString(wrapper, () => ({}), { tokenFetch });
|
|
19966
|
+
const res = await safeHandler(creds);
|
|
19967
|
+
if (!res.success)
|
|
19968
|
+
throw new HttpError(400, `Credential preprocess failed for '${provider}': ${String(((_a = res.result) == null ? void 0 : _a.message) || res.result || "Unknown error")}`);
|
|
19969
|
+
const result = res.result;
|
|
19970
|
+
if (!result || typeof result !== "object" || Array.isArray(result))
|
|
19971
|
+
throw new HttpError(400, `Credential preprocess for '${provider}' must return an object.`);
|
|
19972
|
+
if (typeof result.token !== "string" || !result.token.trim())
|
|
19973
|
+
throw new HttpError(400, `Credential preprocess for '${provider}' must return a non-empty 'token' string.`);
|
|
19974
|
+
Object.assign(creds, result);
|
|
19975
|
+
preprocessResultCache.set(cacheKey, {
|
|
19976
|
+
data: { ...result },
|
|
19977
|
+
expiresAtMs: getExpiresAtMs(result, now)
|
|
19978
|
+
});
|
|
19979
|
+
if (provider === "sharepoint") {
|
|
19980
|
+
const t = result == null ? void 0 : result.token;
|
|
19981
|
+
const tokenStr = typeof t === "string" ? t : "";
|
|
19982
|
+
const claims = tokenStr ? decodeJwtPayloadForDebug(tokenStr) : null;
|
|
19983
|
+
const roles = claims == null ? void 0 : claims.roles;
|
|
19984
|
+
const rolesList = Array.isArray(roles) ? roles.map((r) => String(r).slice(0, 80)) : [];
|
|
19985
|
+
fetch("http://127.0.0.1:7886/ingest/d4127044-8bb5-4b15-95f1-be96d51d67ea", { method: "POST", headers: { "Content-Type": "application/json", "X-Debug-Session-Id": "797117" }, body: JSON.stringify({ sessionId: "797117", location: "proxy.ts:runSandboxCredentialPreprocess", message: "sharepoint preprocess ok", data: { variantKey, tokenLen: typeof t === "string" ? t.length : 0, expiresIn: (_b = result == null ? void 0 : result.expiresIn) != null ? _b : result == null ? void 0 : result.expires_in, tokenAud: claims == null ? void 0 : claims.aud, tokenTid: claims == null ? void 0 : claims.tid, tokenAppId: claims == null ? void 0 : claims.appid, tokenIdtyp: claims == null ? void 0 : claims.idtyp, rolesCount: rolesList.length, rolesSample: rolesList.slice(0, 12), hasScp: typeof (claims == null ? void 0 : claims.scp) === "string" && String(claims.scp).length > 0, jwtDecodeOk: !!claims }, timestamp: Date.now(), hypothesisId: "H6" }) }).catch(() => {
|
|
19986
|
+
});
|
|
19987
|
+
}
|
|
19988
|
+
}
|
|
19346
19989
|
class IntegrationProxy {
|
|
19347
19990
|
constructor(opts = {}) {
|
|
19348
19991
|
__publicField$4(this, "opts");
|
|
19349
19992
|
this.opts = opts;
|
|
19350
19993
|
}
|
|
19351
19994
|
async call(integration, path, init = {}) {
|
|
19352
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
19995
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
19353
19996
|
const { type: provider } = integration;
|
|
19354
19997
|
if (!provider || !path)
|
|
19355
19998
|
throw new HttpError(400, "provider and path are required.");
|
|
19356
|
-
const joinWithoutDuplicateSegments = (baseUrl, rawPath) => {
|
|
19357
|
-
let pathOnly = rawPath || "";
|
|
19358
|
-
let queryPart = "";
|
|
19359
|
-
const qIndex = pathOnly.indexOf("?");
|
|
19360
|
-
if (qIndex >= 0) {
|
|
19361
|
-
queryPart = pathOnly.slice(qIndex + 1);
|
|
19362
|
-
pathOnly = pathOnly.slice(0, qIndex);
|
|
19363
|
-
}
|
|
19364
|
-
try {
|
|
19365
|
-
const base = new URL(baseUrl);
|
|
19366
|
-
const baseSegs = base.pathname.split("/").filter(Boolean);
|
|
19367
|
-
const pathSegs = (pathOnly || "/").split("/").filter(Boolean);
|
|
19368
|
-
let overlap = 0;
|
|
19369
|
-
const maxK = Math.min(baseSegs.length, pathSegs.length);
|
|
19370
|
-
for (let k = maxK; k >= 1; k--) {
|
|
19371
|
-
let ok = true;
|
|
19372
|
-
for (let i = 0; i < k; i++) {
|
|
19373
|
-
if (baseSegs[baseSegs.length - k + i] !== pathSegs[i]) {
|
|
19374
|
-
ok = false;
|
|
19375
|
-
break;
|
|
19376
|
-
}
|
|
19377
|
-
}
|
|
19378
|
-
if (ok) {
|
|
19379
|
-
overlap = k;
|
|
19380
|
-
break;
|
|
19381
|
-
}
|
|
19382
|
-
}
|
|
19383
|
-
const normalizedPath = `/${[...baseSegs, ...pathSegs.slice(overlap)].join("/")}`;
|
|
19384
|
-
const baseOrigin = base.origin;
|
|
19385
|
-
const urlNoQuery = `${baseOrigin}${normalizedPath}`;
|
|
19386
|
-
return queryPart ? `${urlNoQuery}?${queryPart}` : urlNoQuery;
|
|
19387
|
-
} catch {
|
|
19388
|
-
const cleanedBase = baseUrl.replace(/\/+$/, "");
|
|
19389
|
-
const cleanedPath = `/${(pathOnly || "").replace(/^\/+/, "")}`;
|
|
19390
|
-
const baseParts = cleanedBase.split("/").filter(Boolean);
|
|
19391
|
-
const pathParts = cleanedPath.split("/").filter(Boolean);
|
|
19392
|
-
let overlap = 0;
|
|
19393
|
-
const maxK = Math.min(baseParts.length, pathParts.length);
|
|
19394
|
-
for (let k = maxK; k >= 1; k--) {
|
|
19395
|
-
let ok = true;
|
|
19396
|
-
for (let i = 0; i < k; i++) {
|
|
19397
|
-
if (baseParts[baseParts.length - k + i] !== pathParts[i]) {
|
|
19398
|
-
ok = false;
|
|
19399
|
-
break;
|
|
19400
|
-
}
|
|
19401
|
-
}
|
|
19402
|
-
if (ok) {
|
|
19403
|
-
overlap = k;
|
|
19404
|
-
break;
|
|
19405
|
-
}
|
|
19406
|
-
}
|
|
19407
|
-
const joined = `/${[...baseParts, ...pathParts.slice(overlap)].join("/")}`;
|
|
19408
|
-
return queryPart ? `${joined}?${queryPart}` : joined;
|
|
19409
|
-
}
|
|
19410
|
-
};
|
|
19411
19999
|
const usesCredentials = integration.connectionMethod === "credentials";
|
|
19412
20000
|
if (usesCredentials) {
|
|
19413
20001
|
if (!this.opts.credentialStore)
|
|
@@ -19498,6 +20086,18 @@ class IntegrationProxy {
|
|
|
19498
20086
|
throw new HttpError(400, `Missing OAuth scopes for Google integration '${provider}'.`);
|
|
19499
20087
|
const token = await getGoogleAccessToken({ serviceAccountJson, scopes, subject });
|
|
19500
20088
|
creds.token = token;
|
|
20089
|
+
} else if (isHandlerCredentialPreprocess(typeConfig.preprocess)) {
|
|
20090
|
+
await runSandboxCredentialPreprocess({
|
|
20091
|
+
provider,
|
|
20092
|
+
variantKey,
|
|
20093
|
+
preprocess: typeConfig.preprocess,
|
|
20094
|
+
creds,
|
|
20095
|
+
baseUrl,
|
|
20096
|
+
allowedOrigins: [
|
|
20097
|
+
...typeConfig.allowedOrigins,
|
|
20098
|
+
...(_f = typeConfig.preprocess.allowedOrigins) != null ? _f : []
|
|
20099
|
+
]
|
|
20100
|
+
});
|
|
19501
20101
|
}
|
|
19502
20102
|
const resolvedHeaders = {};
|
|
19503
20103
|
const resolvedQuery = new URLSearchParams();
|
|
@@ -19510,9 +20110,9 @@ class IntegrationProxy {
|
|
|
19510
20110
|
const token = Buffer$1.from(`${username}:${password}`).toString("base64");
|
|
19511
20111
|
resolvedHeaders.Authorization = `Basic ${token}`;
|
|
19512
20112
|
} else {
|
|
19513
|
-
for (const [k, v] of Object.entries(((
|
|
20113
|
+
for (const [k, v] of Object.entries(((_g = typeConfig.auth.injection) == null ? void 0 : _g.headers) || {}))
|
|
19514
20114
|
resolvedHeaders[k] = resolveTemplate(v);
|
|
19515
|
-
for (const [k, v] of Object.entries(((
|
|
20115
|
+
for (const [k, v] of Object.entries(((_h = typeConfig.auth.injection) == null ? void 0 : _h.query) || {}))
|
|
19516
20116
|
resolvedQuery.set(k, resolveTemplate(v));
|
|
19517
20117
|
}
|
|
19518
20118
|
let finalUrl;
|
|
@@ -19525,14 +20125,7 @@ class IntegrationProxy {
|
|
|
19525
20125
|
const queryString = resolvedQuery.toString();
|
|
19526
20126
|
if (queryString)
|
|
19527
20127
|
finalUrl = finalUrl + (finalUrl.includes("?") ? "&" : "?") + queryString;
|
|
19528
|
-
const preparedInit =
|
|
19529
|
-
if (preparedInit.body !== void 0 && typeof preparedInit.body !== "string") {
|
|
19530
|
-
preparedInit.body = JSON.stringify(preparedInit.body);
|
|
19531
|
-
preparedInit.headers = {
|
|
19532
|
-
"Content-Type": "application/json",
|
|
19533
|
-
...preparedInit.headers
|
|
19534
|
-
};
|
|
19535
|
-
}
|
|
20128
|
+
const preparedInit = normalizeRequestInit(init);
|
|
19536
20129
|
const redact = (s) => {
|
|
19537
20130
|
let out = s;
|
|
19538
20131
|
for (const val of Object.values(creds)) {
|
|
@@ -19541,6 +20134,18 @@ class IntegrationProxy {
|
|
|
19541
20134
|
}
|
|
19542
20135
|
return out;
|
|
19543
20136
|
};
|
|
20137
|
+
if (provider === "sharepoint") {
|
|
20138
|
+
const auth = resolvedHeaders.Authorization;
|
|
20139
|
+
const bodyString = typeof preparedInit.body === "string" ? preparedInit.body : "";
|
|
20140
|
+
fetch("http://127.0.0.1:7886/ingest/d4127044-8bb5-4b15-95f1-be96d51d67ea", { method: "POST", headers: { "Content-Type": "application/json", "X-Debug-Session-Id": "797117" }, body: JSON.stringify({ sessionId: "797117", location: "proxy.ts:before-fetch", message: "sharepoint outgoing", data: { method: preparedInit.method || "GET", pathPreview: String(path).slice(0, 200), finalUrlHost: (() => {
|
|
20141
|
+
try {
|
|
20142
|
+
return new URL(finalUrl).host;
|
|
20143
|
+
} catch {
|
|
20144
|
+
return "invalid-url";
|
|
20145
|
+
}
|
|
20146
|
+
})(), hasAuthHeader: !!auth, authPrefix: auth ? String(auth).slice(0, 8) : "", tokenFieldLen: typeof creds.token === "string" ? creds.token.length : 0, bodyPreview: bodyString.slice(0, 300), bodyHasRegion: bodyString.includes('"region"'), isSearchQuery: String(path).includes("/search/query"), isRegionLookup: String(path).includes("siteCollection/root ne null") }, timestamp: Date.now(), hypothesisId: String(path).includes("/search/query") || String(path).includes("siteCollection/root ne null") ? "H9" : "H1" }) }).catch(() => {
|
|
20147
|
+
});
|
|
20148
|
+
}
|
|
19544
20149
|
const response = await fetch(finalUrl, {
|
|
19545
20150
|
...preparedInit,
|
|
19546
20151
|
method: preparedInit.method || "GET",
|
|
@@ -19556,6 +20161,23 @@ class IntegrationProxy {
|
|
|
19556
20161
|
bodyText = contentType.includes("json") ? JSON.stringify(await response.json()) : await response.text();
|
|
19557
20162
|
} catch {
|
|
19558
20163
|
}
|
|
20164
|
+
if (provider === "sharepoint") {
|
|
20165
|
+
const auth = resolvedHeaders.Authorization;
|
|
20166
|
+
let graphErrorCode = "";
|
|
20167
|
+
try {
|
|
20168
|
+
const parsed = JSON.parse(bodyText);
|
|
20169
|
+
graphErrorCode = String(((_i = parsed == null ? void 0 : parsed.error) == null ? void 0 : _i.code) || (parsed == null ? void 0 : parsed.error) || "");
|
|
20170
|
+
} catch {
|
|
20171
|
+
}
|
|
20172
|
+
fetch("http://127.0.0.1:7886/ingest/d4127044-8bb5-4b15-95f1-be96d51d67ea", { method: "POST", headers: { "Content-Type": "application/json", "X-Debug-Session-Id": "797117" }, body: JSON.stringify({ sessionId: "797117", location: "proxy.ts:graph-error", message: "sharepoint graph non-ok", data: { status: response.status, pathPreview: String(path).slice(0, 160), finalUrlHost: (() => {
|
|
20173
|
+
try {
|
|
20174
|
+
return new URL(finalUrl).host;
|
|
20175
|
+
} catch {
|
|
20176
|
+
return "invalid-url";
|
|
20177
|
+
}
|
|
20178
|
+
})(), hasAuthHeader: !!auth, authPrefix: auth ? String(auth).slice(0, 8) : "", graphErrorCode: graphErrorCode.slice(0, 80), bodyPreview: bodyText.slice(0, 220) }, timestamp: Date.now(), hypothesisId: "H2" }) }).catch(() => {
|
|
20179
|
+
});
|
|
20180
|
+
}
|
|
19559
20181
|
const hint = getErrorHint(response.status, provider, bodyText);
|
|
19560
20182
|
const hintSuffix = hint ? ` ${hint}` : "";
|
|
19561
20183
|
const credentialUrl = buildCredentialUrl(integration.id);
|
|
@@ -21941,140 +22563,140 @@ const assets = {
|
|
|
21941
22563
|
"/favicon.ico": {
|
|
21942
22564
|
"type": "image/vnd.microsoft.icon",
|
|
21943
22565
|
"etag": "\"10be-n8egyE9tcb7sKGr/pYCaQ4uWqxI\"",
|
|
21944
|
-
"mtime": "2026-04-
|
|
22566
|
+
"mtime": "2026-04-07T07:13:36.310Z",
|
|
21945
22567
|
"size": 4286,
|
|
21946
22568
|
"path": "../public/favicon.ico"
|
|
21947
22569
|
},
|
|
21948
22570
|
"/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2": {
|
|
21949
22571
|
"type": "font/woff2",
|
|
21950
22572
|
"etag": "\"4b5c-TAo9mx7r3xQs52+HbHcHJ52z8Qo\"",
|
|
21951
|
-
"mtime": "2026-04-
|
|
22573
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21952
22574
|
"size": 19292,
|
|
21953
22575
|
"path": "../public/_fonts/57NSSoFy1VLVs2gqly8Ls9awBnZMFyXGrefpmqvdqmc-zJfbBtpgM4cDmcXBsqZNW79_kFnlpPd62b48glgdydA.woff2"
|
|
21954
22576
|
},
|
|
21955
22577
|
"/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2": {
|
|
21956
22578
|
"type": "font/woff2",
|
|
21957
22579
|
"etag": "\"212c-FshXJibFzNhd2HEIMP8C3JR5PYg\"",
|
|
21958
|
-
"mtime": "2026-04-
|
|
22580
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21959
22581
|
"size": 8492,
|
|
21960
22582
|
"path": "../public/_fonts/8VR2wSMN-3U4NbWAVYXlkRV6hA0jFBXP-0RtL3X7fko-x2gYI4qfmkRdxyQQUPaBZdZdgl1TeVrquF_TxHeM4lM.woff2"
|
|
21961
22583
|
},
|
|
21962
22584
|
"/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2": {
|
|
21963
22585
|
"type": "font/woff2",
|
|
21964
22586
|
"etag": "\"680c-mJtsV33lkTAKSmfq5k3lKHSllcU\"",
|
|
21965
|
-
"mtime": "2026-04-
|
|
22587
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21966
22588
|
"size": 26636,
|
|
21967
22589
|
"path": "../public/_fonts/GsKUclqeNLJ96g5AU593ug6yanivOiwjW_7zESNPChw-jHA4tBeM1bjF7LATGUpfBuSTyomIFrWBTzjF7txVYfg.woff2"
|
|
21968
22590
|
},
|
|
21969
22591
|
"/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2": {
|
|
21970
22592
|
"type": "font/woff2",
|
|
21971
22593
|
"etag": "\"6ec4-8OoFFPZKF1grqmfGVjh5JDE6DOU\"",
|
|
21972
|
-
"mtime": "2026-04-
|
|
22594
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21973
22595
|
"size": 28356,
|
|
21974
22596
|
"path": "../public/_fonts/Ld1FnTo3yTIwDyGfTQ5-Fws9AWsCbKfMvgxduXr7JcY-W25bL8NF1fjpLRSOgJb7RoZPHqGQNwMTM7S9tHVoxx8.woff2"
|
|
21975
22597
|
},
|
|
21976
22598
|
"/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2": {
|
|
21977
22599
|
"type": "font/woff2",
|
|
21978
22600
|
"etag": "\"1d98-cDZfMibtk4T04FTTAmlfhWDpkN0\"",
|
|
21979
|
-
"mtime": "2026-04-
|
|
22601
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21980
22602
|
"size": 7576,
|
|
21981
22603
|
"path": "../public/_fonts/NdzqRASp2bovDUhQT1IRE_EMqKJ2KYQdTCfFcBvL8yw-KhwZiS86o3fErOe5GGMExHUemmI_dBfaEFxjISZrBd0.woff2"
|
|
21982
22604
|
},
|
|
21983
22605
|
"/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2": {
|
|
21984
22606
|
"type": "font/woff2",
|
|
21985
22607
|
"etag": "\"47c4-5xyngHnzzhetUee74tMx9OTgqNQ\"",
|
|
21986
|
-
"mtime": "2026-04-
|
|
22608
|
+
"mtime": "2026-04-07T07:13:36.305Z",
|
|
21987
22609
|
"size": 18372,
|
|
21988
22610
|
"path": "../public/_fonts/iTkrULNFJJkTvihIg1Vqi5IODRH_9btXCioVF5l98I8-AndUyau2HR2felA_ra8V2mutQgschhasE5FD1dXGJX8.woff2"
|
|
21989
22611
|
},
|
|
21990
22612
|
"/_nuxt/BD6mASiY.js": {
|
|
21991
22613
|
"type": "text/javascript; charset=utf-8",
|
|
21992
22614
|
"etag": "\"ab-ScyLcA/4r5aOxEv1YY+kqXazCHI\"",
|
|
21993
|
-
"mtime": "2026-04-
|
|
22615
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
21994
22616
|
"size": 171,
|
|
21995
22617
|
"path": "../public/_nuxt/BD6mASiY.js"
|
|
21996
22618
|
},
|
|
21997
22619
|
"/_nuxt/CjAs3eBq.js": {
|
|
21998
22620
|
"type": "text/javascript; charset=utf-8",
|
|
21999
22621
|
"etag": "\"1df7-cTFKdH9K34T9NixeUm/CLQ8lWUc\"",
|
|
22000
|
-
"mtime": "2026-04-
|
|
22622
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22001
22623
|
"size": 7671,
|
|
22002
22624
|
"path": "../public/_nuxt/CjAs3eBq.js"
|
|
22003
22625
|
},
|
|
22004
22626
|
"/_nuxt/D9wFDhac.js": {
|
|
22005
22627
|
"type": "text/javascript; charset=utf-8",
|
|
22006
22628
|
"etag": "\"e99-sUFV1wmMOK2XGfzDXJyP2NA8TG4\"",
|
|
22007
|
-
"mtime": "2026-04-
|
|
22629
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22008
22630
|
"size": 3737,
|
|
22009
22631
|
"path": "../public/_nuxt/D9wFDhac.js"
|
|
22010
22632
|
},
|
|
22011
|
-
"/_nuxt/DSWYWRXT.js": {
|
|
22012
|
-
"type": "text/javascript; charset=utf-8",
|
|
22013
|
-
"etag": "\"10875-8b+YwIvP6QkcBFnHXqxd+WeZ05o\"",
|
|
22014
|
-
"mtime": "2026-04-05T18:35:56.186Z",
|
|
22015
|
-
"size": 67701,
|
|
22016
|
-
"path": "../public/_nuxt/DSWYWRXT.js"
|
|
22017
|
-
},
|
|
22018
22633
|
"/_nuxt/DRfk9W3W.js": {
|
|
22019
22634
|
"type": "text/javascript; charset=utf-8",
|
|
22020
22635
|
"etag": "\"194dc-Oj5Ixz12+pq4yqDtF/N+YAPzoWw\"",
|
|
22021
|
-
"mtime": "2026-04-
|
|
22636
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22022
22637
|
"size": 103644,
|
|
22023
22638
|
"path": "../public/_nuxt/DRfk9W3W.js"
|
|
22024
22639
|
},
|
|
22640
|
+
"/_nuxt/DSWYWRXT.js": {
|
|
22641
|
+
"type": "text/javascript; charset=utf-8",
|
|
22642
|
+
"etag": "\"10875-8b+YwIvP6QkcBFnHXqxd+WeZ05o\"",
|
|
22643
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22644
|
+
"size": 67701,
|
|
22645
|
+
"path": "../public/_nuxt/DSWYWRXT.js"
|
|
22646
|
+
},
|
|
22025
22647
|
"/_nuxt/VvnbcAzZ.js": {
|
|
22026
22648
|
"type": "text/javascript; charset=utf-8",
|
|
22027
22649
|
"etag": "\"d7b-hU4O5jppM7Ou3kZAYy3iYXlgoa8\"",
|
|
22028
|
-
"mtime": "2026-04-
|
|
22650
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22029
22651
|
"size": 3451,
|
|
22030
22652
|
"path": "../public/_nuxt/VvnbcAzZ.js"
|
|
22031
22653
|
},
|
|
22032
22654
|
"/_nuxt/_id_.DhlLK-mY.css": {
|
|
22033
22655
|
"type": "text/css; charset=utf-8",
|
|
22034
22656
|
"etag": "\"2f4-xtV37kE566jU74wpZnFHA29RoAY\"",
|
|
22035
|
-
"mtime": "2026-04-
|
|
22657
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22036
22658
|
"size": 756,
|
|
22037
22659
|
"path": "../public/_nuxt/_id_.DhlLK-mY.css"
|
|
22038
22660
|
},
|
|
22661
|
+
"/_nuxt/BUmYUDQu.js": {
|
|
22662
|
+
"type": "text/javascript; charset=utf-8",
|
|
22663
|
+
"etag": "\"66cba-d/pdEXVc78H3VlgFN3kVzKpvD1Q\"",
|
|
22664
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22665
|
+
"size": 421050,
|
|
22666
|
+
"path": "../public/_nuxt/BUmYUDQu.js"
|
|
22667
|
+
},
|
|
22039
22668
|
"/_nuxt/error-404.C7fg894-.css": {
|
|
22040
22669
|
"type": "text/css; charset=utf-8",
|
|
22041
22670
|
"etag": "\"97e-fiQ3o7A11L9BuXRBr0GJldkx0AU\"",
|
|
22042
|
-
"mtime": "2026-04-
|
|
22671
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22043
22672
|
"size": 2430,
|
|
22044
22673
|
"path": "../public/_nuxt/error-404.C7fg894-.css"
|
|
22045
22674
|
},
|
|
22046
22675
|
"/_nuxt/error-500.DjUK_N2Y.css": {
|
|
22047
22676
|
"type": "text/css; charset=utf-8",
|
|
22048
22677
|
"etag": "\"773-Qf61bSDos4KtmZDaA06FmZyUYNo\"",
|
|
22049
|
-
"mtime": "2026-04-
|
|
22678
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22050
22679
|
"size": 1907,
|
|
22051
22680
|
"path": "../public/_nuxt/error-500.DjUK_N2Y.css"
|
|
22052
22681
|
},
|
|
22053
22682
|
"/_nuxt/builds/latest.json": {
|
|
22054
22683
|
"type": "application/json",
|
|
22055
|
-
"etag": "\"47-
|
|
22056
|
-
"mtime": "2026-04-
|
|
22684
|
+
"etag": "\"47-hl0sv2tAIq0lIkhLc1Sve7W2pxs\"",
|
|
22685
|
+
"mtime": "2026-04-07T07:13:36.304Z",
|
|
22057
22686
|
"size": 71,
|
|
22058
22687
|
"path": "../public/_nuxt/builds/latest.json"
|
|
22059
22688
|
},
|
|
22060
|
-
"/_nuxt/builds/meta/
|
|
22689
|
+
"/_nuxt/builds/meta/9441a86b-16e9-4000-bffc-3b2e78e57710.json": {
|
|
22061
22690
|
"type": "application/json",
|
|
22062
|
-
"etag": "\"58
|
|
22063
|
-
"mtime": "2026-04-
|
|
22691
|
+
"etag": "\"58-cDzg8zvmZMF8VeAEeeEcF3Ng22E\"",
|
|
22692
|
+
"mtime": "2026-04-07T07:13:36.301Z",
|
|
22064
22693
|
"size": 88,
|
|
22065
|
-
"path": "../public/_nuxt/builds/meta/
|
|
22066
|
-
},
|
|
22067
|
-
"/_nuxt/BUmYUDQu.js": {
|
|
22068
|
-
"type": "text/javascript; charset=utf-8",
|
|
22069
|
-
"etag": "\"66cba-d/pdEXVc78H3VlgFN3kVzKpvD1Q\"",
|
|
22070
|
-
"mtime": "2026-04-05T18:35:56.186Z",
|
|
22071
|
-
"size": 421050,
|
|
22072
|
-
"path": "../public/_nuxt/BUmYUDQu.js"
|
|
22694
|
+
"path": "../public/_nuxt/builds/meta/9441a86b-16e9-4000-bffc-3b2e78e57710.json"
|
|
22073
22695
|
},
|
|
22074
22696
|
"/_nuxt/entry.Y3mA4bzA.css": {
|
|
22075
22697
|
"type": "text/css; charset=utf-8",
|
|
22076
22698
|
"etag": "\"2d46b-zfrD3Ny9WW6qm4fCXAfX5eIAxPA\"",
|
|
22077
|
-
"mtime": "2026-04-
|
|
22699
|
+
"mtime": "2026-04-07T07:13:36.308Z",
|
|
22078
22700
|
"size": 185451,
|
|
22079
22701
|
"path": "../public/_nuxt/entry.Y3mA4bzA.css"
|
|
22080
22702
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nitro.mjs","sources":["../../../../../node_modules/destr/dist/index.mjs","../../../../../node_modules/ufo/dist/index.mjs","../../../../../node_modules/radix3/dist/index.mjs","../../../../../node_modules/defu/dist/defu.mjs","../../../../../node_modules/node-mock-http/dist/index.mjs","../../../../../node_modules/h3/dist/index.mjs","../../../../../node_modules/hookable/dist/index.mjs","../../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../../node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../../node_modules/ofetch/dist/node.mjs","../../../../../node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../../node_modules/unstorage/dist/index.mjs","../../../../../node_modules/unstorage/drivers/utils/index.mjs","../../../../../node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../../node_modules/unstorage/drivers/fs-lite.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../../node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../../node_modules/ohash/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../../node_modules/klona/dist/index.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/config.mjs","../../../../app/app.config.ts","../../../../../node_modules/scule/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../../node_modules/unctx/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../../node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../../packages/core/dist/errors/httpError.js","../../../../../packages/core/dist/crypto/encryption.js","../../../../../packages/integration-data/dist/generated/registry.js","../../../../../packages/integration-data/dist/loader.js","../../../../../packages/core/dist/integrations/tools.js","../../../../../packages/core/dist/integrations/sandbox.js","../../../../../packages/core/dist/integrations/sandboxUtils.js","../../../../../packages/core/dist/integrations/getIntegration.js","../../../../../packages/core/dist/integrations/generated-extractor.js","../../../../../packages/core/dist/integrations/fileProcessing.js","../../../../../packages/core/dist/integrations/fileExtractor.js","../../../../../packages/core/dist/integrations/executableToolFactory.js","../../../../../packages/core/dist/integrations/fileIntegrationTypeConfigStore.js","../../../../../packages/core/dist/integrations/googleServiceAccount.js","../../../../../packages/core/dist/integrations/proxy.js","../../../../../packages/core/dist/db/schema.js","../../../../../packages/core/dist/db/integrationTypeConfigStore.js","../../../../../packages/core/dist/integrations/health.js","../../../../../packages/core/dist/integrations/integrationTypeConfigLookup.js","../../../../../packages/core/dist/db/client.js","../../../../../packages/core/dist/db/generated-migrations.js","../../../../../packages/core/dist/db/migrate.js","../../../../../packages/core/dist/db/credentialStore.js","../../../../../packages/core/dist/db/integrationStore.js","../../../../../packages/core/dist/db/toolDefinitionStore.js","../../../../../packages/core/dist/mcp/toolAdapter.js","../../../../../packages/core/dist/mcp/abilityCatalog.js","../../../../../packages/core/dist/mcp/generated-assets.js","../../../../../packages/core/dist/integrations/customToolFactory.js","../../../../../packages/core/dist/mcp/metaTools.js","../../../../../packages/core/dist/mcp/handlers.js","../../../../../packages/core/dist/mcp/sessionState.js","../../../../../packages/core/dist/mcp/auth.js","../../../../../packages/core/dist/config/configSchema.js","../../../../../packages/core/dist/config/configLoader.js","../../../../../packages/core/dist/config/configApply.js","../../../../../packages/core/dist/runtime/credentialManager.js","../../../../server/utils/db.ts","../../../../server/plugins/configApply.ts","../../../../server/plugins/fileProcessingCapability.ts","../../../../server/plugins/requireEncryptionSecret.ts","../../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/mcpAuth.ts","../../../../../node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.mjs","../../../../server/utils/mcp.ts","../../../../server/utils/runVariantConfigListHandler.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../../node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["getQuery","createRouter","f","h","c","i","l","createError","getHeader","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","serialize","hash","getKey","_inlineAppConfig","createRadixRouter","__publicField","SCOPE_RANK","_a","URL","URLSearchParams","execFile","execFileCb","isAbsoluteHttpUrl","basename","writeFile","readFile","capability","
|
|
1
|
+
{"version":3,"file":"nitro.mjs","sources":["../../../../../node_modules/destr/dist/index.mjs","../../../../../node_modules/ufo/dist/index.mjs","../../../../../node_modules/radix3/dist/index.mjs","../../../../../node_modules/defu/dist/defu.mjs","../../../../../node_modules/node-mock-http/dist/index.mjs","../../../../../node_modules/h3/dist/index.mjs","../../../../../node_modules/hookable/dist/index.mjs","../../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../../node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../../node_modules/ofetch/dist/node.mjs","../../../../../node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../../node_modules/unstorage/dist/index.mjs","../../../../../node_modules/unstorage/drivers/utils/index.mjs","../../../../../node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../../node_modules/unstorage/drivers/fs-lite.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../../node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../../node_modules/ohash/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../../node_modules/klona/dist/index.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/config.mjs","../../../../app/app.config.ts","../../../../../node_modules/scule/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../../node_modules/unctx/dist/index.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../../node_modules/@nuxtjs/color-mode/dist/runtime/nitro-plugin.js","../../../../../packages/core/dist/errors/httpError.js","../../../../../packages/core/dist/crypto/encryption.js","../../../../../packages/integration-data/dist/generated/registry.js","../../../../../packages/integration-data/dist/loader.js","../../../../../packages/core/dist/integrations/tools.js","../../../../../packages/core/dist/integrations/sandbox.js","../../../../../packages/core/dist/integrations/sandboxUtils.js","../../../../../packages/core/dist/integrations/getIntegration.js","../../../../../packages/core/dist/integrations/generated-extractor.js","../../../../../packages/core/dist/integrations/fileProcessing.js","../../../../../packages/core/dist/integrations/fileExtractor.js","../../../../../packages/core/dist/integrations/executableToolFactory.js","../../../../../packages/core/dist/integrations/fileIntegrationTypeConfigStore.js","../../../../../packages/core/dist/integrations/googleServiceAccount.js","../../../../../packages/core/dist/integrations/proxy.js","../../../../../packages/core/dist/db/schema.js","../../../../../packages/core/dist/db/integrationTypeConfigStore.js","../../../../../packages/core/dist/integrations/health.js","../../../../../packages/core/dist/integrations/integrationTypeConfigLookup.js","../../../../../packages/core/dist/db/client.js","../../../../../packages/core/dist/db/generated-migrations.js","../../../../../packages/core/dist/db/migrate.js","../../../../../packages/core/dist/db/credentialStore.js","../../../../../packages/core/dist/db/integrationStore.js","../../../../../packages/core/dist/db/toolDefinitionStore.js","../../../../../packages/core/dist/mcp/toolAdapter.js","../../../../../packages/core/dist/mcp/abilityCatalog.js","../../../../../packages/core/dist/mcp/generated-assets.js","../../../../../packages/core/dist/integrations/customToolFactory.js","../../../../../packages/core/dist/mcp/metaTools.js","../../../../../packages/core/dist/mcp/handlers.js","../../../../../packages/core/dist/mcp/sessionState.js","../../../../../packages/core/dist/mcp/auth.js","../../../../../packages/core/dist/config/configSchema.js","../../../../../packages/core/dist/config/configLoader.js","../../../../../packages/core/dist/config/configApply.js","../../../../../packages/core/dist/runtime/credentialManager.js","../../../../server/utils/db.ts","../../../../server/plugins/configApply.ts","../../../../server/plugins/fileProcessingCapability.ts","../../../../server/plugins/requireEncryptionSecret.ts","../../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/mcpAuth.ts","../../../../../node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.mjs","../../../../server/utils/mcp.ts","../../../../server/utils/runVariantConfigListHandler.ts","../../../../node_modules/.cache/nuxt/.nuxt/nuxt-icon-server-bundle.mjs","../../../../../node_modules/@nuxt/icon/dist/runtime/server/api.js","../../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["getQuery","createRouter","f","h","c","i","l","createError","getHeader","mergeHeaders","s","nodeFetch","fetch","Headers","Headers$1","AbortController$1","$fetch","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","serialize","hash","getKey","_inlineAppConfig","createRadixRouter","__publicField","SCOPE_RANK","_a","URL","URLSearchParams","execFile","execFileCb","isAbsoluteHttpUrl","basename","writeFile","readFile","capability","Buffer","v","sqlitePrimaryKey","pgText","pgInteger","pgPrimaryKey","t","db","parseJson","normalizeHintMarkdown","drizzlePg","drizzleSqlite","humanize","levenshtein","_b","_c","name","tool","res","cwd","sid","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,77,78,80,81,82,85,86,87,88,89,90]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@commandable/mcp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.0",
|
|
5
5
|
"packageManager": "yarn@4.12.0",
|
|
6
6
|
"description": "Commandable app/server package for local management UI, HTTP endpoints, and human-facing CLI flows.",
|
|
7
7
|
"license": "AGPL-3.0-only",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@clack/prompts": "^1.0.1",
|
|
43
|
-
"@commandable/mcp-core": "0.
|
|
43
|
+
"@commandable/mcp-core": "0.11.0",
|
|
44
44
|
"@iconify-json/lucide": "^1.2.90",
|
|
45
45
|
"@iconify-json/simple-icons": "^1.2.70",
|
|
46
46
|
"@nuxt/ui": "^4.4.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"0857a55b-f766-4fe6-86be-9bd9d857861a","timestamp":1775414150491,"prerendered":[]}
|