Premium

Microsoft 365 / Outlook adapter

Connect Microsoft calendars through the premium interoperability adapter. Delta queries and conditional writes support incremental change handling while the application retains control over authorization and reconciliation.

Microsoft 365 / Outlook adapter — Screenshot of actual package adapter results using local test responses. The result table is application-owned, not a built-in screen or a live provider connection. Preview build: @wts-calendar/core@1.1.0 (unpublished).
Screenshot of actual package adapter results using local test responses. The result table is application-owned, not a built-in screen or a live provider connection. Preview build: @wts-calendar/core@1.1.0 (unpublished).

What you configure

createMicrosoft365Adapter
Supply a runtime access-token provider and optional calendarId.
timeZone / timeZoneMap
Choose display-zone behavior and map uncommon Windows time-zone identifiers.
delta cursor
Retain the provider's delta link together with the prior remote snapshot.

Integration code example

  1. Obtain customer-managed Microsoft authorization separately from the WTS entitlement.
  2. Create the adapter, pull the required range, and inspect normalized event metadata.
  3. Reconcile local/remote changes and apply intended writes through your application's sync workflow.

Copy this TypeScript into your application, not the browser console. Replace YOUR_WTS_LICENSE_KEY with an entitlement issued for your deployment origin. A WTS license is not a Google, Microsoft or CalDAV credential. These examples are documentation only and never execute on this page.

Install command
npm install @wts-calendar/core
TypeScript integration
import { verifyCalendarLicense } from '@wts-calendar/core';
import { PremiumCalendarInteroperability } from '@wts-calendar/core/premium-interoperability';
import type {
  CalendarSynchronizationRequest,
  CalendarInteropMutation,
} from '@wts-calendar/core/premium-interoperability';
const license = await verifyCalendarLicense('YOUR_WTS_LICENSE_KEY');
const interoperability = new PremiumCalendarInteroperability({ license });

// Call after your application obtains an authorized session.
export function connectOutlook(getAccessToken: () => string | Promise<string>) {
  const adapter = interoperability.createMicrosoft365Adapter({
    accessToken: getAccessToken, // Default calendar; optionally supply calendarId.
    timeZone: 'UTC',
  });
  return {
    // Initial sync: omit cursor. For deltas, supply the retained remoteBase snapshot.
    preview: (request: CalendarSynchronizationRequest) =>
      interoperability.synchronize(adapter, {
        ...request,
        conflictPolicy: 'manual',
        push: false,
      }),
    // Call only after the user resolves conflicts and approves the mutation plan.
    commit: (mutations: readonly CalendarInteropMutation[], signal?: AbortSignal) =>
      adapter.push(mutations, signal ? { signal } : {}),
  };
}

// Example call in your session handler (do not use the WTS key as an OAuth token):
// const connection = connectOutlook(getAccessToken);
// const plan = await connection.preview({
//   start: '2026-09-01T00:00:00Z', end: '2026-10-01T00:00:00Z',
//   base: lastCommonEvents, local: currentEvents,
// });
// Show plan.reconciliation.conflicts and plan.mutations in your UI.
// After approval, await connection.commit(approvedMutations).
// Pull again and retain the fresh remote IDs/ETags, cursor and common base.

Application responsibilities

Supply getAccessToken from your own OAuth connection. Use a read/write calendar grant, keep access tokens in memory, and handle expiration or revocation. Never put a client secret or refresh token into browser code.

Start with the last common event base and current local events. On incremental pulls, retain the complete remoteBase snapshot as well as the cursor. A delta response alone is not a full snapshot.

Preview does not write to the provider. Resolve every manual conflict before committing reviewed mutations; catch network and ETag conflict errors and refresh instead of blindly overwriting. Re-pull after successful writes before updating sync state.

The package does not schedule background sync, obtain OAuth consent, or persist session state. Disconnect and abort pending requests when the user signs out.

Provide timeZoneMap when your tenant returns a Windows time-zone name that is not built into the adapter.

Behavior and lifecycle

  • The adapter maps deletions, cancellations, all-day events, and supported event metadata.
  • Create, update, and delete operations retain conditional version handling through ETags.

Limits and responsibilities

  • Tenant permissions, authentication, and provider availability are outside the WTS license.
  • Supply mappings for tenant-specific or uncommon time zones and validate them with representative events.
Premium

Enable this capability

Optional module
@wts-calendar/core/premium-interoperability
Signed entitlement
premium-interoperability

Request the required features and deployment origins by email. Pricing and terms are confirmed privately. A WTS license is separate from provider credentials; do not send passwords or production access tokens.

Email for a license key →

This public guide does not execute Premium modules or collect license tokens.