@superglue/cli 1.1.51 → 1.1.52
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/.claude-plugin/plugin.json +1 -1
- package/dist/cli.js +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "superglue",
|
|
3
3
|
"description": "Build, test, and manage superglue tools via the sg CLI. Use when working with superglue tools, systems, APIs, SDKs, or the sg command.",
|
|
4
|
-
"version": "1.1.
|
|
4
|
+
"version": "1.1.52",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "superglue",
|
|
7
7
|
"email": "hello@superglue.cloud"
|
package/dist/cli.js
CHANGED
|
@@ -392,7 +392,7 @@ Authentication is not sent as Authorization: Bearer. First call POST /openapi/v1
|
|
|
392
392
|
|
|
393
393
|
API keys are generated by a Jisr Admin in Settings > Webhook & API Keys > API Keys. Enabled API and lookup permissions control which endpoints and fields are accessible, the secret can only be copied once, and employee financial fields require the "Get Employee Financial Info" permission.
|
|
394
394
|
|
|
395
|
-
Most list endpoints paginate with page plus rpp or limit, capped at 100 records per page. Payroll and accrual endpoints often require specific type values, paygroup filters, and pay period dates set to the first day of a confirmed month. Some payroll endpoints, including employee monthly payables and payroll transaction deletion, are available only for whitelisted organizations.`},attio:{name:"attio",apiUrl:"https://api.attio.com/v2/",regex:"^.*attio.*$",icon:"/logos/attio.svg",docsUrl:"https://docs.attio.com/rest-api/overview",openApiUrl:"https://api.attio.com/openapi/api",preferredAuthType:"api_key",keywords:["people","objects","records","lists","entries","workspace_members","notes","tasks","threads","comments","sorts","api_slug","attribute_type","record_id","workspace_id","object_id"]},twilio:{name:"twilio",apiUrl:"https://api.twilio.com",regex:"^.*twilio.*$",icon:"/logos/twilio.svg",docsUrl:"https://www.twilio.com/docs/api",openApiUrl:"https://raw.githubusercontent.com/twilio/twilio-oai/refs/heads/main/spec/json/twilio_api_v2010.json",preferredAuthType:"api_key",keywords:["Messages","Media","MessageFeedback","Calls","Accounts","APIKeys","Addresses","UsageRecords","CallFeedback","CredentialsList","TaskRouter_Workspaces","TaskRouter_Tasks","TaskRouter_Workers","TaskRouter_Activities","MessagingServices"]},sendgrid:{name:"sendgrid",apiUrl:"https://api.sendgrid.com",regex:"^.*sendgrid.*$",icon:"/logos/sendgrid.svg",docsUrl:"https://www.twilio.com/docs/sendgrid/api-reference",openApiUrl:"https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/oai.json",preferredAuthType:"api_key",keywords:["mail_send","templates","campaigns","marketing_contacts","marketing_lists","suppression_groups","global_suppressions","asm_suppressions","subusers","stats","categories","whitelabel","ips","access_settings"]},github:{name:"github",apiUrl:"https://api.github.com",regex:"^.*github.*$",icon:"github",docsUrl:"https://docs.github.com/en/rest",openApiUrl:"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",preferredAuthType:"api_key",oauth:{authUrl:"https://github.com/login/oauth/authorize",tokenUrl:"https://github.com/login/oauth/access_token",scopes:"repo user admin:org workflow gist notifications delete_repo write:packages read:packages"},keywords:["repositories","issues","pull_requests","commits","branches","tags","releases","deployments","check_runs","actions_artifacts","organizations","packages","collaborators","gists","milestones"]},gitlab:{name:"gitlab",apiUrl:"https://api.gitlab.com",regex:"^.*gitlab.*$",icon:"gitlab",docsUrl:"https://docs.gitlab.com/api/rest/",openApiUrl:"https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/openapi/openapi.yaml",preferredAuthType:"api_key",oauth:{authUrl:"https://gitlab.com/oauth/authorize",tokenUrl:"https://gitlab.com/oauth/token",scopes:"api"},keywords:["projects","repositories","issues","pull_requests","commits","branches","tags","releases","deployments","check_runs","actions_artifacts","organizations","packages","collaborators","gists","milestones"]},bitbucket:{name:"bitbucket",apiUrl:"https://api.bitbucket.org",regex:"^.*bitbucket.*$",icon:"bitbucket",docsUrl:"https://developer.atlassian.com/cloud/bitbucket/rest",openApiUrl:"https://api.bitbucket.org/swagger.json",preferredAuthType:"oauth2",oauth:{authUrl:"https://bitbucket.org/site/oauth2/authorize",tokenUrl:"https://bitbucket.org/site/oauth2/access_token",scopes:"repository:admin account:write team:write webhook"},keywords:["repositories","projects","commits","branches","pullrequests","downloads","issues","pipelines","branchRestrictions","components","milestones","refs","hooks","forks","user"]},slack:{name:"slack",apiUrl:"https://slack.com/api",regex:"^.*slack.*$",icon:"slack",docsUrl:"https://docs.slack.dev/apis/web-api/",openApiUrl:"https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",preferredAuthType:"oauth2",oauth:{grant_type:"authorization_code",authUrl:"https://slack.com/oauth/v2/authorize",tokenUrl:"https://slack.com/api/oauth.v2.access",scopes:"channels:history channels:join channels:manage channels:read channels:write.invites channels:write.topic chat:write chat:write.customize chat:write.public files:read files:write groups:history groups:read groups:write groups:write.invites im:history im:read im:write mpim:history mpim:read mpim:write reactions:read reactions:write users:read users:read.email",client_id:"7626585708593.9087382641312"},keywords:["channel","conversation","user","file","event","message","workflow_step","workflow_published","workflow_step_execute","usergroup","im","mpim","group","check_run","apps_permissions_resource"],systemSpecificInstructions:"Choose the Slack authentication model before connecting. Superglue-managed OAuth installs the superglue Slack app and returns a bot token (xoxb-). This app is pending Slack Marketplace verification: installers may see an unverified-app warning, and workspaces with app approval policies can require a Workspace Owner or admin to approve or complete the installation; on Enterprise Grid an Org Owner or app manager may be required instead. The bot token carries these scopes: channels:read, channels:history, channels:join, channels:manage, channels:write.invites, channels:write.topic, chat:write, chat:write.customize, chat:write.public, groups:read, groups:history, groups:write, groups:write.invites, im:read, im:history, im:write, mpim:read, mpim:history, mpim:write, reactions:read, reactions:write, users:read, users:read.email, files:read, files:write. A bot token can read only conversations the bot is a member of \u2014 public channels it has joined and private channels, DMs, or group DMs it has been explicitly added to \u2014 and cannot use search.messages. For workspace-wide message search, use a customer-owned Slack app with user scopes (search:read) and a user token (xoxp-); superglue's managed OAuth does not capture user tokens, so that token must be entered directly in the secure Credentials UI and never pasted into chat. A customer-owned app can also supply its own bot token when the customer prefers app-owned access, and incoming webhook URLs from a customer's own app can be used for write-only notification delivery; webhooks cannot provide conversation context. Slack OAuth scopes are additive: removing scopes from config does not revoke an existing grant; revoke and reinstall when access must be narrowed. Never post a message, upload a file, add a reaction, create or modify a channel, invite members, change a topic, or open a DM or group DM without first showing the user the exact action, destination, and content, and receiving explicit approval. Prefer the least visible action that satisfies the request: do not join channels, create channels, or message people beyond what the user asked for."},airtable:{name:"airtable",apiUrl:"https://api.airtable.com",regex:"^.*airtable.*$",icon:"airtable",docsUrl:"https://airtable.com/developers/web/api",preferredAuthType:"oauth2",oauth:{authUrl:"https://airtable.com/oauth2/v1/authorize",tokenUrl:"https://airtable.com/oauth2/v1/token",scopes:"data.recordComments:read data.recordComments:write data.records:read data.records:write schema.bases:read schema.bases:write user.email:read enterprise.groups:read data.records:manage enterprise.account:read enterprise.account:write enterprise.auditLogs:read enterprise.changeEvents:read enterprise.exports:manage enterprise.groups:manage enterprise.scim.usersAndGroups:manage enterprise.user:read enterprise.user:write webhook:manage",client_id:"02601365-de97-4191-b12d-e03c8540b03d",usePKCE:!0,tokenAuthMethod:"basic_auth",tokenContentType:"form"},keywords:["bases","tables","records","fields","views","formulas","attachments","comments","collaborators","metadata","schemas","api key","key"]},gmail:{name:"gmail",apiUrl:"https://gmail.googleapis.com/gmail/v1",regex:"^.*(gmail\\.googleapis|developers\\.google\\.com/gmail|mail\\.google).*$",icon:"gmail",docsUrl:"https://developers.google.com/gmail/api/reference/rest",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://mail.google.com/"},keywords:["messages","threads","labels","drafts","send","attachments","history","filters","settings","forwarding","inbox","profile","oauth"]},granola:{name:"granola",apiUrl:"https://public-api.granola.ai",regex:"^.*granola.*$",icon:"/logos/granola.svg",docsUrl:"https://docs.granola.ai",preferredAuthType:"api_key",keywords:["meeting","notes","transcript","summary","ai","recording"]},googleDrive:{name:"googleDrive",apiUrl:"https://www.googleapis.com/drive/v3",regex:"^.*(googleapis\\.com/drive|developers\\.google\\.com/drive|drive\\.google).*$",icon:"googledrive",docsUrl:"https://developers.google.com/drive/api/v3/reference",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/drive"},keywords:["files","folders","permissions","sharing","comments","revisions","changes","uploads","downloads","metadata","teamdrives","export","copy","move","oauth"]},googleCalendar:{name:"googleCalendar",apiUrl:"https://www.googleapis.com/calendar/v3",regex:"^.*(googleapis\\.com/calendar|developers\\.google\\.com/calendar|calendar\\.google).*$",icon:"googlecalendar",docsUrl:"https://developers.google.com/calendar/api/v3/reference",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/calendar"},keywords:["events","calendars","attendees","reminders","recurring","availability","free busy","settings","acl","colors","notifications","timezone","quick add","oauth"]},googleSheets:{name:"googleSheets",apiUrl:"https://sheets.googleapis.com/v4",regex:"^.*(sheets\\.googleapis|developers\\.google\\.com/sheets|sheets\\.google).*$",icon:"googlesheets",docsUrl:"https://developers.google.com/sheets/api/reference/rest",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive"},keywords:["spreadsheets","sheets","cells","ranges","values","formulas","formatting","charts","pivot tables","named ranges","protected ranges","batch update","append","oauth"]},googleAnalytics:{name:"googleAnalytics",apiUrl:"https://analytics.google.com",regex:"^.*(analytics|analyticsdata).*$",icon:"googleAnalytics",docsUrl:"https://developers.google.com/analytics/devguides/reporting/data/v1",openApiUrl:"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/analytics.edit"},keywords:["properties","dimensions","metrics","reports","audiences","conversions","events","goals","segments","real time","user activity","attribution","funnels","cohorts","oauth"]},youtube:{name:"youtube",apiUrl:"https://youtube.googleapis.com",regex:"^.*youtube.*$",icon:"youtube",docsUrl:"https://developers.google.com/youtube/v3/docs",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/youtube"},keywords:["videos","channels","playlists","comments","captions","live streams","analytics","thumbnails","subscriptions","activities","ratings","uploads","members","oauth"]},AWS:{name:"AWS",apiUrl:"https://amazonaws.com",regex:"^.*(aws|amazonaws).*$",icon:"/logos/aws.svg",docsUrl:"https://docs.aws.amazon.com/index.html",preferredAuthType:"api_key",keywords:["ec2","s3","lambda","rds","dynamodb","sqs","sns","cloudformation","iam","cloudwatch","vpc","instances","buckets","functions","api key"]},amazon_sp_api:{name:"amazon_sp_api",apiUrl:"https://sellingpartnerapi-na.amazon.com",regex:"^.*(sellingpartnerapi[-\\w]*\\.amazon\\.com).*$",icon:"/logos/amazon.svg",docsUrl:"https://developer-docs.amazon.com/sp-api/docs",preferredAuthType:"oauth2",oauth:{authUrl:"https://sellercentral.amazon.com/apps/authorize/consent",tokenUrl:"https://api.amazon.com/auth/o2/token",grant_type:"authorization_code",tokenAuthMethod:"body",tokenContentType:"form"},keywords:["orders","catalog items","listings","feeds","reports","fba inbound","fulfillment","inventory","pricing","seller central","marketplace"],systemSpecificInstructions:`Base host is region-specific: sellingpartnerapi-na.amazon.com (US/CA/MX/BR), sellingpartnerapi-eu.amazon.com (EU/UK/IN/ME/AF), sellingpartnerapi-fe.amazon.com (Singapore/AU/JP) \u2014 swap the region segment to match the seller's marketplace; sandbox testing uses sandbox.sellingpartnerapi-<region>.amazon.com. Requires registering an app in Seller Central > Develop Apps first. Third-party apps redirect sellers to https://sellercentral.amazon.com/apps/authorize/consent?application_id=<APP_ID>&state=<STATE> (add &version=beta only while the app is in Draft state, remove once Published); private/single-account developers can skip this by generating a refresh token directly via Seller Central > Develop Apps > "Authorize new developer" (self-authorization). Access tokens require header x-amz-access-token in addition to Authorization; some operations (e.g. FBA/notifications) use a separate grantless client_credentials flow instead of the refresh-token flow.`},googleCloud:{name:"googleCloud",apiUrl:"https://cloud.google.com",regex:"^.*(cloud\\.google|gcp|googlecloud).*$",icon:"googleCloud",docsUrl:"https://cloud.google.com/apis/docs/overview",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/cloud-platform"},keywords:["compute","storage","pubsub","cloud run","kubernetes","iam","vpc","cloud sql","bigtable","dataflow","logging","monitoring","oauth"]},bigquery:{name:"bigquery",apiUrl:"https://bigquery.googleapis.com/bigquery/v2",regex:"^.*(bigquery|bq\\.googleapis).*$",icon:"googleCloud",docsUrl:"https://cloud.google.com/bigquery/docs/reference/rest",openApiUrl:"https://bigquery.googleapis.com/$discovery/rest?version=v2",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/bigquery"},systemSpecificInstructions:`BigQuery REST API - Authentication Options:
|
|
395
|
+
Most list endpoints paginate with page plus rpp or limit, capped at 100 records per page. Payroll and accrual endpoints often require specific type values, paygroup filters, and pay period dates set to the first day of a confirmed month. Some payroll endpoints, including employee monthly payables and payroll transaction deletion, are available only for whitelisted organizations.`},attio:{name:"attio",apiUrl:"https://api.attio.com/v2/",regex:"^.*attio.*$",icon:"/logos/attio.svg",docsUrl:"https://docs.attio.com/rest-api/overview",openApiUrl:"https://api.attio.com/openapi/api",preferredAuthType:"api_key",keywords:["people","objects","records","lists","entries","workspace_members","notes","tasks","threads","comments","sorts","api_slug","attribute_type","record_id","workspace_id","object_id"]},twilio:{name:"twilio",apiUrl:"https://api.twilio.com",regex:"^.*twilio.*$",icon:"/logos/twilio.svg",docsUrl:"https://www.twilio.com/docs/api",openApiUrl:"https://raw.githubusercontent.com/twilio/twilio-oai/refs/heads/main/spec/json/twilio_api_v2010.json",preferredAuthType:"api_key",keywords:["Messages","Media","MessageFeedback","Calls","Accounts","APIKeys","Addresses","UsageRecords","CallFeedback","CredentialsList","TaskRouter_Workspaces","TaskRouter_Tasks","TaskRouter_Workers","TaskRouter_Activities","MessagingServices"]},sendgrid:{name:"sendgrid",apiUrl:"https://api.sendgrid.com",regex:"^.*sendgrid.*$",icon:"/logos/sendgrid.svg",docsUrl:"https://www.twilio.com/docs/sendgrid/api-reference",openApiUrl:"https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/oai.json",preferredAuthType:"api_key",keywords:["mail_send","templates","campaigns","marketing_contacts","marketing_lists","suppression_groups","global_suppressions","asm_suppressions","subusers","stats","categories","whitelabel","ips","access_settings"]},github:{name:"github",apiUrl:"https://api.github.com",regex:"^.*github.*$",icon:"github",docsUrl:"https://docs.github.com/en/rest",openApiUrl:"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",preferredAuthType:"api_key",oauth:{authUrl:"https://github.com/login/oauth/authorize",tokenUrl:"https://github.com/login/oauth/access_token",scopes:"repo user admin:org workflow gist notifications delete_repo write:packages read:packages"},keywords:["repositories","issues","pull_requests","commits","branches","tags","releases","deployments","check_runs","actions_artifacts","organizations","packages","collaborators","gists","milestones"]},gitlab:{name:"gitlab",apiUrl:"https://api.gitlab.com",regex:"^.*gitlab.*$",icon:"gitlab",docsUrl:"https://docs.gitlab.com/api/rest/",openApiUrl:"https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/openapi/openapi.yaml",preferredAuthType:"api_key",oauth:{authUrl:"https://gitlab.com/oauth/authorize",tokenUrl:"https://gitlab.com/oauth/token",scopes:"api"},keywords:["projects","repositories","issues","pull_requests","commits","branches","tags","releases","deployments","check_runs","actions_artifacts","organizations","packages","collaborators","gists","milestones"]},bitbucket:{name:"bitbucket",apiUrl:"https://api.bitbucket.org",regex:"^.*bitbucket.*$",icon:"bitbucket",docsUrl:"https://developer.atlassian.com/cloud/bitbucket/rest",openApiUrl:"https://api.bitbucket.org/swagger.json",preferredAuthType:"oauth2",oauth:{authUrl:"https://bitbucket.org/site/oauth2/authorize",tokenUrl:"https://bitbucket.org/site/oauth2/access_token",scopes:"repository:admin account:write team:write webhook"},keywords:["repositories","projects","commits","branches","pullrequests","downloads","issues","pipelines","branchRestrictions","components","milestones","refs","hooks","forks","user"]},slack:{name:"slack",apiUrl:"https://slack.com/api",regex:"^.*slack.*$",icon:"slack",docsUrl:"https://docs.slack.dev/apis/web-api/",openApiUrl:"https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",preferredAuthType:"oauth2",oauth:{grant_type:"authorization_code",authUrl:"https://slack.com/oauth/v2/authorize",tokenUrl:"https://slack.com/api/oauth.v2.access",scopes:"channels:history channels:join channels:manage channels:read channels:write.invites channels:write.topic chat:write chat:write.customize chat:write.public files:read files:write groups:history groups:read groups:write groups:write.invites im:history im:read im:write mpim:history mpim:read mpim:write reactions:read reactions:write users:read users:read.email",client_id:"7626585708593.9087382641312"},keywords:["channel","conversation","user","file","event","message","workflow_step","workflow_published","workflow_step_execute","usergroup","im","mpim","group","check_run","apps_permissions_resource"],systemSpecificInstructions:"Choose the Slack authentication model before connecting. Superglue-managed OAuth installs the superglue Slack app and returns a bot token (xoxb-). This app is pending Slack Marketplace verification: installers may see an unverified-app warning, and workspaces with app approval policies can require a Workspace Owner or admin to approve or complete the installation; on Enterprise Grid an Org Owner or app manager may be required instead. The bot token carries these scopes: channels:read, channels:history, channels:join, channels:manage, channels:write.invites, channels:write.topic, chat:write, chat:write.customize, chat:write.public, groups:read, groups:history, groups:write, groups:write.invites, im:read, im:history, im:write, mpim:read, mpim:history, mpim:write, reactions:read, reactions:write, users:read, users:read.email, files:read, files:write. A bot token can read only conversations the bot is a member of \u2014 public channels it has joined and private channels, DMs, or group DMs it has been explicitly added to \u2014 and cannot use search.messages. For workspace-wide message search, use a customer-owned Slack app with user scopes (search:read) and a user token (xoxp-); superglue's managed OAuth does not capture user tokens, so that token must be entered directly in the secure Credentials UI and never pasted into chat. A customer-owned app can also supply its own bot token when the customer prefers app-owned access, and incoming webhook URLs from a customer's own app can be used for write-only notification delivery; webhooks cannot provide conversation context. Slack OAuth scopes are additive: removing scopes from config does not revoke an existing grant; revoke and reinstall when access must be narrowed. Never post a message, upload a file, add a reaction, create or modify a channel, invite members, change a topic, or open a DM or group DM without first showing the user the exact action, destination, and content, and receiving explicit approval. Prefer the least visible action that satisfies the request: do not join channels, create channels, or message people beyond what the user asked for."},airtable:{name:"airtable",apiUrl:"https://api.airtable.com",regex:"^.*airtable.*$",icon:"airtable",docsUrl:"https://airtable.com/developers/web/api",preferredAuthType:"oauth2",oauth:{authUrl:"https://airtable.com/oauth2/v1/authorize",tokenUrl:"https://airtable.com/oauth2/v1/token",scopes:"data.recordComments:read data.recordComments:write data.records:read data.records:write schema.bases:read schema.bases:write user.email:read enterprise.groups:read data.records:manage enterprise.account:read enterprise.account:write enterprise.auditLogs:read enterprise.changeEvents:read enterprise.exports:manage enterprise.groups:manage enterprise.scim.usersAndGroups:manage enterprise.user:read enterprise.user:write webhook:manage",client_id:"02601365-de97-4191-b12d-e03c8540b03d",usePKCE:!0,tokenAuthMethod:"basic_auth",tokenContentType:"form"},keywords:["bases","tables","records","fields","views","formulas","attachments","comments","collaborators","metadata","schemas","api key","key"]},gmail:{name:"gmail",apiUrl:"https://gmail.googleapis.com/gmail/v1",regex:"^.*(gmail\\.googleapis|developers\\.google\\.com/gmail|mail\\.google).*$",icon:"gmail",docsUrl:"https://developers.google.com/gmail/api/reference/rest",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://mail.google.com/"},keywords:["messages","threads","labels","drafts","send","attachments","history","filters","settings","forwarding","inbox","profile","oauth"]},granola:{name:"granola",apiUrl:"https://public-api.granola.ai",regex:"^.*granola.*$",icon:"/logos/granola.svg",docsUrl:"https://docs.granola.ai",preferredAuthType:"api_key",keywords:["meeting","notes","transcript","summary","ai","recording"]},fathom:{name:"fathom",apiUrl:"https://api.fathom.ai/external/v1",regex:"^.*(fathom\\.ai|fathom\\.video).*$",icon:"/logos/fathom.png",docsUrl:"https://developers.fathom.ai",openApiUrl:"https://developers.fathom.ai/api-reference/openapi.yaml",preferredAuthType:"oauth2",oauth:{grant_type:"authorization_code",authUrl:"https://fathom.video/external/v1/oauth2/authorize",tokenUrl:"https://api.fathom.ai/external/v1/oauth2/token",scopes:"public_api",client_id:"NBYMQ3dZJDub0dL1X3MX7812Tjc91f-5fFcL5D3tXp4"},keywords:["meeting","meetings","notetaker","transcript","transcription","recording","summary","action items","webhook","oauth"],systemSpecificInstructions:"Fathom is an AI meeting notetaker. superglue provides a managed Fathom OAuth app, so no app registration is needed \u2014 authenticate directly via OAuth (authorization code with refresh tokens; the only scope is public_api). Alternatively, an API key created in Fathom settings works via an X-Api-Key header. Send OAuth tokens as Authorization: Bearer <<access_token>>. Webhooks must set at least one of include_transcript, include_summary, include_action_items, or include_crm_matches. Rate limits: 60 requests per 60 seconds overall, 30 per 60 seconds for transcript, summary, and content-heavy meeting requests (5 per 60 seconds under high load)."},googleDrive:{name:"googleDrive",apiUrl:"https://www.googleapis.com/drive/v3",regex:"^.*(googleapis\\.com/drive|developers\\.google\\.com/drive|drive\\.google).*$",icon:"googledrive",docsUrl:"https://developers.google.com/drive/api/v3/reference",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/drive"},keywords:["files","folders","permissions","sharing","comments","revisions","changes","uploads","downloads","metadata","teamdrives","export","copy","move","oauth"]},googleCalendar:{name:"googleCalendar",apiUrl:"https://www.googleapis.com/calendar/v3",regex:"^.*(googleapis\\.com/calendar|developers\\.google\\.com/calendar|calendar\\.google).*$",icon:"googlecalendar",docsUrl:"https://developers.google.com/calendar/api/v3/reference",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/calendar"},keywords:["events","calendars","attendees","reminders","recurring","availability","free busy","settings","acl","colors","notifications","timezone","quick add","oauth"]},googleSheets:{name:"googleSheets",apiUrl:"https://sheets.googleapis.com/v4",regex:"^.*(sheets\\.googleapis|developers\\.google\\.com/sheets|sheets\\.google).*$",icon:"googlesheets",docsUrl:"https://developers.google.com/sheets/api/reference/rest",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive"},keywords:["spreadsheets","sheets","cells","ranges","values","formulas","formatting","charts","pivot tables","named ranges","protected ranges","batch update","append","oauth"]},googleAnalytics:{name:"googleAnalytics",apiUrl:"https://analytics.google.com",regex:"^.*(analytics|analyticsdata).*$",icon:"googleAnalytics",docsUrl:"https://developers.google.com/analytics/devguides/reporting/data/v1",openApiUrl:"https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/analytics.edit"},keywords:["properties","dimensions","metrics","reports","audiences","conversions","events","goals","segments","real time","user activity","attribution","funnels","cohorts","oauth"]},youtube:{name:"youtube",apiUrl:"https://youtube.googleapis.com",regex:"^.*youtube.*$",icon:"youtube",docsUrl:"https://developers.google.com/youtube/v3/docs",openApiUrl:"https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/youtube"},keywords:["videos","channels","playlists","comments","captions","live streams","analytics","thumbnails","subscriptions","activities","ratings","uploads","members","oauth"]},AWS:{name:"AWS",apiUrl:"https://amazonaws.com",regex:"^.*(aws|amazonaws).*$",icon:"/logos/aws.svg",docsUrl:"https://docs.aws.amazon.com/index.html",preferredAuthType:"api_key",keywords:["ec2","s3","lambda","rds","dynamodb","sqs","sns","cloudformation","iam","cloudwatch","vpc","instances","buckets","functions","api key"]},amazon_sp_api:{name:"amazon_sp_api",apiUrl:"https://sellingpartnerapi-na.amazon.com",regex:"^.*(sellingpartnerapi[-\\w]*\\.amazon\\.com).*$",icon:"/logos/amazon.svg",docsUrl:"https://developer-docs.amazon.com/sp-api/docs",preferredAuthType:"oauth2",oauth:{authUrl:"https://sellercentral.amazon.com/apps/authorize/consent",tokenUrl:"https://api.amazon.com/auth/o2/token",grant_type:"authorization_code",tokenAuthMethod:"body",tokenContentType:"form"},keywords:["orders","catalog items","listings","feeds","reports","fba inbound","fulfillment","inventory","pricing","seller central","marketplace"],systemSpecificInstructions:`Base host is region-specific: sellingpartnerapi-na.amazon.com (US/CA/MX/BR), sellingpartnerapi-eu.amazon.com (EU/UK/IN/ME/AF), sellingpartnerapi-fe.amazon.com (Singapore/AU/JP) \u2014 swap the region segment to match the seller's marketplace; sandbox testing uses sandbox.sellingpartnerapi-<region>.amazon.com. Requires registering an app in Seller Central > Develop Apps first. Third-party apps redirect sellers to https://sellercentral.amazon.com/apps/authorize/consent?application_id=<APP_ID>&state=<STATE> (add &version=beta only while the app is in Draft state, remove once Published); private/single-account developers can skip this by generating a refresh token directly via Seller Central > Develop Apps > "Authorize new developer" (self-authorization). Access tokens require header x-amz-access-token in addition to Authorization; some operations (e.g. FBA/notifications) use a separate grantless client_credentials flow instead of the refresh-token flow.`},googleCloud:{name:"googleCloud",apiUrl:"https://cloud.google.com",regex:"^.*(cloud\\.google|gcp|googlecloud).*$",icon:"googleCloud",docsUrl:"https://cloud.google.com/apis/docs/overview",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/cloud-platform"},keywords:["compute","storage","pubsub","cloud run","kubernetes","iam","vpc","cloud sql","bigtable","dataflow","logging","monitoring","oauth"]},bigquery:{name:"bigquery",apiUrl:"https://bigquery.googleapis.com/bigquery/v2",regex:"^.*(bigquery|bq\\.googleapis).*$",icon:"googleCloud",docsUrl:"https://cloud.google.com/bigquery/docs/reference/rest",openApiUrl:"https://bigquery.googleapis.com/$discovery/rest?version=v2",preferredAuthType:"oauth2",oauth:{authUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",scopes:"https://www.googleapis.com/auth/bigquery"},systemSpecificInstructions:`BigQuery REST API - Authentication Options:
|
|
396
396
|
|
|
397
397
|
OPTION 1: OAuth App (Recommended)
|
|
398
398
|
If the user has or creates an OAuth app in their Google Cloud project:
|
|
@@ -1398,7 +1398,7 @@ ${s}`;break;case"retry":m5(s)&&(t[i]=s);break;case"id":l5(s)&&(t[i]=s);break;cas
|
|
|
1398
1398
|
`);o.stack=t?`${t}
|
|
1399
1399
|
${s}`:i.stack}B.exports.fetch=function(e,t=void 0){return zce(e,t).catch(a=>{throw w5?q5(a,w5):a&&typeof a=="object"&&Error.captureStackTrace(a,B.exports.fetch),a})};B.exports.Headers=Hs().Headers;B.exports.Response=Nm().Response;B.exports.Request=pn().Request;B.exports.FormData=rd().FormData;var{setGlobalOrigin:qce,getGlobalOrigin:Ece}=dy();B.exports.setGlobalOrigin=qce;B.exports.getGlobalOrigin=Ece;var{CacheStorage:Ice}=n9(),{kConstruct:Cce}=de();B.exports.caches=new Ice(Cce);var{deleteCookie:jce,getCookies:Qce,getSetCookies:Bce,setCookie:Sce,parseCookie:Dce}=k9();B.exports.deleteCookie=jce;B.exports.getCookies=Qce;B.exports.getSetCookies=Bce;B.exports.setCookie=Sce;B.exports.parseCookie=Dce;var{parseMIMEType:Rce,serializeAMimeType:Tce}=dt();B.exports.parseMIMEType=Rce;B.exports.serializeAMimeType=Tce;var{CloseEvent:Nce,ErrorEvent:Uce,MessageEvent:Mce}=qg(),{WebSocket:Oce,ping:_ce}=Z9();B.exports.WebSocket=Oce;B.exports.CloseEvent=Nce;B.exports.ErrorEvent=Uce;B.exports.MessageEvent=Mce;B.exports.ping=_ce;B.exports.WebSocketStream=r5().WebSocketStream;B.exports.WebSocketError=Lw().WebSocketError;B.exports.request=Wm(qn.request);B.exports.stream=Wm(qn.stream);B.exports.pipeline=Wm(qn.pipeline);B.exports.connect=Wm(qn.connect);B.exports.upgrade=Wm(qn.upgrade);B.exports.MockClient=dce;B.exports.MockCallHistory=gce;B.exports.MockCallHistoryLog=pce;B.exports.MockPool=fce;B.exports.MockAgent=hce;B.exports.SnapshotAgent=bce;B.exports.mockErrors=yce;var{EventSource:Fce}=A5();B.exports.EventSource=Fce;function Lce(){globalThis.fetch=B.exports.fetch,globalThis.Headers=B.exports.Headers,globalThis.Response=B.exports.Response,globalThis.Request=B.exports.Request,globalThis.FormData=B.exports.FormData,globalThis.WebSocket=B.exports.WebSocket,globalThis.CloseEvent=B.exports.CloseEvent,globalThis.ErrorEvent=B.exports.ErrorEvent,globalThis.MessageEvent=B.exports.MessageEvent,globalThis.EventSource=B.exports.EventSource}B.exports.install=Lce});var I5=y(In=>{"use strict";Object.defineProperty(In,"__esModule",{value:!0});In.SuperglueClient=In.SuperglueHttpError=void 0;var En=zt(),Pce=cb(),Hce=O2(),Yce=Vt(),Pa=zr(),Gce=pu(),Og=14400*1e3,$m;if(typeof globalThis.process<"u"&&globalThis.process.versions?.node)try{let{Agent:o}=E5();$m=new o({headersTimeout:Og,bodyTimeout:Og})}catch{}var _g=class extends Error{constructor(e,t,a,i){super(e),this.status=t,this.code=a,this.details=i,this.name="SuperglueHttpError"}};In.SuperglueHttpError=_g;var Ww=class{constructor({apiKey:e,apiEndpoint:t,onInfrastructureError:a,sseTokenProvider:i,tokenProvider:s}){if(!e&&!s)throw new Error("SuperglueClient requires either apiKey or tokenProvider");this.tokenProvider=s??(async()=>e),this.apiEndpoint=t??"https://api.superglue.cloud",this.sseManager=new Pce.SSELogSubscriptionManager(this.apiEndpoint,i??this.tokenProvider),this.onInfrastructureError=a}async getApiKey(){return this.tokenProvider()}isInfrastructureError(e){return(0,Yce.isAbortError)(e)?!1:!!(e instanceof TypeError&&e.message.toLowerCase().includes("fetch")||e instanceof Error&&e.name==="TimeoutError")}async restRequest(e,t,a,i,s){let n=await(await this.restResponse({method:e,path:t,body:a,extraHeaders:i,requestInit:s})).text();if(n)return JSON.parse(n)}async restResponse({method:e,path:t,body:a,extraHeaders:i,requestInit:s}){let r=`${this.apiEndpoint.replace(/\/$/,"")}${t}`,c={Authorization:`Bearer ${await this.getApiKey()}`,...i};a&&e!=="GET"&&(c["Content-Type"]="application/json");let m;try{m=await fetch(r,{...s,method:e,headers:c,body:a?JSON.stringify(a):void 0,signal:s?.signal??AbortSignal.timeout(Og),...$m?{dispatcher:$m}:{}})}catch(l){throw this.isInfrastructureError(l)&&this.onInfrastructureError?.(),l}if(!m.ok)throw await this.buildHttpError(m);return m}async buildHttpError(e){e.status>=500&&this.onInfrastructureError?.();let t=await e.text(),a=`HTTP ${e.status}: ${t}`,i,s;try{let r=JSON.parse(t);r&&typeof r=="object"&&!Array.isArray(r)&&(s=r),typeof r?.code=="string"&&(i=r.code);let n=r.error;typeof n=="string"?a=n:n&&typeof n=="object"&&(a=n.message||JSON.stringify(n))}catch{}return new _g(a,e.status,i,s)}async streamRequest(e,t,a){let i=e.includes("?")?"&":"?",s=`${this.apiEndpoint.replace(/\/$/,"")}${e}${i}stream=true`,n={Authorization:`Bearer ${await this.getApiKey()}`,Accept:"text/event-stream","Content-Type":"application/json"},c;try{c=await fetch(s,{method:"POST",headers:n,body:JSON.stringify(t),signal:a??AbortSignal.timeout(Og),...$m?{dispatcher:$m}:{}})}catch(l){throw this.isInfrastructureError(l)&&this.onInfrastructureError?.(),l}if(!c.ok)throw await this.buildHttpError(c);if(!(c.headers.get("content-type")||"").includes("text/event-stream")){let l=await c.text();return l?JSON.parse(l):void 0}try{return await(0,Hce.consumeEventStreamResult)(c)}catch(l){throw this.isInfrastructureError(l)&&this.onInfrastructureError?.(),l}}async subscribeToLogsSSE(e={}){return this.sseManager.subscribeToLogs(e)}async disconnect(){await this.sseManager.disconnect()}async getMe(){return this.restRequest("GET","/v1/me")}async runTool(e){let t=await this.restRequest("POST",`/v1/tools/${encodeURIComponent(e.toolId)}/run`,{inputs:e.payload,files:e.files,credentials:e.credentials,includeStepResultData:e.includeStepResultData,options:e.options,runId:e.runId,stateFixture:e.stateFixture},void 0,e.signal?{signal:e.signal}:void 0);return{success:t.status==="success",data:t.data,error:t.error,tool:t.tool,stepResults:t.stepResults?.map(a=>({...a}))||[],...t.fileArtifacts&&t.fileArtifacts.length>0?{fileArtifacts:t.fileArtifacts}:{},...t.metadata?.warnings?.length?{warnings:t.metadata.warnings}:{}}}async runToolConfig(e){let t=e.createRun?"/v1/tools/run?createRun=true":"/v1/tools/run",a=await this.restRequest("POST",t,{tool:e.tool,payload:e.payload,files:e.files,credentials:e.credentials,includeStepResultData:e.includeStepResultData,options:e.options,runId:e.runId,stateFixture:e.stateFixture,executionKind:e.executionKind,parentToolId:e.parentToolId,draftId:e.draftId},e.traceId?{"X-Trace-Id":e.traceId}:void 0,e.signal?{signal:e.signal}:void 0);return{success:a.status?a.status==="success":a.success??!1,data:a.data,error:a.error,tool:a.tool||e.tool,stepResults:a.stepResults?.map(s=>({...s}))||[],...a.fileArtifacts&&a.fileArtifacts.length>0?{fileArtifacts:a.fileArtifacts}:{},...a.metadata?.warnings?.length?{warnings:a.metadata.warnings}:{}}}async abortToolExecution(e){return{success:!0,runId:(await this.restRequest("POST",`/v1/runs/${encodeURIComponent(e)}/cancel`)).runId}}async executeStep({step:e,payload:t,files:a,previousResults:i,credentials:s,options:r,runId:n,systemIds:c,createRun:m,parentToolId:l,stepIndex:u,stepId:d,signal:g,stream:p}){let b={step:e,payload:t,files:a,previousResults:i,credentials:s,options:r,runId:n,systemIds:c,createRun:m,parentToolId:l,stepIndex:u,stepId:d};return p?this.streamRequest("/v1/tools/step/run",b,g):this.restRequest("POST","/v1/tools/step/run",b,void 0,g?{signal:g}:void 0)}async abortStep(e){return this.restRequest("POST","/v1/tools/step/abort",{runId:e})}async executeTransformOnly({outputTransform:e,outputSchema:t,inputSchema:a,payload:i,files:s,stepResults:r,options:n,runId:c,createRun:m,parentToolId:l,stepId:u,signal:d,stream:g}){let p={outputTransform:e,outputSchema:t,inputSchema:a,payload:i,files:s,stepResults:r,options:n,runId:c,createRun:m,parentToolId:l,stepId:u};return g?this.streamRequest("/v1/tools/transform/run",p,d):this.restRequest("POST","/v1/tools/transform/run",p,void 0,d?{signal:d}:void 0)}async createRun({toolId:e,toolConfig:t,toolResult:a,stepResults:i,toolPayload:s,status:r,error:n,startedAt:c,completedAt:m,executionKind:l,parentToolId:u,draftId:d}){return this.restRequest("POST","/v1/runs",{toolId:e,toolConfig:t,toolResult:a,stepResults:i,toolPayload:s,status:r,error:n,startedAt:(0,Pa.toUTCISOString)(c,"run.startedAt"),completedAt:(0,Pa.toUTCISOString)(m,"run.completedAt"),executionKind:l,parentToolId:u,draftId:d})}async checkRunLimit(){return(await this.restRequest("POST","/v1/runs/check-limit")).data}async extract({file:e,envelope:t}){if(!e)throw new Error("File must be provided for extract.");let a=new FormData;a.append("file",e);let i=new URL(`${this.apiEndpoint.replace(/\/$/,"")}/v1/extract`);t&&i.searchParams.set("envelope","true");let s=i.toString(),r=await this.getApiKey(),n=await fetch(s,{method:"POST",headers:{Authorization:`Bearer ${r}`},body:a});if(!n.ok){let c=await n.text(),m=`HTTP ${n.status}: ${c}`;try{let l=JSON.parse(c);l.error&&(m=l.error)}catch{}throw new Error(m)}return n.json()}mapOpenAPIRunToRun(e){let t={running:En.RunStatus.RUNNING,success:En.RunStatus.SUCCESS,failed:En.RunStatus.FAILED,aborted:En.RunStatus.ABORTED};return{runId:e.runId??e.id,toolId:e.toolId,tool:e.tool,systemIds:e.systemIds,status:t[e.status]??En.RunStatus.FAILED,toolPayload:e.toolPayload,data:e.data,toolResult:e.data,error:e.error,stepResults:e.stepResults,options:e.options,requestSource:e.requestSource,traceId:e.traceId,resultStorageUri:e.resultStorageUri,userId:e.userId,userEmail:e.userEmail,userName:e.userName,metadata:{...e.metadata,executionKind:e.metadata?.executionKind??En.RunExecutionKind.FULL},fileArtifacts:e.fileArtifacts}}mapOpenAPIScheduleToToolSchedule(e){return{...e,lastRunAt:e.lastRunAt?(0,Pa.requireUTCDate)(e.lastRunAt,"schedule.lastRunAt"):void 0,nextRunAt:(0,Pa.requireUTCDate)(e.nextRunAt,"schedule.nextRunAt"),createdAt:(0,Pa.requireUTCDate)(e.createdAt,"schedule.createdAt"),updatedAt:(0,Pa.requireUTCDate)(e.updatedAt,"schedule.updatedAt")}}async listRuns(e){let{limit:t=100,page:a=1,toolId:i,search:s,searchUserIds:r,includeTotal:n=!0,startedAfter:c,status:m,requestSources:l,executionKinds:u,userId:d,systemId:g,signal:p}=e??{},b=new URLSearchParams({limit:String(t),page:String(a)});i&&b.set("toolId",i),s?.trim()&&b.set("search",s.trim()),r&&r.length>0&&b.set("searchUserIds",r.join(",")),n||b.set("includeTotal","false"),c&&b.set("startedAfter",c instanceof Date?(0,Pa.toUTCISOString)(c,"run.startedAfter"):c),m&&b.set("status",m),l&&l.length>0&&b.set("requestSources",l.join(",")),u&&u.length>0&&b.set("executionKinds",u.join(",")),d&&b.set("userId",d),g&&b.set("systemId",g);let w=await this.restRequest("GET",`/v1/runs?${b.toString()}`,void 0,void 0,{signal:p});return{items:w.data.map(k=>this.mapOpenAPIRunToRun(k)),total:w.total,page:w.page,limit:w.limit,hasMore:w.hasMore}}async getActivityCounts(e){let t=new URLSearchParams;e?.from&&t.set("from",e.from instanceof Date?(0,Pa.toUTCISOString)(e.from,"activity.from"):e.from),e?.to&&t.set("to",e.to instanceof Date?(0,Pa.toUTCISOString)(e.to,"activity.to"):e.to);let a=t.toString();return(await this.restRequest("GET",`/v1/activity/counts${a?`?${a}`:""}`,void 0,void 0,{signal:e?.signal})).counts}async getRun(e){try{let t=await this.restRequest("GET",`/v1/runs/${encodeURIComponent(e)}`);return this.mapOpenAPIRunToRun(t)}catch(t){if(t.message?.includes("404")||t.message?.includes("not found"))return null;throw t}}async getTool(e){try{return await this.restRequest("GET",`/v1/tools/${encodeURIComponent(e)}`)}catch(t){if(t.message?.includes("404")||t.message?.includes("not found")||t.message?.includes("403")||t.message?.includes("not allowed"))return null;throw t}}async getToolState(e){return(await this.restRequest("GET",`/v1/tools/${encodeURIComponent(e)}/state`)).state}async setToolState(e,t){await this.restRequest("PUT",`/v1/tools/${encodeURIComponent(e)}/state`,{state:t})}async deleteToolState(e){return(await this.restRequest("DELETE",`/v1/tools/${encodeURIComponent(e)}/state`)).deletedKeys}async archiveTool(e,t=!0){return this.updateTool(e,{archived:t})}async bulkArchiveTools(e,t=!0){return this.restRequest("POST","/v1/tools/bulk/archive",{ids:e,archived:t})}async bulkDeleteTools(e){return this.restRequest("POST","/v1/tools/bulk/delete",{ids:e})}async listTools(e=10,t=0,a=!1){let i=Math.floor(t/e)+1,s=a?"&includeArchived=true":"",r=await this.restRequest("GET",`/v1/tools?limit=${e}&page=${i}${s}`);return{items:r.data,total:r.total}}async createTool(e,t){return this.restRequest("POST","/v1/tools",{...t,id:e})}async updateTool(e,t){return this.restRequest("PUT",`/v1/tools/${encodeURIComponent(e)}`,t)}async deleteTool(e){try{return await this.restRequest("DELETE",`/v1/tools/${encodeURIComponent(e)}`),!0}catch(t){if(t.message?.includes("404"))return!1;throw t}}async renameTool(e,t){return this.restRequest("POST",`/v1/tools/${encodeURIComponent(e)}/rename`,{newId:t})}async getWorkflow(e){return this.getTool(e)}async archiveWorkflow(e,t=!0){return this.upsertWorkflow(e,{archived:t})}async listWorkflows(e=10,t=0,a=!1){return this.listTools(e,t,a)}async createWorkflow(e,t){return this.createTool(e,t)}async updateWorkflow(e,t){return this.updateTool(e,t)}async upsertWorkflow(e,t){return await this.getTool(e)?this.updateTool(e,t):this.createTool(e,t)}async deleteWorkflow(e){return this.deleteTool(e)}async renameWorkflow(e,t){return this.renameTool(e,t)}async listToolSchedules(e){if(e&&typeof e=="object")return this.listToolSchedulesPage(e);let t=[],a=typeof e=="string"?e:void 0,i=1;for(;;){let s=await this.listToolSchedulesPage({toolId:a,limit:1e3,page:i});if(t.push(...s.items),!s.hasMore||s.items.length===0)break;i+=1}return t}async listToolSchedulesPage(e){let{toolId:t,limit:a=100,page:i=1}=e??{},s=new URLSearchParams({limit:String(a),page:String(i)}),r=t?`/v1/tools/${encodeURIComponent(t)}/schedules?${s.toString()}`:`/v1/schedules?${s.toString()}`,n=await this.restRequest("GET",r);return{items:n.data.map(c=>this.mapOpenAPIScheduleToToolSchedule(c)),total:n.total,page:n.page,limit:n.limit,hasMore:n.hasMore}}async getToolSchedule(e,t){try{let a=await this.restRequest("GET",`/v1/tools/${encodeURIComponent(e)}/schedules/${encodeURIComponent(t)}`);return this.mapOpenAPIScheduleToToolSchedule(a)}catch(a){if(a.message?.includes("404")||a.message?.includes("not found"))return null;throw a}}async createToolSchedule(e,t){let a=await this.restRequest("POST",`/v1/tools/${encodeURIComponent(e)}/schedules`,{...t,timezone:t.timezone||(0,Gce.getRuntimeTimezone)()});return this.mapOpenAPIScheduleToToolSchedule(a)}async updateToolSchedule(e,t,a){let i=await this.restRequest("PUT",`/v1/tools/${encodeURIComponent(e)}/schedules/${encodeURIComponent(t)}`,a);return this.mapOpenAPIScheduleToToolSchedule(i)}async deleteToolSchedule(e,t){return await this.restRequest("DELETE",`/v1/tools/${encodeURIComponent(e)}/schedules/${encodeURIComponent(t)}`),!0}async bulkSetSchedulesEnabled(e,t){return this.restRequest("POST","/v1/schedules/bulk/enable",{ids:e,enabled:t})}async bulkDeleteSchedules(e){return this.restRequest("POST","/v1/schedules/bulk/delete",{ids:e})}async listCredentials(e){let t=new URLSearchParams;e?.systemId&&t.set("systemId",e.systemId);let a=t.toString();return(await this.restRequest("GET",`/v1/credentials${a?`?${a}`:""}`)).data.items}async createCredentials(e){return(await this.restRequest("POST","/v1/credentials",e)).data}async replaceCredentials(e,t){return(await this.restRequest("PUT",`/v1/credentials/${encodeURIComponent(e)}`,{credentials:t})).data}async updateCredentials(e,t){return(await this.restRequest("PATCH",`/v1/credentials/${encodeURIComponent(e)}`,t)).data}async deleteCredentials(e){await this.restRequest("DELETE",`/v1/credentials/${encodeURIComponent(e)}`)}async setDefaultCredentials(e){await this.restRequest("POST",`/v1/credentials/${encodeURIComponent(e)}/default`)}async listSystems(e=10,t=1){let a=new URLSearchParams({limit:String(e),page:String(t)}),i=await this.restRequest("GET",`/v1/systems?${a.toString()}`);return{items:i.data,total:i.total}}async getSystem(e){return(await this.restRequest("GET",`/v1/systems/${encodeURIComponent(e)}`)).data}async createSystem(e){return(await this.restRequest("POST","/v1/systems",e)).data}async updateSystem(e,t){return(await this.restRequest("PATCH",`/v1/systems/${encodeURIComponent(e)}`,t)).data}async deleteSystem(e){return await this.restRequest("DELETE",`/v1/systems/${encodeURIComponent(e)}`),!0}async bulkDeleteSystems(e){return this.restRequest("POST","/v1/systems/bulk/delete",{ids:e})}async createOAuthExchange(e){return(await this.restRequest("POST","/v1/oauth/exchanges",e)).data}async completeOAuthExchange(e,t){return(await this.restRequest("POST",`/v1/oauth/exchanges/${encodeURIComponent(e)}/complete`,t)).data}async searchSystemDocumentation(e,t){return(await this.restRequest("POST",`/v1/systems/${encodeURIComponent(e)}/documentation/search`,{keywords:t})).data}async triggerSystemDocumentationScrapeJob(e,t){return(await this.restRequest("POST",`/v1/systems/${encodeURIComponent(e)}/documentation/scrape`,t)).data}async fetchOpenApiSpec(e,t,a){return(await this.restRequest("POST",`/v1/systems/${encodeURIComponent(e)}/documentation/openapi`,{url:t,link:a?.link})).data}async createSystemDocumentationFileUploadUrls(e,t,a){return(await this.restRequest("POST",`/v1/systems/${encodeURIComponent(e)}/documentation/files`,{files:t.map(s=>({fileName:s.fileName,metadata:{contentType:s.contentType,contentLength:s.contentLength}})),link:a?.link})).data.files}async uploadSystemDocumentationFiles(e,t,a){if(t.length===0)return[];let i=await this.createSystemDocumentationFileUploadUrls(e,t.map(n=>({fileName:n.fileName,contentType:n.contentType,contentLength:n.contentLength})),{link:a?.link}),r=(await Promise.allSettled(i.map(async(n,c)=>{let m=t[c],l=await fetch(n.uploadUrl,{method:"PUT",body:m.content,headers:m.contentType?{"Content-Type":m.contentType}:void 0});if(!l.ok)throw new Error(`Upload failed for ${m.fileName}: ${l.status} ${l.statusText}`);return this.completeSystemDocumentationFileUpload(e,n.id).catch(()=>{}),n.id}))).map((n,c)=>{let m=t[c],l=i[c].id;return n.status==="fulfilled"?{id:l,fileName:m.fileName,contentLength:m.contentLength,status:"uploaded"}:(this.deleteSystemDocumentationFile(e,l).catch(()=>{}),{id:l,fileName:m.fileName,contentLength:m.contentLength,status:"failed",error:n.reason instanceof Error?n.reason.message:"Upload failed"})});if(!a?.settle){let n=r.filter(c=>c.status==="failed");if(n.length>0)throw new Error(n.map(c=>c.error).join("; "))}return r}async completeSystemDocumentationFileUpload(e,t){return this.restRequest("POST",`/v1/systems/${encodeURIComponent(e)}/documentation/files/${encodeURIComponent(t)}/complete`)}async listSystemDocumentationFiles(e,t){let a=new URLSearchParams;t?.length&&a.set("fileIds",t.join(","));let i=a.size>0?`?${a.toString()}`:"";return(await this.restRequest("GET",`/v1/systems/${encodeURIComponent(e)}/documentation/files${i}`)).data}async getSystemDocumentationFileContent(e,t){return(await this.restRequest("GET",`/v1/systems/${encodeURIComponent(e)}/documentation/files/${encodeURIComponent(t)}/content`)).data}async deleteSystemDocumentationFile(e,t){await this.restRequest("DELETE",`/v1/systems/${encodeURIComponent(e)}/documentation/files/${encodeURIComponent(t)}`)}async generateCredentialsLink(e){try{return{success:!0,credentialsUrl:(await this.restRequest("POST","/v1/authenticate",e||{})).data.credentialsUrl}}catch(t){return{success:!1,error:t.message}}}};In.SuperglueClient=Ww});var j5=y(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.UnquotedKeyStrategy=Ce.TripleQuoteStrategy=Ce.TrailingCommaStrategy=Ce.SingleQuoteStrategy=Ce.PythonLiteralStrategy=Ce.CommentStrategy=Ce.ResilientJsonParser=Ce.RepairStrategy=void 0;Ce.parseJsonResilient=Vce;Ce.parseJSON=Wce;Ce.isValidJson=$ce;Ce.prettyPrintJson=Jce;Ce.minifyJson=Kce;var _t=class{validate(e){try{return JSON.parse(e),!0}catch{return!1}}};Ce.RepairStrategy=_t;var Fg=class extends _t{constructor(){super(...arguments),this.name="TripleQuoteRepair",this.description="Converts triple-quoted strings to proper JSON, parsing nested JSON content"}canApply(e){return/"""/.test(e)}apply(e){return e.replace(/"""([\s\S]*?)"""/g,(t,a)=>{let i=a.trim();if(i.startsWith("{")&&i.endsWith("}")||i.startsWith("[")&&i.endsWith("]"))try{let r=JSON.parse(i);return JSON.stringify(r)}catch{return`"${a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`}return`"${a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t")}"`})}};Ce.TripleQuoteStrategy=Fg;var Lg=class extends _t{constructor(){super(...arguments),this.name="PythonLiteralRepair",this.description="Converts Python literals to JavaScript equivalents"}canApply(e){return/\b(None|True|False)\b/.test(e)}apply(e){return e.replace(/\bNone\b/g,"null").replace(/\bTrue\b/g,"true").replace(/\bFalse\b/g,"false")}};Ce.PythonLiteralStrategy=Lg;var Pg=class extends _t{constructor(){super(...arguments),this.name="TrailingCommaRepair",this.description="Removes trailing commas from objects and arrays"}canApply(e){return/,\s*[}\]]/.test(e)}apply(e){return e.replace(/,(\s*[}\]])/g,"$1")}};Ce.TrailingCommaStrategy=Pg;var Hg=class extends _t{constructor(){super(...arguments),this.name="SingleQuoteRepair",this.description="Converts single quotes to double quotes"}canApply(e){return/[{,]\s*'[^']*'\s*:/.test(e)||/:\s*'[^']*'/.test(e)}apply(e){let t=e.replace(/([{,]\s*)'([^']+)'(\s*:)/g,'$1"$2"$3');return t=t.replace(/(:\s*)'([^']+)'(\s*[,}])/g,'$1"$2"$3'),t}};Ce.SingleQuoteStrategy=Hg;var Yg=class extends _t{constructor(){super(...arguments),this.name="UnquotedKeyRepair",this.description="Adds quotes to unquoted object keys"}canApply(e){return/[{,]\s*[a-zA-Z_$][a-zA-Z0-9_$]*\s*:/.test(e)}apply(e){return e.replace(/([{,]\s*)([a-zA-Z_$][a-zA-Z0-9_$]*)(\s*:)/g,'$1"$2"$3')}};Ce.UnquotedKeyStrategy=Yg;var Gg=class extends _t{constructor(){super(...arguments),this.name="CommentRemoval",this.description="Removes JavaScript-style comments"}canApply(e){return/\/\/.*$|\/\*[\s\S]*?\*\//m.test(e)}apply(e){let t=e.replace(/\/\/.*$/gm,"");return t=t.replace(/\/\*[\s\S]*?\*\//g,""),t}};Ce.CommentStrategy=Gg;var $w=class extends _t{constructor(){super(...arguments),this.name="UnescapedControlCharactersRepair",this.description="Escapes unescaped control characters (newlines, tabs, etc.) in JSON strings"}canApply(e){try{return JSON.parse(e),!1}catch(t){let a=t.message||"";return a.includes("control character")||a.includes("Bad control")||a.includes("Unexpected token")&&/[\n\r\t]/.test(e)}}apply(e){let t="",a=!1,i=!1;for(let s=0;s<e.length;s++){let r=e[s],n=s>0?e[s-1]:"";if(i){t+=r,i=!1;continue}if(r==="\\"&&a){t+=r,i=!0;continue}if(r==='"'&&n!=="\\"){a=!a,t+=r;continue}if(a)switch(r){case`
|
|
1400
1400
|
`:t+="\\n";break;case"\r":t+="\\r";break;case" ":t+="\\t";break;case"\b":t+="\\b";break;case"\f":t+="\\f";break;default:let c=r.charCodeAt(0);c<32?t+="\\u"+("0000"+c.toString(16)).slice(-4):t+=r}else t+=r}return t}},Jw=class extends _t{constructor(){super(...arguments),this.name="TrailingCharactersRepair",this.description="Removes trailing characters after valid JSON structure"}canApply(e){let t=e.trim();if(!t.startsWith("{")&&!t.startsWith("["))return!1;let a=0,i=0,s=!1,r=!1;for(let n=0;n<t.length;n++){let c=t[n];if(s)r?r=!1:c==="\\"?r=!0:c==='"'&&(s=!1);else if(c==='"')s=!0;else if(c==="{")a++;else if(c==="}"){if(a--,a===0&&i===0&&n>0&&n<t.length-1)return!0}else if(c==="[")i++;else if(c==="]"&&(i--,i===0&&a===0&&n>0&&n<t.length-1))return!0}return!1}apply(e){let t=e.trim(),a=0,i=0,s=!1,r=!1,n=-1;for(let c=0;c<t.length;c++){let m=t[c];if(s)r?r=!1:m==="\\"?r=!0:m==='"'&&(s=!1);else if(m==='"')s=!0;else if(m==="{")a++;else if(m==="}"){if(a--,a===0&&i===0&&c>0){n=c;break}}else if(m==="[")i++;else if(m==="]"&&(i--,i===0&&a===0&&c>0)){n=c;break}}return n>0&&n<t.length-1?t.substring(0,n+1):e}},Cn=class{constructor(e={}){this.strategies=[],this.repairLog=[],this.options={attemptRepair:!0,maxDepth:10,preserveStringsOnFailure:!1,logRepairs:!1,...e},this.initializeDefaultStrategies(),e.customStrategies&&this.strategies.push(...e.customStrategies)}initializeDefaultStrategies(){this.strategies=[new Fg,new Hg,new $w,new Jw,new Lg,new Pg,new Yg,new Gg]}parse(e){let t=Date.now();this.repairLog=[];let a=e instanceof Buffer?e.toString("utf8"):String(e);try{return{success:!0,data:JSON.parse(a),metadata:{parseTime:Date.now()-t,strategiesApplied:[]}}}catch(r){if(!this.options.attemptRepair)return{success:!1,error:`JSON parse error: ${r}`,metadata:{parseTime:Date.now()-t}}}let i=a,s=[];for(let r of this.strategies)if(r.canApply(i)){let n=i;if(i=r.apply(i),n!==i){s.push(r.name),this.repairLog.push(r.description),this.options.logRepairs&&console.log(`Applied ${r.name}: ${r.description}`);try{return{success:!0,data:JSON.parse(i),repairs:this.repairLog,metadata:{parseTime:Date.now()-t,strategiesApplied:s}}}catch{}}}try{return{success:!0,data:JSON.parse(i),repairs:this.repairLog,metadata:{parseTime:Date.now()-t,strategiesApplied:s}}}catch(r){let n=this.aggressiveFallback(i);return n.success?{...n,repairs:[...this.repairLog,"Applied aggressive fallback"],metadata:{parseTime:Date.now()-t,strategiesApplied:[...s,"AggressiveFallback"]}}:{success:!1,error:`Failed to parse JSON after applying ${s.length} strategies: ${r}`,repairs:this.repairLog,metadata:{parseTime:Date.now()-t,strategiesApplied:s}}}}aggressiveFallback(e){try{let t=e.indexOf("{"),a=e.indexOf("[");if(t===-1&&a===-1)return{success:!1,error:"No JSON-like structure found"};let i=t===-1?a:a===-1?t:Math.min(t,a),s=e.substring(i);for(let n of this.strategies)n.canApply(s)&&(s=n.apply(s));return{success:!0,data:JSON.parse(s)}}catch(t){return{success:!1,error:`Aggressive fallback failed: ${t}`}}}addStrategy(e){this.strategies.push(e)}removeStrategy(e){this.strategies=this.strategies.filter(t=>t.name!==e)}getStrategies(){return this.strategies.map(e=>e.name)}};Ce.ResilientJsonParser=Cn;var C5=new Cn;function Vce(o,e){return(e?new Cn(e):C5).parse(o)}function Wce(o){let e=C5.parse(o);if(e.success)return e.repairs&&e.repairs.length>0&&console.log("JSON parsed with repairs:",e.repairs),e.data;throw new Error(`Failed to parse JSON: ${e.error}`)}function $ce(o){try{return JSON.parse(o),!0}catch{return!1}}function Jce(o,e=2){return JSON.stringify(o,null,e)}function Kce(o){let t=new Cn().parse(o);if(t.success)return JSON.stringify(t.data);throw new Error("Cannot minify invalid JSON")}});var wt=y(H=>{"use strict";var Zce=H&&H.__createBinding||(Object.create?(function(o,e,t,a){a===void 0&&(a=t);var i=Object.getOwnPropertyDescriptor(e,t);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(o,a,i)}):(function(o,e,t,a){a===void 0&&(a=t),o[a]=e[t]})),ee=H&&H.__exportStar||function(o,e){for(var t in o)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Zce(e,o,t)};Object.defineProperty(H,"__esModule",{value:!0});H.SSELogSubscriptionManager=H.SuperglueHttpError=H.SuperglueClient=void 0;ee(G1(),H);ee(eE(),H);ee(sE(),H);ee(mE(),H);ee(Rc(),H);ee(qE(),H);ee(EE(),H);ee(IE(),H);ee(CE(),H);ee(jE(),H);ee(QE(),H);ee(BE(),H);ee(DE(),H);ee(RE(),H);ee(NE(),H);ee(gl(),H);ee(ME(),H);ee(OE(),H);ee(FE(),H);ee(HE(),H);ee(GE(),H);ee(ZE(),H);ee(e2(),H);ee(t2(),H);ee(p2(),H);ee(f2(),H);ee(Zf(),H);ee(E2(),H);ee(sb(),H);ee(Q2(),H);ee(R2(),H);ee(N2(),H);ee(zt(),H);ee(Vt(),H);ee(U2(),H);ee(M2(),H);ee(Iu(),H);ee(zr(),H);ee(pu(),H);var Q5=I5();Object.defineProperty(H,"SuperglueClient",{enumerable:!0,get:function(){return Q5.SuperglueClient}});Object.defineProperty(H,"SuperglueHttpError",{enumerable:!0,get:function(){return Q5.SuperglueHttpError}});var Xce=cb();Object.defineProperty(H,"SSELogSubscriptionManager",{enumerable:!0,get:function(){return Xce.SSELogSubscriptionManager}});ee(j5(),H)});var zp=require("commander");var So=$(require("fs")),D5=$(require("os")),Ha=$(require("path")),Jm=$(wt()),B5=new Set(["runner","builder","admin"]),S5={output:{mode:"stdout",directory:".superglue/output"},preset:"admin"};function Ya(o){let e=Ha.join(process.cwd(),".superglue"),t=D5.homedir();if(!t)return e;let a=Ha.join(t,".superglue");return o===!0?e:o===!1?a:So.existsSync(Ha.join(e,"config.json"))?e:a}function Kw(o){return Ha.join(Ya(o),"config.json")}function Vg(o){let e=Kw(o);if(!So.existsSync(e))return{};try{return JSON.parse(So.readFileSync(e,"utf-8"))}catch{return{}}}function jn(o){let e=Vg(),t=o.apiKey||(0,Jm.readProcessEnvironmentValue)("SUPERGLUE_API_KEY")||e.apiKey||"",a=o.endpoint||(0,Jm.readProcessEnvironmentValue)("SUPERGLUE_API_ENDPOINT")||e.endpoint||"https://api.superglue.cloud",i=(0,Jm.readProcessEnvironmentValue)("SUPERGLUE_WEB_ENDPOINT")||e.webEndpoint||a.replace(/:3002\b/,":3001").replace(/api\.superglue/,"app.superglue"),s=(0,Jm.readProcessEnvironmentValue)("SUPERGLUE_CLI_PRESET"),r=s&&B5.has(s)?s:e.preset&&B5.has(e.preset)?e.preset:"admin";return{...S5,...e,apiKey:t,endpoint:a,webEndpoint:i,preset:r,output:{...S5.output,...e.output}}}function Wg(o,e){let t=Ya(e);So.existsSync(t)||So.mkdirSync(t,{recursive:!0}),So.writeFileSync(Ha.join(t,"config.json"),JSON.stringify(o,null,2)+`
|
|
1401
|
-
`,{mode:384})}function $g(o,e){let t=Ha.join(Ya(e),"drafts");if(So.existsSync(t)||So.mkdirSync(t,{recursive:!0}),o.output.mode==="stdout+file"){let a=Ha.resolve(o.output.directory);So.existsSync(a)||So.mkdirSync(a,{recursive:!0})}}var iv=$(wt());var Zw=$(require("readline"));var N5=require("child_process"),U5=require("util");var R5={name:"@superglue/cli",version:"1.1.
|
|
1401
|
+
`,{mode:384})}function $g(o,e){let t=Ha.join(Ya(e),"drafts");if(So.existsSync(t)||So.mkdirSync(t,{recursive:!0}),o.output.mode==="stdout+file"){let a=Ha.resolve(o.output.directory);So.existsSync(a)||So.mkdirSync(a,{recursive:!0})}}var iv=$(wt());var Zw=$(require("readline"));var N5=require("child_process"),U5=require("util");var R5={name:"@superglue/cli",version:"1.1.52",bin:{sg:"./dist/cli.js"},files:[".claude-plugin/","dist/","skills/","LICENSE"],dependencies:{commander:"15.0.0-0","fast-json-patch":"3.1.1"},devDependencies:{"@superglue/shared":"file:../shared","@types/node":"25.5.0",tsup:"8.5.1",typescript:"5.8.3"},scripts:{build:"tsup && (cp -r skills dist/ 2>/dev/null || true)",dev:"tsup --watch","type-check":"tsc --noEmit",prepublishOnly:"npm run build"},publishConfig:{access:"public"}};var ome=(0,U5.promisify)(N5.exec),Ao=R5.version;function T5(o){let e=o.match(/^(\d+)(?:-(.+))?$/);return e?{numeric:parseInt(e[1],10),prerelease:e[2]||null}:{numeric:0,prerelease:o}}function Kg(o,e){let t=o.split("."),a=e.split("."),i=Math.max(t.length,a.length);for(let s=0;s<i;s++){let r=T5(t[s]||"0"),n=T5(a[s]||"0");if(r.numeric<n.numeric)return-1;if(r.numeric>n.numeric||r.prerelease===null&&n.prerelease!==null)return 1;if(r.prerelease!==null&&n.prerelease===null)return-1;if(r.prerelease!==null&&n.prerelease!==null){if(r.prerelease<n.prerelease)return-1;if(r.prerelease>n.prerelease)return 1}}return 0}async function Zg(){try{let o=await fetch("https://registry.npmjs.org/@superglue/cli/latest",{signal:AbortSignal.timeout(5e3)});return o.ok&&(await o.json()).version||null}catch{return null}}var Jg=null;function M5(){Y()&&(Jg=Zg())}async function O5(){if(!(!Y()||!Jg)){try{let o=new Promise(t=>{setTimeout(()=>t(null),2e3).unref()}),e=await Promise.race([Jg,o]);e&&Kg(Ao,e)<0&&(console.error(""),console.error(`${h.cyan}${h.bold} Update available: ${Ao} \u2192 ${e}${h.reset}`),console.error(`${h.cyan} Run ${h.bold}sg update${h.reset}${h.cyan} to upgrade${h.reset}`),console.error(""))}catch{}Jg=null}}async function _5(){let o=await Zg();if(!o)return{success:!1,message:"Could not fetch latest version from npm"};if(Kg(Ao,o)>=0)return{success:!0,message:`Already on latest version (${Ao})`};try{return await ome("npm install -g @superglue/cli@latest"),{success:!0,message:`Updated from ${Ao} to ${o}`}}catch(e){return{success:!1,message:`Update failed: ${e.message}. Try manually: npm install -g @superglue/cli@latest`}}}var Y=()=>process.argv.includes("--table")&&process.stdout.isTTY,vt=()=>process.argv.includes("--full"),h={reset:"\x1B[0m",bold:"\x1B[1m",dim:"\x1B[2m",italic:"\x1B[3m",underline:"\x1B[4m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",gray:"\x1B[90m",bgRed:"\x1B[41m",bgGreen:"\x1B[42m",bgYellow:"\x1B[43m",bgBlue:"\x1B[44m",bgMagenta:"\x1B[45m",bgCyan:"\x1B[46m"};function F5(o,e){let t=e||o;return`\x1B]8;;${o}\x07${h.underline}${h.cyan}${t}${h.reset}\x1B]8;;\x07`}function L5(){if(!Y())return;let o=h.reset,e=h.dim,t="\x1B[47;30m",a=[" #@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@- "," =@@@- @@@@ "," @@@ @@% "," -@@ @@@@= @@@ @@@ @@@@@#@ @@@@@@@ @@@@@@@ @@@@@@ @@@ @@@ @@@ @@@@@@* %@@ "," @@ @@@ *@ @@@ @@@ @@@ :@@ @@@ @@@ -@@ @@@ @% @@@ @@@ @@@ @@* @@# "," #@@ @@@# @@@ @@@ @@@ :@@ @@@ @@@ -@@ @@@ @@@ @@@ @@@ @@* @@ "," @@- @@@@= @@@ @@@ @@@@@@@ @@@@@@ @@@@@@@ @@@ @@% @@@ @@@ @@@ @@@@@. @@."," #@% .@@@@ @@@ @@@ @@@ @@@ @@@ -@@ @@@ @@% @@@ @@@ @@@ @@* @@ "," @@ @ @@@ @@@ @@@ @@@ @@@ @@@ -@@ @@@ @@% @@@ @@@ @@@ @@* *@@ "," -@@ @@@@= @@@@@@ @@@ @@@@@@@ @@@ -@@ @@@@@@ @@@@@@% @@@@@@. @@@@@@* #@@ "," :@@* @@@ "," %@@@ =@@@. "," :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@% "];console.log(""),a.forEach(i=>{let s=i.search(/\S/),r=i.length-[...i].reverse().join("").search(/\S/)-1;if(s===-1)return console.log(" "+i);let n=i.slice(0,s),c=i.slice(s,r+1).split("").map(l=>l===" "?" ":"\u2588").join(""),m=i.slice(r+1);console.log(` ${n}${t}${c}${o}${m}`)}),console.log(` ${e} CLI v${Ao}${o}`),console.log("")}function Ee(o){if(!Y())return{stop:()=>{},update:()=>{},log:()=>{}};let e=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],t=0,a=o,i=()=>process.stdout.write("\r\x1B[2K"),s=()=>{process.stdout.write(`\r ${h.cyan}${e[t++%e.length]}${h.reset} ${a}`)},r=setInterval(s,80);return{update:n=>{a=n},log:n=>{i(),console.log(` ${h.dim}\u2502${h.reset} ${n}`),s()},stop:n=>{clearInterval(r),i(),n&&console.log(` ${n}`)}}}function U(o){Y()?Xg(o):console.log(JSON.stringify(o,null,2))}function ie(o,e){Y()?(console.log(` ${h.green}\u2713${h.reset} ${o}`),e&&Xg(e,4)):console.log(JSON.stringify({success:!0,message:o,...e&&typeof e=="object"?e:{data:e}}))}function z(o,e){Y()?(console.error(` ${h.red}\u2717${h.reset} ${o}`),e&&Xg(e,4)):console.error(JSON.stringify({success:!1,error:o,details:e}))}function P5(o){Y()&&console.log(` ${h.yellow}\u26A0${h.reset} ${o}`)}function mo(o){Y()&&console.log(` ${h.dim}${o}${h.reset}`)}function Ga(o){Y()&&(console.log(`
|
|
1402
1402
|
${h.bold}${h.cyan}${o}${h.reset}`),console.log(` ${h.dim}${"\u2500".repeat(o.length)}${h.reset}`))}function la(o,e,t){if(!Y()){console.log(JSON.stringify({success:!0,total:t?.total??o.length,items:o}));return}if(o.length===0){console.log(`
|
|
1403
1403
|
${h.dim}0 results${h.reset}
|
|
1404
1404
|
`);return}let a=e||Object.keys(o[0]),i=vt()?1/0:60,s=a.map(l=>Math.min(i,Math.max(l.length,...o.map(u=>String(u[l]??"").replace(/[\n\r]+/g," ").trim().length))));console.log("");let r=a.map((l,u)=>`${h.bold}${h.cyan}${l.toUpperCase().padEnd(s[u])}${h.reset}`).join(" ");console.log(` ${r}`);let n=s.map(l=>`${h.dim}${"\u2500".repeat(l)}${h.reset}`).join(`${h.dim}\u2500\u2500${h.reset}`);console.log(` ${n}`);for(let l of o){let u=a.map((d,g)=>{let p=String(l[d]??"").replace(/[\n\r]+/g," ").trim();if(p.length>i){let w=`\u2026 (${p.length})`;p=p.slice(0,Math.max(0,i-w.length))+`${h.dim}${w}${h.reset}`}return d==="status"?`${{success:h.green,running:h.yellow,failed:h.red,aborted:h.red,error:h.red,pending:h.dim}[p.toLowerCase()]||""}${p.padEnd(s[g])}${h.reset}`:p.padEnd(s[g])}).join(" ");console.log(` ${u}`)}let c=t?.total??o.length,m=c===o.length?`${o.length} result${o.length===1?"":"s"}`:`${o.length} of ${c} result${c===1?"":"s"}`;console.log(`
|