@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
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Microsoft Graph registration and connection wiring
|
|
2
|
+
|
|
3
|
+
Registration, tenant selection and document APIs checked: 9 September 2026. These fragments use delegated OAuth
|
|
4
|
+
authorization codes with PKCE and a confidential backend registration. Provider
|
|
5
|
+
HTTP is simulated in automated tests; no live Microsoft account is used.
|
|
6
|
+
|
|
7
|
+
## Manual registration
|
|
8
|
+
|
|
9
|
+
1. Sign in to Microsoft Entra admin center and select the directory that will
|
|
10
|
+
own the registration. Open **Entra ID → App registrations → New registration**.
|
|
11
|
+
2. Name the app. For Outlook, OneDrive, Excel, OneNote, Word and PowerPoint select **Any Entra ID
|
|
12
|
+
Tenant + Personal Microsoft accounts**. For Teams and SharePoint select
|
|
13
|
+
**Multiple Entra ID tenants**. These correspond to the implemented `common`
|
|
14
|
+
and `organizations` defaults. For one directory choose **Single tenant only**
|
|
15
|
+
and copy its **Directory (tenant) ID** from the registration Overview. For a
|
|
16
|
+
personal-only registration choose **Personal accounts only** and configure
|
|
17
|
+
`consumers` (not supported by Teams/SharePoint). Select **Register** and
|
|
18
|
+
record **Application (client) ID**. [Registration instructions](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app).
|
|
19
|
+
3. Open **Authentication → Redirect URI configuration → Add Redirect URI**.
|
|
20
|
+
Choose **Web**, enter the exact backend callback address, then **Configure**.
|
|
21
|
+
For local development use a registered localhost callback served by the
|
|
22
|
+
operator's backend. Hosted and installed editors use the same application-owned callback;
|
|
23
|
+
neither provides a central redirect service.
|
|
24
|
+
[Redirect configuration](https://learn.microsoft.com/en-us/entra/identity-platform/how-to-add-redirect-uri).
|
|
25
|
+
4. Open **API permissions → Add a permission → Microsoft Graph → Delegated
|
|
26
|
+
permissions**. Add the permission in the provider guide plus `offline_access`.
|
|
27
|
+
Consent remains subject to directory policy. The fragment does not need
|
|
28
|
+
`openid`, profile login or an application-permission service account.
|
|
29
|
+
[Delegated authorization flow](https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow).
|
|
30
|
+
5. Open **Certificates & secrets → Client secrets → New client secret**. Add a
|
|
31
|
+
description and expiration, then **Add**. Store **Value**, not Secret ID, in
|
|
32
|
+
private Env. Copy it before leaving the page. Microsoft recommends certificate
|
|
33
|
+
or federated credentials for production; this initial library implements
|
|
34
|
+
client-secret POST authentication only. [Credentials](https://learn.microsoft.com/en-us/entra/identity-platform/how-to-add-credentials).
|
|
35
|
+
6. In the CLI JSON or shared editor form set Client ID, **Directory (tenant) ID**,
|
|
36
|
+
the secret reference and callback reference. The tenant setting accepts the
|
|
37
|
+
applicable audience keyword above or a directory GUID. It is not a URL or
|
|
38
|
+
the Application ID. Tenant domain names and sovereign clouds are not supported. Save the configuration; run the separate OAuth flow
|
|
39
|
+
below to establish a connection. After saving, use **Set credential in Env** for the client secret and
|
|
40
|
+
**Open Env** for the exact registered callback. Shared/assistant connections
|
|
41
|
+
can use **Connect account** once the application runtime is prepared. For
|
|
42
|
+
per-user mode, each user authorizes inside that application.
|
|
43
|
+
|
|
44
|
+
## AI automation and application registrations
|
|
45
|
+
|
|
46
|
+
Classification: **API-capable after operator authorization**. An authorized
|
|
47
|
+
provisioner can create application objects through `POST /v1.0/applications`,
|
|
48
|
+
setting `displayName`, `signInAudience`, `web.redirectUris` and the required
|
|
49
|
+
resource permissions. Current create permissions include `AppRegistration.Create`;
|
|
50
|
+
tenant policy and caller roles still apply. [Create application](https://learn.microsoft.com/en-us/graph/api/application-post-applications?view=graph-rest-1.0).
|
|
51
|
+
|
|
52
|
+
It can create/rotate a secret with `POST /v1.0/applications/{object-id}/addPassword`.
|
|
53
|
+
That operation requires separate authorization: delegated `Application.ReadWrite.All`
|
|
54
|
+
or an appropriate application permission such as `Application.ReadWrite.OwnedBy`.
|
|
55
|
+
Capture the one-time `secretText` directly into private storage. Creating an
|
|
56
|
+
object does not bypass customer consent, tenant restrictions or publisher review.
|
|
57
|
+
[Add password](https://learn.microsoft.com/en-us/graph/api/application-addpassword?view=graph-rest-1.0).
|
|
58
|
+
|
|
59
|
+
Create the registration for the application being configured. Its backend owns
|
|
60
|
+
its callback route and resolves its secret from the application environment.
|
|
61
|
+
Keep development and production bindings explicit. When the callback domain
|
|
62
|
+
changes, update its Web redirect URI and environment binding before reconnecting.
|
|
63
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md).
|
|
64
|
+
|
|
65
|
+
The selected tenant and audience remain provider requirements. Editor hosting
|
|
66
|
+
does not change them or grant a shared registration. App IDs do not isolate all
|
|
67
|
+
user, tenant and service limits; see [Graph throttling](https://learn.microsoft.com/en-us/graph/throttling-limits).
|
|
68
|
+
The automation guidance above requires operator authorization and does not
|
|
69
|
+
claim a provisioning script or live registration has been tested.
|
|
70
|
+
|
|
71
|
+
## CLI and application composition
|
|
72
|
+
|
|
73
|
+
Use the imports and file-store composition from the
|
|
74
|
+
[connection pattern](../patterns/api-key-connection/PATTERN.md), replacing the
|
|
75
|
+
provider and authentication configuration. For an Outlook slot:
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"schemaVersion": 1,
|
|
80
|
+
"integrations": {
|
|
81
|
+
"inbox": {
|
|
82
|
+
"provider": "microsoft-outlook",
|
|
83
|
+
"accountMode": "per-user",
|
|
84
|
+
"scopes": ["Mail.Read", "offline_access"],
|
|
85
|
+
"settings": { "tenantId": "common" },
|
|
86
|
+
"authentication": { "method": "oauth2", "registrationRef": "microsoft" }
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"registrations": {
|
|
90
|
+
"microsoft": {
|
|
91
|
+
"source": "own",
|
|
92
|
+
"clientId": "YOUR_APPLICATION_CLIENT_ID",
|
|
93
|
+
"clientSecretRef": "env:MICROSOFT_CLIENT_SECRET",
|
|
94
|
+
"callbackUrlRef": "env:MICROSOFT_CALLBACK_URL"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Import `microsoftOutlookProvider` from
|
|
101
|
+
`@jskit-ai/connectors-catalog/server/microsoft-outlook`. Pass it to
|
|
102
|
+
`createConnectionService` along with parsed configuration, the environment
|
|
103
|
+
resolver, a private encrypted file store and the application's authorization
|
|
104
|
+
policy. The policy establishes a trusted application/subject; request body
|
|
105
|
+
IDs do not establish ownership. Use a stable shared subject only after checking
|
|
106
|
+
membership for a shared connection.
|
|
107
|
+
|
|
108
|
+
Call `beginAuthorization({ context, integrationId, verificationInput })`. Present
|
|
109
|
+
its authorization URL to that user in their browser. The existing application
|
|
110
|
+
serves the configured callback and invokes
|
|
111
|
+
`completeAuthorization({ context, integrationId, callbackUrl })`. It returns
|
|
112
|
+
Connected only after the provider's verification read succeeds. The CLI can
|
|
113
|
+
compose the same calls through an operator-owned callback server. No application
|
|
114
|
+
generator or copied OAuth implementation is needed.
|
|
115
|
+
|
|
116
|
+
Use `invoke` with the provider's named operation and validated inputs. Store
|
|
117
|
+
returned tokens only through the private runtime store, outside application
|
|
118
|
+
source. Reuse its stable encryption key across restarts. Keep bare Graph scope
|
|
119
|
+
names in configuration; `offline_access` requests refresh capability and is not
|
|
120
|
+
a permission to read Graph resources. These connectors do not establish an
|
|
121
|
+
application login session. The selected tenant controls authorization, code
|
|
122
|
+
exchange and refresh endpoints. Changing it invalidates pending attempts and
|
|
123
|
+
requires reconnecting existing grants before further API access; editing the
|
|
124
|
+
configuration cannot move a grant between tenants. Registrations must support
|
|
125
|
+
the selected audience; schema validation cannot establish a remote client's
|
|
126
|
+
registration policy.
|
|
127
|
+
|
|
128
|
+
## Paging, failures and recovery
|
|
129
|
+
|
|
130
|
+
List results retain `@odata.nextLink`. Supply it as `nextLink` with the original
|
|
131
|
+
resource input on the next call. The fragment sends its opaque query intact
|
|
132
|
+
and rejects other origins, paths, users, credentials or URL fragments. It does
|
|
133
|
+
not fetch every page automatically. Endpoint path rewrites in provider paging
|
|
134
|
+
URLs are currently rejected and would need separately verified support.
|
|
135
|
+
[Graph paging contract](https://learn.microsoft.com/en-us/graph/paging).
|
|
136
|
+
|
|
137
|
+
Cancel a pending attempt with `cancelAuthorization`; disconnect removes local
|
|
138
|
+
tokens and pending attempts. It does not revoke provider-wide consent. Provider
|
|
139
|
+
401/invalid grants require reconnection; 403 and 429 are controlled errors.
|
|
140
|
+
Rotate expiring registration secrets in Env before removing old credentials.
|
|
141
|
+
Do not log token exchange bodies. Tests cover code/state consumption, PKCE,
|
|
142
|
+
permission failures, request boundaries, encrypted file restart and refresh
|
|
143
|
+
rotation for all eight providers.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Microsoft OneDrive
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-onedrive`; export `microsoftOneDriveProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-onedrive`.
|
|
5
|
+
|
|
6
|
+
Follow all [Microsoft registration steps](microsoft-oauth.md). Choose the
|
|
7
|
+
organizational + personal account audience. In **API permissions → Microsoft
|
|
8
|
+
Graph → Delegated permissions**, add `Files.Read` and `offline_access`. Use an
|
|
9
|
+
account with a provisioned drive; this fragment does not provision OneDrive.
|
|
10
|
+
|
|
11
|
+
The verification and useful operation is `items.list`, reading
|
|
12
|
+
`/v1.0/me/drive/root/children`. Inputs: optional `pageSize` (1–100, default 25;
|
|
13
|
+
this fragment's bound) and `nextLink`. Initial selection includes ID, name, size,
|
|
14
|
+
web URL, file/folder facets and parent reference. Results retain `value` and the
|
|
15
|
+
opaque `@odata.nextLink`. Verification input is `{}`. Nested browsing uses folderId. File downloads and small uploads are described below; sharing changes remain outside this adapter.
|
|
16
|
+
[Children API](https://learn.microsoft.com/en-us/graph/api/driveitem-list-children?view=graph-rest-1.0).
|
|
17
|
+
|
|
18
|
+
AI provisioning is **API-capable after operator authorization** through the
|
|
19
|
+
application and credential endpoints documented in the common guide. Use these
|
|
20
|
+
delegated permissions and the same callback/secret fields as the CLI. The
|
|
21
|
+
application owner supplies its registration and private Env bindings; tenant/user
|
|
22
|
+
limits can overlap. Account consent and organizational policy remain provider
|
|
23
|
+
and administrator decisions.
|
|
24
|
+
|
|
25
|
+
Use the common guide's file-based library composition and ownership policy.
|
|
26
|
+
Automated fixtures cover OAuth permissions, API requests, paging, cancellation,
|
|
27
|
+
encrypted restart, rotation and denied access. No live account or generated app
|
|
28
|
+
is used. Saving the configuration is separate from establishing a connection.
|
|
29
|
+
|
|
30
|
+
## Permission choices and editor setup
|
|
31
|
+
|
|
32
|
+
The form matches the captured choices: required Files.Read; initially selected
|
|
33
|
+
Files.Read.All and Files.ReadWrite; optional Files.ReadWrite.All and
|
|
34
|
+
Files.ReadWrite.AppFolder. offline_access requests refresh capability. For read-only use, clear optional read-all/write selections. Add the same
|
|
35
|
+
selected delegated permissions to your Entra registration. The runtime retains
|
|
36
|
+
explicit Files.Read for its root listing and does not infer permission equivalence.
|
|
37
|
+
Selecting extra permissions does not implement new library operations.
|
|
38
|
+
|
|
39
|
+
AppFolder is a distinct Microsoft permission; its API creates the folder on first
|
|
40
|
+
access. This fragment never requests that endpoint during verification and does
|
|
41
|
+
not implement app-folder operations. See Microsoft's
|
|
42
|
+
[app-folder guide](https://learn.microsoft.com/en-us/graph/onedrive-sharepoint-appfolder).
|
|
43
|
+
|
|
44
|
+
The screen supplies full Entra registration, audience/tenant, Web callback and
|
|
45
|
+
secret-Value instructions. Save `env:MICROSOFT_ONEDRIVE_CLIENT_SECRET` and
|
|
46
|
+
`env:MICROSOFT_ONEDRIVE_CALLBACK_URL`, then use **Set credential in Env** and
|
|
47
|
+
**Open Env** for the actual values. Shared/assistant **Connect account** uses
|
|
48
|
+
this application's runtime; per-user consent takes place inside the application.
|
|
49
|
+
The callback and grant store remain application-owned when hosting changes.
|
|
50
|
+
|
|
51
|
+
## File operations in CLI and generated apps
|
|
52
|
+
|
|
53
|
+
`items.list({folderId})` navigates children; retain the returned nextLink for the
|
|
54
|
+
same folder. `items.get({itemId})` returns metadata and, for downloadable files,
|
|
55
|
+
`@microsoft.graph.downloadUrl`. This temporary URL itself authorizes content
|
|
56
|
+
access: give it only to the authorized app user, do not log/cache it, and never
|
|
57
|
+
forward the Microsoft bearer token to it. Download immediately using the browser
|
|
58
|
+
or the framework's native transfer client. Treat folders as navigation, not files.
|
|
59
|
+
|
|
60
|
+
`files.upload({parentId, name, bodyBase64, conflictBehavior: "fail"})` sends bytes
|
|
61
|
+
up to 5 MB. Optional replace/rename must be an explicit application choice;
|
|
62
|
+
Files.ReadWrite is required. CLI apps call the same connections.invoke operation.
|
|
63
|
+
The editor stores only configuration and Env references. Other frameworks use
|
|
64
|
+
Graph's binary PUT and their own authorization and file UI.
|
|
65
|
+
|
|
66
|
+
**LIMITATIONS:** No native transfer client execution in these tests. Large files
|
|
67
|
+
and resumable upload sessions are framework-owned: createUploadSession, transfer
|
|
68
|
+
ordered byte ranges to its uploadUrl without the Graph bearer token, track returned
|
|
69
|
+
nextExpectedRanges/expiry, and confirm the final driveItem. Keep upload URLs private.
|
|
70
|
+
This adapter does not provide that resumable loop, sharing UI, app-folder automation
|
|
71
|
+
or editor attachment. Example: a small report works; multi-gigabyte video needs
|
|
72
|
+
native transfer wiring. No live account or generated-app proof.
|
|
73
|
+
|
|
74
|
+
[Download content](https://learn.microsoft.com/en-us/graph/api/driveitem-get-content?view=graph-rest-1.0),
|
|
75
|
+
[upload content](https://learn.microsoft.com/en-us/graph/api/driveitem-put-content?view=graph-rest-1.0),
|
|
76
|
+
[upload sessions](https://learn.microsoft.com/en-us/graph/api/driveitem-createuploadsession?view=graph-rest-1.0).
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Microsoft OneNote
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-onenote`; export `microsoftOneNoteProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-onenote`.
|
|
5
|
+
|
|
6
|
+
Follow every [Microsoft registration step](microsoft-oauth.md), choosing the
|
|
7
|
+
organizational + personal account audience. Under **API permissions → Microsoft
|
|
8
|
+
Graph → Delegated permissions**, add `Notes.Read` and `offline_access`.
|
|
9
|
+
Microsoft also documents `Notes.Create` as a least-privileged option for listing
|
|
10
|
+
notebooks; this read fragment deliberately requests the supported `Notes.Read`
|
|
11
|
+
permission for its operation. To avoid authorizing creation, clear Notes.Create and the
|
|
12
|
+
optional write permissions in the editor.
|
|
13
|
+
[Notebook API](https://learn.microsoft.com/en-us/graph/api/onenote-list-notebooks?view=graph-rest-1.0).
|
|
14
|
+
|
|
15
|
+
`notebooks.list` verifies and lists `/v1.0/me/onenote/notebooks`. Initial input
|
|
16
|
+
is `{}`; optional `nextLink` follows the provider's same-resource continuation.
|
|
17
|
+
The response retains the `value` collection and paging metadata. The module
|
|
18
|
+
also provides section/page traversal, content reads and text create/append below; notebook creation remains unsupported.
|
|
19
|
+
|
|
20
|
+
AI provisioning is **API-capable after operator authorization** through the
|
|
21
|
+
application and credential APIs in the common guide. Use this connector's
|
|
22
|
+
audience and delegated permission. The AI can prepare the shared configuration
|
|
23
|
+
and callback references; tenant consent remains separate. The application owns its
|
|
24
|
+
registration, callback and private bindings, independently of its editor.
|
|
25
|
+
Tenant and resource limits still apply.
|
|
26
|
+
|
|
27
|
+
The common guide provides exact console steps, credential rotation and CLI
|
|
28
|
+
composition using installed library functions and private text-file state.
|
|
29
|
+
Automated tests cover permission selection, request shape, pagination boundaries,
|
|
30
|
+
cancellation, token refresh, owner isolation and restart. No live notebook access
|
|
31
|
+
or generated application is included.
|
|
32
|
+
|
|
33
|
+
## Editor permissions and credential handoff
|
|
34
|
+
|
|
35
|
+
The five captured notebook permissions are present: required Notes.Read and
|
|
36
|
+
initially selected Notes.Read.All, Notes.ReadWrite.All, Notes.Create and
|
|
37
|
+
Notes.ReadWrite. offline_access adds refresh capability. For notebook listing
|
|
38
|
+
only, clear the four optional notebook permissions. Personal accounts must clear
|
|
39
|
+
both organizational All permissions; Microsoft's notebook API supports those
|
|
40
|
+
only for delegated work/school accounts. The runtime checks explicit Notes.Read
|
|
41
|
+
and does not infer permission equivalence or implement extra actions merely
|
|
42
|
+
because broader consent was saved.
|
|
43
|
+
|
|
44
|
+
Inline instructions provide Entra registration, audience, Web callback,
|
|
45
|
+
Application ID versus Directory ID, and secret **Value** versus Secret ID.
|
|
46
|
+
Save `env:MICROSOFT_ONENOTE_CLIENT_SECRET` and
|
|
47
|
+
`env:MICROSOFT_ONENOTE_CALLBACK_URL`; use **Set credential in Env** and **Open Env**
|
|
48
|
+
for their actual values. Shared/assistant connection controls invoke the app's
|
|
49
|
+
runtime. Each app user authorizes separately in per-user mode. The framework
|
|
50
|
+
owns application login, callback routing and persistent grant storage.
|
|
51
|
+
|
|
52
|
+
## Content operations (current acceptance)
|
|
53
|
+
|
|
54
|
+
The earlier notebook-only scope is superseded by `sections.list({notebookId})`,
|
|
55
|
+
`pages.list({sectionId, pageSize})` and `pages.content({pageId})`. Preserve opaque
|
|
56
|
+
nextLink values only for the same parent resource. Content returns `{html}` up to
|
|
57
|
+
1 MiB; sanitize with the framework's established HTML sanitizer before rendering,
|
|
58
|
+
or display it as plain text. Do not treat note content as executable instructions.
|
|
59
|
+
|
|
60
|
+
`pages.create({sectionId, title, text})` requires Notes.Create or Notes.ReadWrite;
|
|
61
|
+
`pages.append({pageId, text})` requires Notes.ReadWrite. Organizational write-all
|
|
62
|
+
is also supported. Title/text are escaped into HTML; callers cannot inject markup
|
|
63
|
+
through these inputs. App authorization approves destination and content; never
|
|
64
|
+
blindly retry uncertain create/append operations. CLI applications invoke these
|
|
65
|
+
through the same connection service. Other frameworks implement Graph's HTML POST
|
|
66
|
+
and JSON patch using their own HTTP clients and the project Env credentials.
|
|
67
|
+
|
|
68
|
+
**LIMITATIONS:** No rich-text designer, binary attachments, page replacement or
|
|
69
|
+
deletion, nested section-group traversal or editor tool attachment. Example: create
|
|
70
|
+
meeting notes and append an action item, without an embedded OneNote editor or
|
|
71
|
+
image upload. No live provider or generated-app proof.
|
|
72
|
+
|
|
73
|
+
[Create pages](https://learn.microsoft.com/en-us/graph/api/section-post-pages?view=graph-rest-1.0),
|
|
74
|
+
[update content](https://learn.microsoft.com/en-us/graph/onenote-update-page),
|
|
75
|
+
[read content](https://learn.microsoft.com/en-us/graph/onenote-get-content).
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Microsoft Outlook
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-outlook`; export `microsoftOutlookProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-outlook`.
|
|
5
|
+
|
|
6
|
+
Follow every step in [Microsoft registration](microsoft-oauth.md), choosing the
|
|
7
|
+
organizational + personal account audience. Under **API permissions → Add a
|
|
8
|
+
permission → Microsoft Graph → Delegated permissions**, select `Mail.Read`
|
|
9
|
+
and `offline_access`. The account needs an accessible mailbox.
|
|
10
|
+
|
|
11
|
+
`folders.list` verifies the connection by reading root mail folders at
|
|
12
|
+
`/v1.0/me/mailFolders`. Inputs: optional `pageSize` (1–100, default 25),
|
|
13
|
+
`includeHiddenFolders` (default false) and `nextLink`. This does not recursively
|
|
14
|
+
traverse nested folders. [Folder API](https://learn.microsoft.com/en-us/graph/api/user-list-mailfolders?view=graph-rest-1.0).
|
|
15
|
+
|
|
16
|
+
`inbox.list` reads `/v1.0/me/mailFolders/inbox/messages`; inputs are `pageSize`
|
|
17
|
+
and `nextLink`. Its initial request selects ID, subject, sender, received time
|
|
18
|
+
and read state. The inbox list itself does not fetch message bodies or attachments, send email,
|
|
19
|
+
or change folders. The 100-item limit is this fragment's bound.
|
|
20
|
+
[Message API](https://learn.microsoft.com/en-us/graph/api/mailfolder-list-messages?view=graph-rest-1.0).
|
|
21
|
+
|
|
22
|
+
Verification input is `{}`. Both operations preserve the `value` collection and
|
|
23
|
+
paging link. In an application, choose a per-user connection for each person's
|
|
24
|
+
inbox, or an explicitly authorized shared mailbox owner. Connecting the builder
|
|
25
|
+
does not connect the application's other users.
|
|
26
|
+
|
|
27
|
+
AI provisioning is **API-capable after authorization**: create the application
|
|
28
|
+
and credentials with the Graph operations in the common guide, using these
|
|
29
|
+
delegated permissions. The application owner supplies its registration and
|
|
30
|
+
private Env bindings. Directory consent and mailbox policy remain human/provider
|
|
31
|
+
decisions. The common guide contains exact console steps, portable JSON,
|
|
32
|
+
library wiring and the limitations of app-ID quota separation.
|
|
33
|
+
|
|
34
|
+
Automated fixtures verify this endpoint, scopes, refresh, encrypted restart,
|
|
35
|
+
isolation, invalid paging destinations and controlled failures. Live mailbox use
|
|
36
|
+
is excluded. Saving configuration is separate from the editor Connect action, which invokes
|
|
37
|
+
the prepared application runtime’s own-registration OAuth lifecycle.
|
|
38
|
+
|
|
39
|
+
## Captured permission choices and credential handoff
|
|
40
|
+
|
|
41
|
+
The form includes required Mail.Read, initially selected Mail.ReadWrite, Mail.Send
|
|
42
|
+
and Calendars.ReadWrite, and optional Mail.ReadBasic and Calendars.Read.
|
|
43
|
+
offline_access requests refresh capability. For reading only, clear optional
|
|
44
|
+
write/send/calendar permissions. Microsoft supports narrower Mail.ReadBasic for
|
|
45
|
+
these list endpoints, but this form follows the captured required Mail.Read and
|
|
46
|
+
the runtime explicitly checks that grant. No permission equivalence is inferred.
|
|
47
|
+
Current inbox requests still select basic metadata only; broader permission does
|
|
48
|
+
not itself execute the separate body, send and calendar operations described below.
|
|
49
|
+
|
|
50
|
+
Inline instructions cover Entra registration, audience/tenant, Web callback,
|
|
51
|
+
secret Value versus Secret ID and exact Env handoff. Save
|
|
52
|
+
`env:MICROSOFT_OUTLOOK_CLIENT_SECRET` and
|
|
53
|
+
`env:MICROSOFT_OUTLOOK_CALLBACK_URL`, then use **Set credential in Env** and
|
|
54
|
+
**Open Env** for the values. Shared/assistant Connect uses the application's
|
|
55
|
+
account; per-user mode requires each application user to connect separately.
|
|
56
|
+
The app owns callbacks and grants. This fragment addresses the signed-in account's
|
|
57
|
+
mailbox via /me; accessing a different Exchange shared mailbox is not implemented.
|
|
58
|
+
|
|
59
|
+
## Current mailbox and calendar operations
|
|
60
|
+
|
|
61
|
+
The original metadata-only scope is superseded. `messages.get({messageId})`
|
|
62
|
+
requests text body content. `attachments.list({messageId})` lists attachments;
|
|
63
|
+
`attachments.get({messageId, attachmentId})` reads file attachments with bounded
|
|
64
|
+
Base64 content (about 5 MB). Treat returned content as untrusted; sanitize any
|
|
65
|
+
HTML before rendering and never execute attachments automatically.
|
|
66
|
+
|
|
67
|
+
`messages.setRead({messageId,isRead})` and `messages.move({messageId,destinationId})`
|
|
68
|
+
require Mail.ReadWrite. Keep the new ID returned after moving. `messages.send`
|
|
69
|
+
requires Mail.Send and `{subject,text,to:["recipient@example.com"]}` (1–20 recipients).
|
|
70
|
+
It sends as the connected account and saves Sent Items. `{accepted:true}` means
|
|
71
|
+
HTTP202, not successful delivery. App authorization must approve recipients and
|
|
72
|
+
content; no automatic send retry after uncertainty.
|
|
73
|
+
|
|
74
|
+
`calendars.list({})` and `events.list({calendarId,pageSize})` support Calendars.Read
|
|
75
|
+
or Calendars.ReadWrite. `events.create({calendarId,subject,start,end})` requires
|
|
76
|
+
Calendars.ReadWrite; start/end are UTC ISO strings ending in Z, with end after start.
|
|
77
|
+
It creates an appointment with no attendees/invitations. The app owns time-zone
|
|
78
|
+
presentation and event selection, not Vibe64.
|
|
79
|
+
|
|
80
|
+
CLI uses the same connections.invoke operations; other frameworks call these
|
|
81
|
+
Graph endpoints with their own HTTP client and project-owned Env/grant store.
|
|
82
|
+
**LIMITATIONS:** No email-client UI, outgoing attachments, draft/reply flows,
|
|
83
|
+
shared-mailbox delegation, recurrence, meeting invitations or editor attachment.
|
|
84
|
+
Embedded-item/large attachments need native Graph wiring. Example: send a receipt
|
|
85
|
+
and create an appointment, but no Outlook replacement. No live/generated-app proof.
|
|
86
|
+
|
|
87
|
+
[Send mail](https://learn.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0),
|
|
88
|
+
[move](https://learn.microsoft.com/en-us/graph/api/message-move?view=graph-rest-1.0),
|
|
89
|
+
[attachments](https://learn.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0),
|
|
90
|
+
[events](https://learn.microsoft.com/en-us/graph/api/user-post-events?view=graph-rest-1.0).
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Microsoft PowerPoint
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-powerpoint`; export `microsoftPowerPointProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-powerpoint`. This initial adapter browses
|
|
5
|
+
presentation files and folders in the connected account's default drive, and reads
|
|
6
|
+
file metadata. It does not read or edit presentation contents, download files,
|
|
7
|
+
execute macros, create files or change sharing. A filename extension identifies
|
|
8
|
+
a candidate file; it is not a check of the file's actual format.
|
|
9
|
+
|
|
10
|
+
## Registration and configuration
|
|
11
|
+
|
|
12
|
+
Follow the complete [Microsoft registration steps](microsoft-oauth.md).
|
|
13
|
+
Use **Any Entra ID Tenant + Personal Microsoft accounts** with `common`, or the
|
|
14
|
+
matching organizational, personal-only or single-directory option in that guide.
|
|
15
|
+
For one directory, copy **Directory (tenant) ID** into `settings.tenantId`.
|
|
16
|
+
Under **API permissions → Add a permission → Microsoft Graph → Delegated
|
|
17
|
+
permissions**, select `Files.Read` and `offline_access`. Then configure the
|
|
18
|
+
Web callback, create a client secret and store its Value through the referenced
|
|
19
|
+
Env variable. Use an account with an existing drive; JSKIT does not provision it.
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"schemaVersion": 1,
|
|
24
|
+
"integrations": {
|
|
25
|
+
"files": {
|
|
26
|
+
"provider": "microsoft-powerpoint",
|
|
27
|
+
"accountMode": "per-user",
|
|
28
|
+
"scopes": [
|
|
29
|
+
"Files.Read",
|
|
30
|
+
"offline_access"
|
|
31
|
+
],
|
|
32
|
+
"settings": {
|
|
33
|
+
"tenantId": "common"
|
|
34
|
+
},
|
|
35
|
+
"authentication": {
|
|
36
|
+
"method": "oauth2",
|
|
37
|
+
"registrationRef": "microsoft"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"registrations": {
|
|
42
|
+
"microsoft": {
|
|
43
|
+
"source": "own",
|
|
44
|
+
"clientId": "YOUR_APPLICATION_CLIENT_ID",
|
|
45
|
+
"clientSecretRef": "env:MICROSOFT_CLIENT_SECRET",
|
|
46
|
+
"callbackUrlRef": "env:MICROSOFT_CALLBACK_URL"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The same values are editable in Vibe64: display name, account ownership, tenant,
|
|
53
|
+
Client ID, secret/callback references and the two permission choices. Saving the
|
|
54
|
+
file does not open provider consent. The [OAuth composition pattern](../patterns/oauth-connection/PATTERN.md)
|
|
55
|
+
uses the library for consent, private encrypted text storage and runtime access.
|
|
56
|
+
A per-user slot uses the app's authenticated subject. A shared slot uses the
|
|
57
|
+
host's membership policy and stable shared subject; it is a shared account.
|
|
58
|
+
|
|
59
|
+
## Runtime operations
|
|
60
|
+
|
|
61
|
+
- `items.list`: optional `folderId`, `pageSize` (1–100, default 25) and `nextLink`.
|
|
62
|
+
Without `folderId`, reads `/v1.0/me/drive/root/children`; otherwise reads
|
|
63
|
+
`/v1.0/me/drive/items/{folderId}/children`. Keeps folders and files whose
|
|
64
|
+
extensions are ppt, pptx, pptm, pot, potx, potm, pps, ppsx, ppsm, case-insensitively.
|
|
65
|
+
- `items.get`: required `itemId`, reading `/v1.0/me/drive/items/{itemId}`.
|
|
66
|
+
Returns a matching file's metadata. Other file types and folders produce
|
|
67
|
+
`connector_document_type_invalid`.
|
|
68
|
+
|
|
69
|
+
Both operations require `Files.Read`. IDs must be opaque item IDs, not paths or
|
|
70
|
+
URLs. Selected metadata includes ID, name, size, web URL, file/folder facets,
|
|
71
|
+
parent reference, last modification time and ETag. The adapter does not follow
|
|
72
|
+
returned URLs. [Graph children API](https://learn.microsoft.com/en-us/graph/api/driveitem-list-children?view=graph-rest-1.0),
|
|
73
|
+
[Graph item API](https://learn.microsoft.com/en-us/graph/api/driveitem-get?view=graph-rest-1.0).
|
|
74
|
+
|
|
75
|
+
`items.list` verifies a new connection with input `{}`. Its page size bounds the
|
|
76
|
+
upstream page before local file filtering. A filtered page can be empty and
|
|
77
|
+
still have `@odata.nextLink`: retain that link and pass it with the same folder
|
|
78
|
+
input to continue. It is not a recursive search or an automatic full-drive scan.
|
|
79
|
+
Next links cannot change Graph origin or the selected resource path.
|
|
80
|
+
|
|
81
|
+
## Application registration and AI provisioning
|
|
82
|
+
|
|
83
|
+
AI provisioning is **API-capable after operator authorization** using the
|
|
84
|
+
application and credential endpoints in the common guide. Registration remains
|
|
85
|
+
separate from account consent and tenant administrator policy.
|
|
86
|
+
|
|
87
|
+
Register the callback served by this application's backend. Store its exact URL
|
|
88
|
+
and client secret in application environment bindings. The same setup works with
|
|
89
|
+
a CLI, installed editor or hosted editor; none supplies a shared registration.
|
|
90
|
+
See the [callback guide](../../connectors-core/docs/oauth-callbacks.md) for domain
|
|
91
|
+
changes and reconnect behavior. Keep the selected Microsoft tenant/audience
|
|
92
|
+
consistent with the provider registration.
|
|
93
|
+
|
|
94
|
+
## Evidence and limits
|
|
95
|
+
|
|
96
|
+
Focused fixtures cover consent, cancellation, encrypted restart, refresh,
|
|
97
|
+
reduced permissions, owner isolation, tenant changes, folder paging, empty
|
|
98
|
+
filtered pages, metadata validation and controlled provider failures. Provider
|
|
99
|
+
HTTP is simulated. No live account, provider registration or generated app is
|
|
100
|
+
used. Provider-console administration and live account acceptance remain
|
|
101
|
+
outside this fixture evidence.
|
|
102
|
+
|
|
103
|
+
## Editor credential handoff
|
|
104
|
+
|
|
105
|
+
The inline guide supplies Entra registration, account audience, Web callback,
|
|
106
|
+
delegated permissions, secret Value and expiry steps. Save
|
|
107
|
+
`env:MICROSOFT_POWERPOINT_CLIENT_SECRET` and
|
|
108
|
+
`env:MICROSOFT_POWERPOINT_CALLBACK_URL`; use **Set credential in Env** and
|
|
109
|
+
**Open Env** to store the values. Shared/assistant **Connect account** invokes
|
|
110
|
+
the prepared application runtime. Per-user connections belong to individual
|
|
111
|
+
users inside that application. No Vibe64 gateway or shared registration is used.
|
|
112
|
+
|
|
113
|
+
## Existing-scope closeout — 13 September 2026
|
|
114
|
+
|
|
115
|
+
Delegated project-owned OAuth browses default-drive folders and PowerPoint candidate filenames and fetches selected file metadata, with bounded paging, tenant/audience configuration and refreshed private grants.
|
|
116
|
+
|
|
117
|
+
No slide/presentation content reading, creation/editing, upload/download, conversion, macros, sharing, recursive search, arbitrary drive/site selection or file format validation. Filename extension filtering is not content inspection; filtered empty pages can still have a continuation. No app-only/client-credentials or device-code grant, application login or automatic remote consent revocation. The app owns callback routes, account connection UI, authorization and file-picker/pagination behavior. Exact Lovable shared-form fields/scopes remain unverified because the saved shared-form reference is a loading placeholder. To extend: use supported native presentation tooling and file transfer, proving actual slide changes, conflict handling and format preservation; no invented Graph slide-editing endpoint. No live provider account, provider registration, paid request or generated-application execution was tested. No new editor coding-assistant tool attachment is claimed. Other frameworks use the same project configuration and their own native tools; JSKIT is optional.
|
|
118
|
+
|
|
119
|
+
7 provider-specific source and 7 installed-package cases passed, plus 2 shared Microsoft tenant checks in each 16-test Word/PowerPoint run on September 13. September 12 rendered guidance/form/lifecycle evidence at 496px is retained; no new phone or browser run.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Microsoft SharePoint
|
|
2
|
+
|
|
3
|
+
Provider ID `microsoft-sharepoint`; export `microsoftSharePointProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/microsoft-sharepoint`.
|
|
5
|
+
|
|
6
|
+
Follow all [Microsoft registration steps](microsoft-oauth.md), choosing
|
|
7
|
+
**Multiple Entra ID tenants**. The module uses the `organizations` authority;
|
|
8
|
+
personal Microsoft accounts are unsupported. Under **API permissions → Microsoft
|
|
9
|
+
Graph → Delegated permissions**, add `Sites.Read.All`, `User.Read` and `offline_access`.
|
|
10
|
+
The form requires site read and profile read; site search itself uses only
|
|
11
|
+
`Sites.Read.All`. Optional site write and file read start selected. Clear them
|
|
12
|
+
for a search-only application. Site manage, full control and file write are
|
|
13
|
+
also available, but selecting permissions does not implement those operations.
|
|
14
|
+
Site access remains limited by the signed-in user's rights and tenant policy.
|
|
15
|
+
|
|
16
|
+
`sites.search` calls `/v1.0/sites?search={query}`. Pass
|
|
17
|
+
`{ "search": "your site search text" }` as verification input before consent.
|
|
18
|
+
The required nonempty search has a 1024-character fragment bound. Results retain
|
|
19
|
+
the site `value` collection and any paging metadata; use optional `nextLink`
|
|
20
|
+
for same-resource continuation with the original search input. Empty results
|
|
21
|
+
are a successful authorized search, not proof of a particular site's existence.
|
|
22
|
+
This fragment does not edit sites, crawl documents or implement selected-site
|
|
23
|
+
application permissions. [Site search API](https://learn.microsoft.com/en-us/graph/api/site-search?view=graph-rest-1.0).
|
|
24
|
+
|
|
25
|
+
AI provisioning is **API-capable after operator authorization**, using the
|
|
26
|
+
application/credential APIs and these delegated permissions. The common guide
|
|
27
|
+
details console navigation, application-owned client ID and private secret/callback
|
|
28
|
+
references, and limitations of quota separation. Creating an app does not grant
|
|
29
|
+
the user access to additional sites.
|
|
30
|
+
|
|
31
|
+
Compose the same library operations and private file store from a CLI or an
|
|
32
|
+
application backend, using an authenticated application/subject policy.
|
|
33
|
+
Automated fixtures verify required search input, query encoding, organizational
|
|
34
|
+
OAuth, permission failure, paging boundaries, cancellation, refresh and restart.
|
|
35
|
+
No live tenant access or generated application is used.
|
|
36
|
+
|
|
37
|
+
## Editor credential handoff
|
|
38
|
+
|
|
39
|
+
The inline guide covers Entra registration, organizational audience, exact Web
|
|
40
|
+
callback, delegated permissions and secret Value. Save the configuration with
|
|
41
|
+
`env:MICROSOFT_SHAREPOINT_CLIENT_SECRET` and
|
|
42
|
+
`env:MICROSOFT_SHAREPOINT_CALLBACK_URL`. Use **Set credential in Env** and
|
|
43
|
+
**Open Env** to store their values, then enter **Site search** and connect.
|
|
44
|
+
Shared/assistant connections belong to this project; per-user connections belong
|
|
45
|
+
to authenticated users of the generated app. No editor-owned registration or
|
|
46
|
+
gateway is involved. Rotate secrets before expiry and reconnect after consent
|
|
47
|
+
changes. Local disconnect does not revoke Microsoft consent.
|
|
48
|
+
|
|
49
|
+
## Current document and list operations
|
|
50
|
+
|
|
51
|
+
From `sites.search`, pass the returned siteId to `libraries.list` or `lists.list`.
|
|
52
|
+
`files.list({driveId,folderId?,pageSize?})` browses libraries. `files.get({driveId,itemId})`
|
|
53
|
+
returns metadata and a private temporary download URL. Download through the native
|
|
54
|
+
browser/client without the Microsoft Authorization header; do not log/cache the URL.
|
|
55
|
+
`files.upload({driveId,parentId,name,bodyBase64,conflictBehavior?})` reuses the OneDrive
|
|
56
|
+
binary-transfer implementation, capped at 5 MB, default conflict fail. Replacing
|
|
57
|
+
existing files requires explicit app approval. Sites.ReadWrite.All is required.
|
|
58
|
+
|
|
59
|
+
`listItems.list({siteId,listId,pageSize?})` expands fields; retain the item ETag.
|
|
60
|
+
`listItems.create({siteId,listId,fields})` and
|
|
61
|
+
`listItems.update({siteId,listId,itemId,fields,eTag})` use Sites.ReadWrite.All.
|
|
62
|
+
Fields use internal column names, up to 100 scalar values/64 KiB. Update sends
|
|
63
|
+
If-Match; on 412 reload and review the competing change. Do not automatically
|
|
64
|
+
repeat uncertain writes. CLI uses the same connection service; other frameworks
|
|
65
|
+
call Graph with their own HTTP clients and the same project Env ownership.
|
|
66
|
+
|
|
67
|
+
**LIMITATIONS:** No site-collection creation, admin UI, complex field editors,
|
|
68
|
+
sharing/permission editor or editor tool attachment. Native downloads and large
|
|
69
|
+
resumable transfers are documented composition, not executed here. Example: update
|
|
70
|
+
a status list/upload a report, without a SharePoint site builder. No live/generated-app proof.
|
|
71
|
+
|
|
72
|
+
[Libraries](https://learn.microsoft.com/en-us/graph/api/drive-list?view=graph-rest-1.0),
|
|
73
|
+
[list items](https://learn.microsoft.com/en-us/graph/api/listitem-list?view=graph-rest-1.0),
|
|
74
|
+
[create](https://learn.microsoft.com/en-us/graph/api/listitem-create?view=graph-rest-1.0),
|
|
75
|
+
[update](https://learn.microsoft.com/en-us/graph/api/listitem-update?view=graph-rest-1.0).
|