@jskit-ai/connectors-catalog 0.1.1
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/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- package/test/zoho-crm.test.js +223 -0
package/docs/workday.md
ADDED
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
# Workday
|
|
2
|
+
|
|
3
|
+
This adapter connects each application's authenticated user to their own
|
|
4
|
+
Workday account and reads workers, organizations, time off and custom reports.
|
|
5
|
+
It uses a customer-owned confidential OAuth client, Staffing v7, Absence
|
|
6
|
+
Management v5 and tenant RaaS JSON reports. The user's Workday security profile determines the
|
|
7
|
+
records returned. Saving configuration does not authorize or contact Workday.
|
|
8
|
+
|
|
9
|
+
## Portable configuration
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"registrations": {
|
|
15
|
+
"workday-tenant": {
|
|
16
|
+
"source": "own",
|
|
17
|
+
"clientId": "replace-with-workday-client-id",
|
|
18
|
+
"clientSecretRef": "env:WORKDAY_CLIENT_SECRET",
|
|
19
|
+
"callbackUrlRef": "env:WORKDAY_CALLBACK_URL"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"integrations": {
|
|
23
|
+
"workday": {
|
|
24
|
+
"provider": "workday",
|
|
25
|
+
"accountMode": "per-user",
|
|
26
|
+
"settings": {
|
|
27
|
+
"restApiEndpoint": "https://wd5-services1.myworkday.com/ccx/api/v1/acme_corp",
|
|
28
|
+
"tokenEndpoint": "https://wd5-services1.myworkday.com/ccx/oauth2/acme_corp/token",
|
|
29
|
+
"authorizationEndpoint": "https://acme.wd5.myworkday.com/acme_corp/authorize"
|
|
30
|
+
},
|
|
31
|
+
"scopes": [],
|
|
32
|
+
"authentication": { "method": "oauth2", "registrationRef": "workday-tenant" }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The editor and CLI use this same schema. Optional `displayName` and `access`
|
|
39
|
+
use the core configuration contract; access to configuring a registration is
|
|
40
|
+
separate from ownership of each connected user's tokens. Store the real secret
|
|
41
|
+
and callback in the application's environment. Keep encrypted runtime files and
|
|
42
|
+
their durable encryption key outside exported source.
|
|
43
|
+
|
|
44
|
+
The REST endpoint accepts the captured `/ccx/api/v1/{tenant}` base or an explicit
|
|
45
|
+
`/ccx/api/staffing/v7/{tenant}` base. It also accepts these API paths without the
|
|
46
|
+
`/ccx` prefix, as documented in Workday's current REST fundamentals. Worker URLs
|
|
47
|
+
retain the configured host, prefix and tenant and select Staffing v7. No host
|
|
48
|
+
discovery or retry on another base path occurs. Check the copied endpoint for
|
|
49
|
+
your tenant before use; these forms have fixture coverage, not live-tenant proof.
|
|
50
|
+
Token URLs must match the REST host and tenant. Authorization may use a different
|
|
51
|
+
Workday host, but must name the same tenant. HTTPS subdomains of `myworkday.com`
|
|
52
|
+
are supported; custom gateways, ports, URL credentials, queries and fragments
|
|
53
|
+
are excluded from this initial adapter.
|
|
54
|
+
|
|
55
|
+
## Register the provider client
|
|
56
|
+
|
|
57
|
+
These are tenant administrator tasks, not Workday Developer Site/Extend client
|
|
58
|
+
registration. Task availability depends on the administrator's permissions.
|
|
59
|
+
|
|
60
|
+
1. Sign into the intended production or sandbox Workday tenant. Confirm its name
|
|
61
|
+
and environment; sandbox credentials must not be copied into production.
|
|
62
|
+
2. If OAuth clients are disabled, have the security administrator open **Edit
|
|
63
|
+
Tenant Setup – Security**, enable **OAuth 2.0 Clients Enabled**, and apply the
|
|
64
|
+
organization's normal security-change process.
|
|
65
|
+
3. Search for **Register API Client**. Enter a recognizable client name such as
|
|
66
|
+
`DogAndGroom — production` or `DogAndGroom — sandbox`.
|
|
67
|
+
Choose **Authorization Code Grant** and **Bearer** access tokens.
|
|
68
|
+
4. Leave **Support Proof Key for Code Exchange (PKCE)** disabled for this
|
|
69
|
+
confidential setup. The captured Workday connector expects the client secret
|
|
70
|
+
issued by that flow. This adapter explicitly omits PKCE; other providers keep
|
|
71
|
+
the core's S256 default. Public clients without a secret are unsupported here.
|
|
72
|
+
5. Set **Redirection URI** to the exact backend callback owned by your app. For
|
|
73
|
+
an ordinary CLI, run that same backend flow with a callback accepted by Workday;
|
|
74
|
+
do not embed the client secret in browser code or invent a device-code flow.
|
|
75
|
+
6. In **Scope (Functional Areas)**, select **Staffing** for these worker reads.
|
|
76
|
+
Follow the tenant's policy for Workday-owned scopes; additional functional
|
|
77
|
+
areas do not add operations to this adapter. No scope strings are sent in
|
|
78
|
+
the authorization request: functional areas are configured in Workday.
|
|
79
|
+
7. Retain a refresh-token timeout approved by the tenant administrator. Workday
|
|
80
|
+
exposes **Non-Expiring Refresh Tokens**, but enabling it is not required by
|
|
81
|
+
this library and does not prevent manual revocation or other access changes.
|
|
82
|
+
8. Save and copy the **Client ID** and **Client Secret**. Store the secret in Env
|
|
83
|
+
and its reference in the file. Workday may show the secret only at creation.
|
|
84
|
+
9. Open **View API Clients**, find this client and copy **Workday REST API
|
|
85
|
+
Endpoint**, **Token Endpoint** and **Authorization Endpoint** exactly. The
|
|
86
|
+
authorization host normally differs from the REST/token host.
|
|
87
|
+
10. Grant the intended users **View** in the **Report/Task Permissions** of the
|
|
88
|
+
domains securing `GET /workers` and `GET /workers/{ID}`. Staffing v7 lists
|
|
89
|
+
FLW Service, Self-Service: Current Staffing Information and Worker Data:
|
|
90
|
+
Public Worker Reports. Select the appropriate tenant security groups and
|
|
91
|
+
activate approved pending policy changes. SOAP Integration Permissions do
|
|
92
|
+
not substitute for REST Report/Task Permissions.
|
|
93
|
+
11. Save the file or editor form. From the application's authenticated connection
|
|
94
|
+
screen, start consent. Workday signs in each person; `workers.me` verifies
|
|
95
|
+
their worker resource before the connection is marked connected. A user
|
|
96
|
+
without an accessible worker record cannot pass this initial check.
|
|
97
|
+
|
|
98
|
+
## Runtime composition and operations
|
|
99
|
+
|
|
100
|
+
Import `workdayProvider` from `@jskit-ai/connectors-catalog/server/workday` and
|
|
101
|
+
register it in `parseIntegrationConfiguration` and `createConnectionService`.
|
|
102
|
+
Use the packaged OAuth connection pattern for file storage, reference resolution,
|
|
103
|
+
`beginAuthorization`, `completeAuthorization`, cancellation and disconnect.
|
|
104
|
+
The host authenticates callers and derives a stable application/user identity;
|
|
105
|
+
never accept that ownership from a callback query or request body.
|
|
106
|
+
|
|
107
|
+
| Operation | Inputs | Result |
|
|
108
|
+
| --- | --- | --- |
|
|
109
|
+
| `workers.me` | None | The connected person's worker object; used for verification. |
|
|
110
|
+
| `workers.list` | `limit` 1–100 (default 20), `offset` nonnegative safe integer (default 0), optional `search` 1–512 characters, `includeTerminatedWorkers`, `filterByOrgVisibility` | One `{ data, total }` page, preserved with provider metadata. |
|
|
111
|
+
|
|
112
|
+
`search` is Workday's name/worker-ID search, not a general query language.
|
|
113
|
+
`filterByOrgVisibility` needs the corresponding Workday tenant setting. Empty
|
|
114
|
+
pages are valid. The library validates worker identifiers and the page envelope;
|
|
115
|
+
the application still chooses which returned personal data it displays or stores.
|
|
116
|
+
Provider `href` values remain data and are never followed automatically. No
|
|
117
|
+
operation accepts an alternate host, tenant or token endpoint. The absence reads
|
|
118
|
+
require an explicit worker ID; the app must authorize that selection and Workday
|
|
119
|
+
still applies the connected user's permissions.
|
|
120
|
+
|
|
121
|
+
The confidential client defaults to `client_secret_post`; the optional registration
|
|
122
|
+
setting `tokenEndpointAuthMethod: "client_secret_basic"` selects HTTP Basic.
|
|
123
|
+
State is random, time-limited, one-use and bound to owner, configuration and
|
|
124
|
+
callback. Provider metadata alone cannot switch that attempt to another flow.
|
|
125
|
+
When Workday supplies an expiry, the core refreshes before expiry and retains
|
|
126
|
+
rotated refresh tokens. Without expiry metadata, a later HTTP 401 requires
|
|
127
|
+
reconnection; this fragment does not guess a tenant session lifetime. HTTP 403
|
|
128
|
+
reports missing Workday access, 429 rate limiting, and provider failures expose
|
|
129
|
+
sanitized errors. Cancellation consumes only the pending attempt. Local
|
|
130
|
+
disconnect removes local credentials; revoke the client/grant in Workday when
|
|
131
|
+
provider-side revocation is required.
|
|
132
|
+
|
|
133
|
+
This implements data connections, not application login, shared ISU access,
|
|
134
|
+
Workday Extend, Agent Gateway, Live Data Query, SOAP, custom report creation, payroll
|
|
135
|
+
updates, employment changes, bulk sync or automatic pagination.
|
|
136
|
+
|
|
137
|
+
## Application ownership, callbacks and capacity
|
|
138
|
+
|
|
139
|
+
The application owner creates the provider registration and stores its secret
|
|
140
|
+
in the application's private Env. Public Vibe64, Vibe64 Online and CLI users use
|
|
141
|
+
this same ownership model. The configuration file holds the client ID and Env
|
|
142
|
+
references; the editor does not own the application's grants.
|
|
143
|
+
|
|
144
|
+
Register the exact callback implemented by the application. For a hosted project,
|
|
145
|
+
start with its assigned application URL and append the implemented callback path.
|
|
146
|
+
Save that same URL through the application's callback Env reference. On a domain
|
|
147
|
+
or host change, update both the provider registration and callback Env if the URL
|
|
148
|
+
changes. Preserve the application's identity and persistent grant store when
|
|
149
|
+
moving it; neither a new editor URL nor a new hosting address creates a new owner.
|
|
150
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md) and
|
|
151
|
+
[application setup command](../../connectors-core/docs/setup-command.md).
|
|
152
|
+
|
|
153
|
+
Each Workday tenant administrator must register and approve the application's
|
|
154
|
+
client. There is no universal credential that accesses arbitrary customer tenants.
|
|
155
|
+
Separate clients can separate credentials and revocation within a tenant; their
|
|
156
|
+
names alone do not split tenant API capacity, licensing or rate limits. Keep
|
|
157
|
+
sandbox and production credentials and grants separate.
|
|
158
|
+
|
|
159
|
+
## What AI can provision
|
|
160
|
+
|
|
161
|
+
AI can generate and validate this file, compose existing JSKIT APIs, explain
|
|
162
|
+
functional-area/domain requirements and prepare project-specific production/sandbox
|
|
163
|
+
client names and callback values. With explicitly authorized browser access, it may
|
|
164
|
+
assist an administrator through the visible Workday tasks. A general public API
|
|
165
|
+
for creating these tenant OAuth clients has not been established by this packet;
|
|
166
|
+
do not promise autonomous registration, licensing or security-policy activation.
|
|
167
|
+
An authorized administrator owns tenant access, consent and policy decisions.
|
|
168
|
+
|
|
169
|
+
## Evidence and testing boundary
|
|
170
|
+
|
|
171
|
+
- [Workday REST API fundamentals](https://developer.workday.com/documentation/GUID-85810465-bcfb-4fdf-a26d-55eaff3968a8-enHYPHENus/) documents tenant base paths, paging and worker identifiers.
|
|
172
|
+
- [Workday REST API security](https://developer.workday.com/documentation/dan1370797986071/) distinguishes REST Report/Task policies from SOAP permissions.
|
|
173
|
+
- [Official Staffing v7 specification](https://community.workday.com/sites/default/files/file-hosting/restapi/staffing_v7_20260905_oas2.json) defines the implemented worker endpoints and functional areas.
|
|
174
|
+
- [Workday's tenant token exchange example](https://doc.workday.com/admin-guide/en-us/workday-ai/agents/external-agents/register-and-define-your-agent-through-an-api.html) documents the `/ccx/oauth2/{tenant}/token` client-secret exchange; its ASOR operations are not implemented here.
|
|
175
|
+
- [Workday OAuth client setup example](https://doc.workday.com/peakon/en-us/workday-peakon-employee-voice/integrations/workday-integration/nfa1667304944189.html) describes tenant OAuth enablement and registration.
|
|
176
|
+
- [Lovable's Workday setup](https://docs.lovable.dev/integrations/workday) documents the captured per-user fields and non-PKCE confidential registration.
|
|
177
|
+
|
|
178
|
+
Protocol, storage, ownership, validation and editor tests use controlled fixtures.
|
|
179
|
+
No live Workday account, administrator task, provider consent or generated app is
|
|
180
|
+
part of this proof. The host application must still compose its authentication,
|
|
181
|
+
callback and connection screens using its framework; saving the editor form does
|
|
182
|
+
not generate or run those screens.
|
|
183
|
+
|
|
184
|
+
## Organization directory and reporting relationships
|
|
185
|
+
|
|
186
|
+
`organizations.list` accepts `limit`, `offset` and `includeInactive` and returns
|
|
187
|
+
one native `{ data, total }` page. `organizations.get({ id })` reads one
|
|
188
|
+
supervisory organization. `organizations.members({ id, limit, offset })` returns
|
|
189
|
+
member job data; `organizations.orgChart({ id, limit, offset })` returns superior
|
|
190
|
+
and subordinate organization relationships. No recursive tree traversal occurs.
|
|
191
|
+
The app owns rendering the directory/chart and requesting additional pages.
|
|
192
|
+
|
|
193
|
+
Use a returned Workday ID or `Organization_Reference_ID=value`. Identifiers are
|
|
194
|
+
encoded as a single path segment. All requests retain the configured API host,
|
|
195
|
+
prefix and tenant, using `/api/staffing/v7/{tenant}/supervisoryOrganizations`.
|
|
196
|
+
The connected person's grant is used; the adapter never switches to an ISU or
|
|
197
|
+
administrator account when permission is denied.
|
|
198
|
+
|
|
199
|
+
In Register API Client, enable **Organizations and Roles** in functional areas.
|
|
200
|
+
Organization list/details require a permitted domain such as **View: Supervisory
|
|
201
|
+
Organization**; members and org chart require **Reports: Organization**. Ask the
|
|
202
|
+
tenant security administrator to assign suitable Report/Task permissions and
|
|
203
|
+
activate approved changes. A successful workers.me connection check is not an
|
|
204
|
+
organization authorization check. A 403 must be shown as missing access.
|
|
205
|
+
|
|
206
|
+
Other frameworks call these same GET routes with the app user's bearer token,
|
|
207
|
+
validate the page envelope, preserve returned relationships and perform their
|
|
208
|
+
own application authorization. Provider links in results are data, not a reason
|
|
209
|
+
to forward credentials to another host. The operation contract is documented in
|
|
210
|
+
[Staffing v7](https://community.workday.com/sites/default/files/file-hosting/restapi/staffing_v7_20260912_oas2.json).
|
|
211
|
+
|
|
212
|
+
## Time-off balances and entries
|
|
213
|
+
|
|
214
|
+
Enable **Time Off and Leave** in the tenant client's functional areas. The
|
|
215
|
+
security administrator grants the appropriate **Self-Service: Time Off Balances**
|
|
216
|
+
and **Self-Service: Time Off** domains, or the corresponding **Worker Data: Time
|
|
217
|
+
Off** domains for the intended role. Activate approved Report/Task security
|
|
218
|
+
changes. Worker or organization access does not establish absence access.
|
|
219
|
+
|
|
220
|
+
- `timeOff.balances({ worker, effective, category, limit, offset })` reads
|
|
221
|
+
`/api/absenceManagement/v5/{tenant}/balances`. `worker` is required: use a
|
|
222
|
+
returned 32-character Workday worker ID, including the ID from `workers.me`.
|
|
223
|
+
`effective` is an optional YYYY-MM-DD date; category is an optional returned
|
|
224
|
+
Workday ID. Quantities retain their native units; do not assume days or hours.
|
|
225
|
+
- `timeOff.details({ worker, fromDate, toDate, status, timeOffType, limit, offset })`
|
|
226
|
+
reads `/workers/{worker}/timeOffDetails` under that absence base. Optional date
|
|
227
|
+
bounds must be valid and ordered. Status/type filters contain Workday IDs,
|
|
228
|
+
encoded as repeated query parameters. No comma-joined filter or guessed status
|
|
229
|
+
label is sent. Limits are 20 statuses and 100 time-off types.
|
|
230
|
+
- `timeOff.statuses()` reads `/values/timeOff/status/`. Use its returned IDs for
|
|
231
|
+
status filters. Workday omits canceled/denied entries from the details endpoint;
|
|
232
|
+
status filters can select a historical version of a corrected entry. Do not
|
|
233
|
+
present these results as a complete audit history.
|
|
234
|
+
|
|
235
|
+
Paged reads use limit 1–100 and offset, preserving native `{ data, total }`.
|
|
236
|
+
The application decides whether to request another page, renders status/units
|
|
237
|
+
and authorizes the selected worker. Requests always use the connected user's
|
|
238
|
+
grant and configured tenant; Workday enforces its own data access. These are
|
|
239
|
+
reads only, with no submission, approval, cancellation or balance adjustment.
|
|
240
|
+
Other frameworks use the same bearer-token routes and repeated query encoding.
|
|
241
|
+
See the official [Absence Management v5 contract](https://community.workday.com/sites/default/files/file-hosting/restapi/absenceManagement_v5_20260912_oas2.json).
|
|
242
|
+
|
|
243
|
+
## Tenant-owned custom reports
|
|
244
|
+
|
|
245
|
+
`reports.read({ owner, report, prompts })` reads a RaaS JSON report at the configured
|
|
246
|
+
API host's `/ccx/service/customreport2/{tenant}/{owner}/{report}` path. It uses
|
|
247
|
+
the current app user's bearer token; it never acquires the report owner's grant.
|
|
248
|
+
The report owner identifies the report location, not the identity executing it.
|
|
249
|
+
|
|
250
|
+
For RaaS, select **Tenant Non-Configurable** and **Include Workday Owned Scope**
|
|
251
|
+
on the API client, in addition to the functional areas for the report's data.
|
|
252
|
+
The tenant administrator must also authorize report execution and its underlying
|
|
253
|
+
data for the intended users. This does not replace report sharing or widen a
|
|
254
|
+
user's own access. Reconnect after changing the client permissions.
|
|
255
|
+
|
|
256
|
+
The report owner enables the custom report as a web service and shares access
|
|
257
|
+
with the intended users. In its related actions, choose **Web Services → View
|
|
258
|
+
URLs**, supply required prompts and copy the JSON output URL. Confirm its host
|
|
259
|
+
and tenant match the configured connection. Pass its decoded owner and report
|
|
260
|
+
name as input (spaces in report names are normally underscores). This operation
|
|
261
|
+
supports the tenant RaaS path above; an Extend API gateway URL is not interchangeable.
|
|
262
|
+
Do not change credentials or silently follow a different host to make a report run.
|
|
263
|
+
|
|
264
|
+
Each prompt is `{ name, value }`, using the report's **Label for Prompt XML Alias**,
|
|
265
|
+
not a guessed application field. For instance prompts, use a name ending `!WID`;
|
|
266
|
+
join multiple WIDs in its value with `!`. The adapter encodes query values and
|
|
267
|
+
fixes format to JSON. Each alias is supplied once. Limits are 50 prompts, 4096
|
|
268
|
+
characters per value and a 16384-character request URL.
|
|
269
|
+
|
|
270
|
+
The result preserves the native `Report_Entry` objects and any result/facet
|
|
271
|
+
metadata. Column meanings, required prompts and filtering belong to the report
|
|
272
|
+
and application. There is no universal report schema or automatic pagination;
|
|
273
|
+
large reports must be bounded through the report's own filters and the runtime's
|
|
274
|
+
response limit. An empty Report_Entry array is valid. Missing access, incompatible
|
|
275
|
+
report output and provider failures remain errors, never empty successful reports.
|
|
276
|
+
|
|
277
|
+
The app authorizes which reports/prompts a visitor may request. Workday also
|
|
278
|
+
checks the user's report/data permissions and tenant OAuth policy; a worker probe
|
|
279
|
+
cannot certify RaaS access. This has controlled request/response proof, not live
|
|
280
|
+
tenant OAuth interoperability proof. Other frameworks use the same HTTPS GET,
|
|
281
|
+
user token, prompt encoding and report-defined schema. Report creation, Basic/ISU
|
|
282
|
+
fallback, CSV/XML output and asynchronous report execution are not implemented.
|
|
283
|
+
|
|
284
|
+
References: [Workday RaaS output and prompts](https://doc.workday.com/admin-guide/en-us/reporting-and-analytics/custom-reports-and-analytics/reports-as-a-service-raas-/dan1370797813643.html),
|
|
285
|
+
[RaaS report enablement](https://doc.workday.com/admin-guide/en-us/reporting-and-analytics/custom-reports-and-analytics/reports-as-a-service-raas-/dan1370796320263.html),
|
|
286
|
+
[official JSON report example](https://developer.workday.com/documentation/rpv1519338225087),
|
|
287
|
+
and [Microsoft's tenant RaaS setup example](https://learn.microsoft.com/en-us/viva/learning/workday-create-raas-report).
|
|
288
|
+
|
|
289
|
+
The [OpenAI Workday integration example](https://github.com/openai/openai-cookbook/blob/main/examples/chatgpt/gpt_actions_library/gpt_action_workday.md)
|
|
290
|
+
documents these OAuth functional-area settings and a RaaS report evaluated as
|
|
291
|
+
the authenticated user. It supports the registration guidance; the operation
|
|
292
|
+
schemas here follow the Workday contracts above, not its illustrative schema.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
# X (Twitter)
|
|
2
|
+
|
|
3
|
+
Import `xTwitterProvider` from `@jskit-ai/connectors-catalog/server/x-twitter`.
|
|
4
|
+
This adapter reads public profiles, post timelines and recent search using an app-only
|
|
5
|
+
bearer token. The shared connection service and file store work from a CLI or
|
|
6
|
+
application server. Vibe64 edits the same JSON; saving does not contact X.
|
|
7
|
+
|
|
8
|
+
## Create the provider application
|
|
9
|
+
|
|
10
|
+
1. Sign into [Developer Console](https://console.x.com). Complete developer
|
|
11
|
+
onboarding, including the account profile, use case and provider agreements.
|
|
12
|
+
2. Choose **New App**. Enter the application name, description and use case.
|
|
13
|
+
Use a name that identifies the actual operator and application purpose.
|
|
14
|
+
3. In the created application's credentials, copy its **Bearer Token** for
|
|
15
|
+
app-only access. Keep it in the backend environment or secret store. The
|
|
16
|
+
credentials shown during creation must be retained securely.
|
|
17
|
+
4. In Developer Console, check API access, credits and spending controls for
|
|
18
|
+
the owning account. Verification is a real profile lookup and can consume
|
|
19
|
+
credits. A token's existence does not establish usable API access.
|
|
20
|
+
5. Save only the reference in the JSON below. Do not paste the token into source
|
|
21
|
+
or include the `Bearer ` prefix in its environment value.
|
|
22
|
+
6. Explicitly verify with `connectApiKey` and a known public username without
|
|
23
|
+
`@`. A missing profile is a failed check, not evidence that the token is bad;
|
|
24
|
+
choose an accessible profile and retry deliberately.
|
|
25
|
+
|
|
26
|
+
The console's application credentials include several authentication types;
|
|
27
|
+
this fragment uses its app-only token. [Access setup](https://docs.x.com/x-api/getting-started/getting-access)
|
|
28
|
+
and [usage billing](https://docs.x.com/x-api/getting-started/pricing).
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"schemaVersion": 1,
|
|
33
|
+
"registrations": {},
|
|
34
|
+
"integrations": {
|
|
35
|
+
"social": {
|
|
36
|
+
"provider": "x-twitter",
|
|
37
|
+
"displayName": "Public research",
|
|
38
|
+
"accountMode": "shared",
|
|
39
|
+
"scopes": [],
|
|
40
|
+
"authentication": {
|
|
41
|
+
"method": "api-key",
|
|
42
|
+
"secretRef": "env:X_APP_BEARER_TOKEN"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`assistant` ownership is also supported through the host's authorization policy.
|
|
50
|
+
The file has no OAuth registration or permission checkboxes for this credential
|
|
51
|
+
type. X calls this OAuth 2.0 application-only authentication; the shared library's
|
|
52
|
+
`api-key` method means that it consumes an externally supplied credential rather
|
|
53
|
+
than starting an authorization journey.
|
|
54
|
+
|
|
55
|
+
## Runtime composition and operations
|
|
56
|
+
|
|
57
|
+
Use the API-key connection pattern to construct `connections` with this provider,
|
|
58
|
+
the parsed file, encrypted file storage, reference resolution and host access
|
|
59
|
+
policy. The catalogue contains the actual transport and validation implementation;
|
|
60
|
+
no copied app template is required. Both configuration parsing and the service
|
|
61
|
+
must receive `xTwitterProvider` in their `providers` arrays.
|
|
62
|
+
|
|
63
|
+
```js
|
|
64
|
+
await connections.connectApiKey({
|
|
65
|
+
context: authenticatedOwner,
|
|
66
|
+
integrationId: "social",
|
|
67
|
+
verificationInput: { username: "example" }
|
|
68
|
+
});
|
|
69
|
+
const profile = await connections.invoke({
|
|
70
|
+
context: authenticatedOwner,
|
|
71
|
+
integrationId: "social",
|
|
72
|
+
operation: "users.lookup",
|
|
73
|
+
input: { username: "example" }
|
|
74
|
+
});
|
|
75
|
+
const firstPage = await connections.invoke({
|
|
76
|
+
context: authenticatedOwner,
|
|
77
|
+
integrationId: "social",
|
|
78
|
+
operation: "users.posts",
|
|
79
|
+
input: { userId: profile.data.id, maxResults: 10 }
|
|
80
|
+
});
|
|
81
|
+
// Request another page explicitly, only when the caller wants it.
|
|
82
|
+
const nextCursor = firstPage.meta.next_token;
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The username above is illustrative; supply a real, authorized target. The
|
|
86
|
+
application determines `authenticatedOwner` from its trusted CLI operator or
|
|
87
|
+
authenticated session and authorizes the particular operation and target.
|
|
88
|
+
It must not copy ownership IDs from arbitrary browser input.
|
|
89
|
+
|
|
90
|
+
| Operation | Input | Request/result |
|
|
91
|
+
|---|---|---|
|
|
92
|
+
| `users.lookup` (verification) | Required `username`, 1–15 letters, digits or underscores, without `@` | GET `/2/users/by/username/{username}` with description, image and public metrics fields; original profile envelope |
|
|
93
|
+
| `posts.searchRecent` | Required `query` (1–512 characters), optional `maxResults` 10–100 and `nextToken` | GET `/2/tweets/search/recent`; posts, author/media expansions and metadata |
|
|
94
|
+
| `users.posts` | Required decimal-string `userId` (1–19 digits); optional `maxResults` 5–100 (default 10), `paginationToken` | GET `/2/users/{id}/tweets`; original post array and pagination metadata |
|
|
95
|
+
|
|
96
|
+
Requests use the fixed `https://api.x.com` origin. Keep IDs as strings to avoid
|
|
97
|
+
rounding. Empty timelines may omit `data`; their `meta.result_count` is zero.
|
|
98
|
+
Each invocation makes one request without redirects or automatic paging.
|
|
99
|
+
Returned cursors must stay with the same account, user and query; do not decode
|
|
100
|
+
or construct them. Search accepts provider query operators; no arbitrary URL or write route is exposed.
|
|
101
|
+
[Profile endpoint](https://docs.x.com/x-api/users/get-user-by-username),
|
|
102
|
+
[timeline endpoint](https://docs.x.com/x-api/users/get-posts).
|
|
103
|
+
|
|
104
|
+
The runtime rejects malformed envelopes and responses containing partial errors.
|
|
105
|
+
A missing resource becomes `connector_resource_not_found`; incomplete results
|
|
106
|
+
become `connector_response_incomplete`. HTTP 402 becomes
|
|
107
|
+
`connector_billing_required`; 401, 403 and 429 use the shared reconnection,
|
|
108
|
+
permission and rate-limit errors. Provider error text is omitted. Cancellation
|
|
109
|
+
and timeouts do not replay requests or discard a verified connection.
|
|
110
|
+
|
|
111
|
+
## Application ownership and callbacks
|
|
112
|
+
|
|
113
|
+
An app-only token has no current user. A public profile lookup is not a login
|
|
114
|
+
check. Posting, private messages and access on behalf of individual app users
|
|
115
|
+
require a separate user authorization implementation. This fragment must not be
|
|
116
|
+
advertised as individual users connecting their X accounts.
|
|
117
|
+
[Authentication boundary](https://docs.x.com/fundamentals/authentication/oauth-2-0/application-only).
|
|
118
|
+
|
|
119
|
+
An OAuth callback is **not applicable to this bearer-token flow**. Neither a
|
|
120
|
+
customer's VPS hostname nor a custom application domain changes authentication.
|
|
121
|
+
The application owner supplies its authorized token through private Env and
|
|
122
|
+
retains that credential ownership when moving hosts.
|
|
123
|
+
|
|
124
|
+
Separate application registrations may identify traffic, but this guide
|
|
125
|
+
does not establish independent billing or quota pools merely from different
|
|
126
|
+
app IDs. Confirm the provider's permitted account arrangement and applicable
|
|
127
|
+
limits before promising independent capacity or redistribution to customer apps.
|
|
128
|
+
CLI and self-hosted apps can supply their own tokens using this same file format.
|
|
129
|
+
|
|
130
|
+
Local disconnect deletes the stored connection, without invalidating the
|
|
131
|
+
provider's application-wide token. An operator can replace its secret binding
|
|
132
|
+
and verify again. Provider token invalidation affects every consumer of that
|
|
133
|
+
app token; it is a separate operator action.
|
|
134
|
+
[Token lifecycle](https://docs.x.com/fundamentals/authentication/oauth-2-0/application-only).
|
|
135
|
+
|
|
136
|
+
## Automation assessment
|
|
137
|
+
|
|
138
|
+
| Task | What an AI can do |
|
|
139
|
+
|---|---|
|
|
140
|
+
| Create the application-owned provider registration | The reviewed setup documents use Developer Console. No general application-provisioning API was established. An authorized operator can follow the steps above; onboarding and provider approval remain external work. |
|
|
141
|
+
| Obtain an app-only token from existing app credentials | X documents `POST /oauth2/token` using the app's consumer key and secret. That exchange can be automated separately; this fragment accepts the resulting token reference. |
|
|
142
|
+
| Configure a CLI, UI or runtime | Write and validate the same JSON, compose the existing library and file store, wire trusted authorization, and invoke explicit reads. |
|
|
143
|
+
| Grant individual users access or publish posts | Not implemented by this fragment. An app-only token cannot supply user consent or app login. |
|
|
144
|
+
|
|
145
|
+
Token issuance is documented in [application-only authentication](https://docs.x.com/fundamentals/authentication/oauth-2-0/application-only).
|
|
146
|
+
Do not infer unattended account creation or provider approval from an available
|
|
147
|
+
token endpoint.
|
|
148
|
+
|
|
149
|
+
## Verification boundary
|
|
150
|
+
|
|
151
|
+
Focused fixtures cover file persistence, ownership, rotation, strict inputs and
|
|
152
|
+
responses, paging, errors, cancellation and the guide's actual JSON. Editor
|
|
153
|
+
checks cover token references, ownership, setup guidance and reload persistence.
|
|
154
|
+
These checks use controlled responses; no live X token, registration, generated
|
|
155
|
+
application has been exercised.
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
## Recent-search display recipe
|
|
159
|
+
|
|
160
|
+
```js
|
|
161
|
+
const results = await connections.invoke({
|
|
162
|
+
context: authenticatedOwner, integrationId: "social",
|
|
163
|
+
operation: "posts.searchRecent",
|
|
164
|
+
input: { query: '("pet grooming" OR #dogs) lang:en -is:retweet', maxResults: 10 }
|
|
165
|
+
});
|
|
166
|
+
// Join post.author_id to results.includes?.users by id.
|
|
167
|
+
// Join post.attachments?.media_keys to results.includes?.media by media_key.
|
|
168
|
+
// Keep results.meta.next_token with this exact query for a user-requested next page.
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
This searches the recent seven-day window. Query operators provide author,
|
|
172
|
+
language and content filters; operator availability and entitlement are decided
|
|
173
|
+
by X. Full-archive search, streaming and explicit time-range parameters are not
|
|
174
|
+
implemented. The adapter requests author names/images, post timestamps/entities/
|
|
175
|
+
public metrics and media type/URL/preview/alt text. Missing expansions are not
|
|
176
|
+
invented. Results with provider errors fail as incomplete rather than silently
|
|
177
|
+
rendering a purported complete result.
|
|
178
|
+
[Search guide](https://docs.x.com/x-api/posts/search/integrate/overview),
|
|
179
|
+
[recent search](https://docs.x.com/x-api/posts/search/quickstart/recent-search).
|
|
180
|
+
|
|
181
|
+
A native framework uses the same Env token in its server-side HTTP client,
|
|
182
|
+
`Authorization: Bearer <value>`, and these fixed API paths/query parameters.
|
|
183
|
+
It does not require JSKIT or Vibe64 at runtime. The application owns query
|
|
184
|
+
permissions, pagination controls, spend limits, escaping post text, joining
|
|
185
|
+
expansions, attribution and links back to the original post. Do not turn returned
|
|
186
|
+
media URLs into arbitrary backend downloads or render post text as trusted HTML.
|
|
187
|
+
Consult the provider's current display requirements before release; a connector
|
|
188
|
+
is not a completed social feed UI.
|