# ionic-team/cordova-outsystems-calendar architecture

> Architecture diagram of the GitHub repository ionic-team/cordova-outsystems-calendar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ionic-team/cordova-outsystems-calendar
- Repository: https://github.com/ionic-team/cordova-outsystems-calendar

## Overview

OutSystems client actions wrap a cross-platform Cordova calendar plugin. The central flow is an OutSystems action invoking the plugin API, whose platform bridge handles permissions and dispatches calendar operations to native code; native implementations use EventKit on iOS and CalendarContract on Android. The README documents create, find, modify, and remove events and calendars. Wrapper excerpts show create and find dispatch, but most wrapper scripts and parts of native dispatch are unsampled, so uncertain links are omitted.

Main entry points: [`packages/cordova-plugin/ios/OSCalendarPlugin.swift`](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/OSCalendarPlugin.swift) (iOS dispatcher), [`packages/cordova-plugin/src/bridge.ts`](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/src/bridge.ts) (Cordova bridge), [`packages/outsystems-wrapper/src`](https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src) (Calendar actions), [`packages/outsystems-wrapper/src/CreateEvent.js`](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/outsystems-wrapper/src/CreateEvent.js) (Create event action)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_outsystems["OutSystems actions"]
  node_wrapper["Calendar actions"]
  node_jscreate["Create event action<br/>[CreateEvent.js]"]
  node_jsfind["Find event action<br/>[FindEvent.js]"]
  node_jsdelete["Delete event actions"]
  node_jscal["Calendar actions"]
end

subgraph group_api["Plugin API"]
  node_types["API definitions<br/>[definitions.ts]"]
  node_bridge["Cordova bridge<br/>[bridge.ts]"]
end

subgraph group_android["Android implementation"]
  node_androidbridge["Android dispatcher"]
  node_androidcal["Android calendar logic<br/>[Calendar.kt]"]
  node_androiderrors["Android errors<br/>[CalendarError.kt]"]
end

subgraph group_ios["iOS implementation"]
  node_iosbridge["iOS dispatcher"]
  node_ioscal["iOS calendar logic<br/>[Calendar.swift]"]
  node_ioserrors["iOS errors"]
end

node_app(("OutSystems app"))
node_cordova["Cordova plugin runtime"]
node_calendarcontract[("CalendarContract")]
node_eventkit[("EventKit")]
node_systemui["System calendar UI"]

node_app -->|"uses"| node_wrapper
node_wrapper -->|"runs"| node_jscreate
node_wrapper -->|"runs"| node_jsfind
node_jscreate -->|"calls event API"| node_cordova
node_jsfind -->|"calls find API"| node_cordova
node_jscreate -.->|"may call"| node_bridge
node_jsfind -.->|"may call"| node_bridge
node_bridge -->|"uses types"| node_types
node_bridge -->|"dispatches commands"| node_cordova
node_cordova -.->|"routes commands"| node_androidbridge
node_cordova -.->|"routes commands"| node_iosbridge
node_androidbridge -->|"delegates operations"| node_androidcal
node_androidbridge -->|"reports errors"| node_androiderrors
node_androidcal -.->|"reads and writes"| node_calendarcontract
node_iosbridge -->|"delegates operations"| node_ioscal
node_iosbridge -.->|"reports errors"| node_ioserrors
node_ioscal -.->|"reads and writes"| node_eventkit
node_iosbridge -->|"opens editor"| node_systemui

click node_wrapper "https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src"
click node_jscreate "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/outsystems-wrapper/src/CreateEvent.js"
click node_jsfind "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/outsystems-wrapper/src/FindEvent.js"
click node_jsdelete "https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src"
click node_jscal "https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src"
click node_types "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/src/definitions.ts"
click node_bridge "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/src/bridge.ts"
click node_androidbridge "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/OSCalendarPlugin.kt"
click node_androidcal "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/Calendar.kt"
click node_androiderrors "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/CalendarError.kt"
click node_iosbridge "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/OSCalendarPlugin.swift"
click node_ioscal "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/Calendar.swift"
click node_ioserrors "https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/CalendarError.swift"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_wrapper,node_jscreate,node_jsfind,node_jsdelete,node_jscal,node_systemui toneBlue
class node_types,node_bridge,node_calendarcontract,node_eventkit toneAmber
class node_androidbridge,node_androidcal,node_androiderrors toneMint
class node_iosbridge,node_ioscal,node_ioserrors toneRose
class node_app,node_cordova toneIndigo
```

## Components

### OutSystems actions

- [Calendar actions](https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src): `packages/outsystems-wrapper/src`
- [Create event action](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/outsystems-wrapper/src/CreateEvent.js): `packages/outsystems-wrapper/src/CreateEvent.js`
- [Find event action](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/outsystems-wrapper/src/FindEvent.js): `packages/outsystems-wrapper/src/FindEvent.js`
- [Delete event actions](https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src): `packages/outsystems-wrapper/src`
- [Calendar actions](https://github.com/ionic-team/cordova-outsystems-calendar/tree/main/packages/outsystems-wrapper/src): `packages/outsystems-wrapper/src`

### Plugin API

- [API definitions](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/src/definitions.ts): `packages/cordova-plugin/src/definitions.ts`
- [Cordova bridge](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/src/bridge.ts): `packages/cordova-plugin/src/bridge.ts`

### Android implementation

- [Android dispatcher](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/OSCalendarPlugin.kt): `packages/cordova-plugin/android/OSCalendarPlugin.kt`
- [Android calendar logic](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/Calendar.kt): `packages/cordova-plugin/android/Calendar.kt`
- [Android errors](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/android/CalendarError.kt): `packages/cordova-plugin/android/CalendarError.kt`

### iOS implementation

- [iOS dispatcher](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/OSCalendarPlugin.swift): `packages/cordova-plugin/ios/OSCalendarPlugin.swift`
- [iOS calendar logic](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/Calendar.swift): `packages/cordova-plugin/ios/Calendar.swift`
- [iOS errors](https://github.com/ionic-team/cordova-outsystems-calendar/blob/main/packages/cordova-plugin/ios/CalendarError.swift): `packages/cordova-plugin/ios/CalendarError.swift`

### Other components

- **OutSystems app**
- **Cordova plugin runtime**
- **CalendarContract**
- **EventKit**
- **System calendar UI**

## Connections

- OutSystems app → Calendar actions: uses (evidence: `packages/outsystems-wrapper/src/CreateEvent.js`)
- Calendar actions → Create event action: runs (evidence: `packages/outsystems-wrapper/src/CreateEvent.js`)
- Calendar actions → Find event action: runs (evidence: `packages/outsystems-wrapper/src/FindEvent.js`)
- Create event action → Cordova plugin runtime: calls event API (evidence: `packages/outsystems-wrapper/src/CreateEvent.js`)
- Find event action → Cordova plugin runtime: calls find API (evidence: `packages/outsystems-wrapper/src/FindEvent.js`)
- Create event action → Cordova bridge: may call
- Find event action → Cordova bridge: may call
- Cordova bridge → API definitions: uses types (evidence: `packages/cordova-plugin/src/bridge.ts`)
- Cordova bridge → Cordova plugin runtime: dispatches commands (evidence: `packages/cordova-plugin/src/bridge.ts`)
- Cordova plugin runtime → Android dispatcher: routes commands
- Cordova plugin runtime → iOS dispatcher: routes commands
- Android dispatcher → Android calendar logic: delegates operations (evidence: `packages/cordova-plugin/android/OSCalendarPlugin.kt`)
- Android dispatcher → Android errors: reports errors (evidence: `packages/cordova-plugin/android/OSCalendarPlugin.kt`)
- Android calendar logic → CalendarContract: reads and writes
- iOS dispatcher → iOS calendar logic: delegates operations (evidence: `packages/cordova-plugin/ios/OSCalendarPlugin.swift`)
- iOS dispatcher → iOS errors: reports errors (evidence: `packages/cordova-plugin/ios/OSCalendarPlugin.swift`)
- iOS calendar logic → EventKit: reads and writes
- iOS dispatcher → System calendar UI: opens editor (evidence: `packages/cordova-plugin/ios/OSCalendarPlugin.swift`)
