All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
- Added clarification that
id
field values SHOULD always be strings to context schema definition (a restriction that can't easily be represented in the generated types). (#1149) - Added requirement that Standard versions SHOULD avoid the use unions in context and API definitions wherever possible as these can be hard to replicate and MUST avoid unions of primitive types as these can be impossible to replicate in other languages. (#120)
- Added
addEventListener
to theDesktopAgent
API to provide support for event listener for non-context and non-intent events, including auserChannelChanged
event (#1207) - Added an
async
addEventListener
function to thePrivateChannel
API to replace the deprecated, synchronousonAddContextListener
,onUnsubscribe
andonDisconnect
functions and to keep consistency with the DesktopAgent API. (#1305) - Added reference materials and supported platforms information for FDC3 in .NET via the finos/fdc3-dotnet project. (#1108)
- Specifications for getAgent() and Browser-Resident Desktop Agents. (#1191)
- Specification for Preload Desktop Agents. This content was previously in the supported platforms section. It had been revised and amended to include recommended behavior related to the new validateAppIdentity() function. (#1191)
- Added optional validateAppIdentity() function to DesktopAgent interface. (#1191)
- Typescript definitions for getAgent() and related types. (#1191)
- Typescript definitions for Desktop Agent Communication Protocol (DACP). These constitute the internal "wire protocol" that the "@finos/fdc3" library uses to communicate with Browser-Resident DAs. (#1191)
- Typescript definitions for Web Connection Protocol (WCP). These constitute the messages used to establish connectivity between "@finos/fdc3" and a Browser-Resident DA. (#1191)
- Added support for broadcast actions to the
fdc3.action
context type, allowing an Action to represent the broadcast of a specified context to an app or user channel. (#1368) - Added utility functions
isStandardContextType(contextType: string)
,isStandardIntent(intent: string)
,getPossibleContextsForIntent(intent: StandardIntent)
. (#1139) - Added support for event listening outside of intent or context listnener. Added new function
addEventListener
, typeEventHandler
, enumFDC3EventType
and interfacesFDC3Event
andFDC3ChannelChangedEvent
. (#1207) - Added new
CreateOrUpdateProfile
intent. (#1359)
window.fdc3
is now an optional property and may or may not be defined. Applications should now usegetAgent()
as the recommended way of retrieving a reference to the FDC3 API. (#1386)Listener.unsubscribe()
was made async (the return type was changed fromvoid
toPromise<void>
) for consistency with the rest of the API. (#1305)- Added reference materials and supported platforms information for FDC3 in .NET via the finos/fdc3-dotnet project. (#1108)
- The supported platforms page in the FDC3 documentation was moved into the API section as the information it provides all relates to FDC3 Desktop Agent API implementations. (#1108)
- FDC3 apps are now encouraged to instantiate their FDC3 interface (DesktopAgent) using the
getAgent()
function provided by the@finos/fdc3
module. This will allow apps to interoperate in either traditional Preload DAs (i.e. Electron) as well as the new Browser-Resident DAs. (#1191) ContextType
andIntent
(string
) types were created for use in DesktopAgent API signatures - they are unions of standardized values andstring
, enabling autocomplete/IntelliSense in IDEs when working with the FDC3 API. (#1139)
- Made
IntentMetadata.displayName
optional as it is deprecated. (#1280) - Deprecated
PrivateChannel
's synchronousonAddContextListener
,onUnsubscribe
andonDisconnect
functions in favour of anasync
addEventListener
function consistent with the one added toDesktopAgent
in #1207. (#1305) - The
ContextTypes
andIntents
enums were deprecated in favour of the new ContextType and Intent unions. (#1139)
- Spin off fileAttachment into its own schema, and correct related examples (1255)
- Added missing
desktopAgent
field to ImplementationMetadata objects returned for all agents connect to a DesktopAgent bridge in Connection Step 6 connectAgentsUpdate messages and refined the schema used to collect this info in step 3 handshake. (#1177) - Removed the
version
field fromIntentResolution
as there are no version fields for intents in the FDC3 API definitions and hence the field has no purpose. (#1170) - Fixed error in the Client-side example from
PrivateChannel
andaddIntentListener
by correctingid.symbol
toid.ticker
to align with thefdc3.instrument
context. (#1314) - Added missing
resultType
argument tofindIntent
agent request in the Bridging Schema. (#1154) - Added missing
resultType
argument tofindIntentByContext
agent request in the Bridging Schema. (#1212) - Added missing id and name fields from the context base schema to respective context schemas (
Contact
,ContactList
,Country
,InstrumentList
,OrderList
,Organization
,Portfolio
,Position
,TradeList
). (#1360) - Revised FDC3 charter to include well-known language from the FDC3 introduction, better describe FDC3's scope, focus on financial applications, update application types, etc. (#1079)
- Ensured that
PrivateChannelEvent
extendsApiEvent
in both sourcecode and documentation. (#1474)
- Corrected inconsistent camel-casing of the
fdc3.timeRange
context type which appeared asfdc3.timerange
in a number of places. (#1240) - Corrected an error in the
fdc3.TransactionResult
schema which resulted in themessage
property being omitted from the generated TypeScript types for it. (#1251)
FDC3 Standard 2.1 - 2023-09-13
- Added
CreateInteraction
intent. To be used when a user wants to record an interaction into a system. New contextInteraction
also introduced. An interaction might be a call, IM, email, a meeting (physical or virtual) or the preparation of some specialist data. (#747) - Added
TransactionResult
context. A context type representing the result of a transaction initiated via FDC3. Its purpose is to provide a status and message (where needed) for the transaction and MAY wrap a returned context object. ([#761] (#761)) - Added a
MalformedContext
error to theOpenError
,ChannelError
andResolveError
enumerations, to be used whenbroadcast
,open
,findIntents
,raiseIntents
, and other related functions are passed an invalid context Object. (#972) - Added error examples to the /v2 App Directory API routes (#973)
- Added a
SendChatMessage
intent to be used when a user wants to send a message to an existing chat room. (#794) - Added a context type representing a chat message (
fdc3.chat.message
). (#794) - Added a context type representing a chat room (
fdc3.chat.room
). (#794) - Added a chat
Message
type in order to describe messages with rich content and attachments. (#779) - Added an
Action
type, encapsulating either aContext
or the association of aContext
with anIntent
inside another object. (#779) - Added a
ViewChat
Intent to be used when a user wants to open an existing chat room. (#796) - Added a
ViewMessages
intent to be used when a user wants to search and see a list of messages. (#797) - Added a context type representing a ChatSearchCriteria (
fdc3.chat.searchCriteria
). (#797) - Added an indication that applications, that can be launched to receive intents or context via a raised intent or open with context, SHOULD add their context or intent listeners via the API within 15 seconds, and that Desktop Agents MUST allow at least a 15 second timeout for them to do so, and MAY set a longer timeout (#987)
- Added @experimental
Order
,OrderList
,Product
,Trade
&TradeList
context types. (#1021) - Added Agent Bridging as an @experimental 5th part of the FDC3 Standard. (#968)
- Added a description of the standards use of JSON Schema to define context types and Bridging messages. (#1020)
- Documentation for standardized Context types was added to their JSON Schema files and TypeScript interfaces generated from them, so that they may act as a 'single source of truth' for Context definitions. (#1020)
- Updated definition of the
ChatInitSettings
context type to use the newMessage
type. (#779) - Updated the
StartChat
intent to return a reference to the room. (#794) - Updated definition of the
Instrument
context type to include optional market identifiers (#819) - Corrected API functions and object types to always use
string
instead ofString
(#924) - Updated definition of the
otherConfig
element of theChart
context type from an Object to an array of Contexts as this allows thetype
of each additional item of config to be examined before it is used (#985) - Corrected the appD
interop.appChannels
metadata to use anid
field to identify channels, rather thanname
(#981) - The App Directory OpenAPI schema was converted from YAML to JSON Schema, containing the same definitions. (#1035)
- Switched to union types (from enums) for constrained string values in generated source files as they provide better type checking and cross-compatibility of types. (#1093)
- Deprecated the
name
field in AppD records, to match the deprecation of API signatures and metadata objects usingname
(see #722) in 2.0. (#928) - Deprecated
IntentMetadata.displayName
and the appD record'sinterop.intents.listensFor[].displayName
field in favor of using intent names for display (which are required to be recognizable) as it can be set differently for each application in the appD (#926) - Deprecated the
customConfig
field in an AppD record due to the lack of a standard API to retrieve it. To be replaced with anapplicationConfig
element with a Desktop Agent API call to retrieve it in a future version (see #1006 for more details). Also deprecates thecustomCOnfig
element of an Intent configuration due to a lack of documented use cases. (#982)
- Removed the union type for the
ChatMessage
context, which caused issues for languages not having union types. This is a breaking change (made before the final version of 2.1 is released). - Corrected chatInitSettings context schema to incorporate the Context schema. (#869)
- Corrected schema syntax in chatInitSettings and renamed the
public
property toisPublic
(aspublic
is a reserved keyword in javascript). (#875) - Further clarified the difference between the behavior of User channels and other channel types on joinUserChannel/addContextListener. (#971)
- Clarified description of the behavior of
IntentResolution.getResult()
when the intent handler returned void (which is not an error). (#1004) - An error was fixed in the appD schema where launch details sub-schemas were combined with
oneOf
, rather thananyOf
. This causes validation errors for web or online native apps as their details elements overlap on aurl
field. (#1034) - The appD
icon
andscreenshot
sub-schemas were updated to require thesrc
value is set and restrict additional values, ensuring that common mistakes (such as using aurl
rather thansrc
field are caught by the schemas when used to validate. (#1037) - Linting, spell checking other corrections were applied to markdown syntax throughout the FDC3 documentation (#1032)
- Corrected bad example URLs in the App Directory overview/discovery page in the current and past versions as they did not agree with the paths provided in the API specification and OpenAPI schema. (#1060)
- Applied missing
readonly
tags toImplementationMetadata.optionalFeatures
sub-properties. (#1008)
- Removed source files from the NPM module as they are not necessary, increase the bundle size and include POM files that lack license info, causing issues for enterprise onboarding. (#999)
FDC3 Standard 2.0 - 2022-07-01
- Definition of the
icons
property ofAppMetadata
, based on PWA icon spec (#319) - Added support for raiseIntent without a context via the addition of the
fdc3.nothing
context type (#375) - Added FDC3 Workbench, an FDC3 API developer application (#457)
- Added advice on how to
broadcast
complex context types, composed of other types, so that other apps can listen for both the complex type and simpler constituent types (#464) - Added the ability to return data from an intent, via the addition of an IntentHandler type and a
getResult()
to IntentResolution, both of which return a Promise of a Context object. (#495) - Added a field to specify the Context type that intent can return to the AppD Application schema and extended the findIntent API calls to be able to use it for resolution. (#499)
- Added the ability to return a Channel from an intent (via the
IntentResult
type), resolver support for intents that return Channels and the concept of PrivateChannels. (#508) - Added error
UserCancelled
to theResolveError
enumeration to be used when user closes the resolver UI or otherwise cancels resolution of a raised intent (#522) - Added
IntentDeliveryFailed
to theResolveError
enumeration to be used when delivery of an intent and context to a targeted app or instance fails. (#601) - Added an
instanceId
(and optionalinstanceMetadata
) field toAppMetadata
allowing it to refer to specific app instances and thereby supporting targeting of intents to specific app instances. Also added afindInstances()
function to the desktop agent andTargetAppUnavailable
andTargetInstanceUnavailable
Errors to theResolveError
enumeration. (#509) - Added a References and Bibliography section to the Standard's documentation to hold links to 'normative references' and other documentation that is useful for understanding the standard (#530)
- Added a Trademarks page to website to acknowledge trademarks used within the Standard not owned by FINOS or the Linux Foundation (#534)
- Added details of FDC3's existing versioning and deprecation policies to the FDC3 compliance page (#539)
- Added a new experimental features policy, which exempts features designated as experimental from the versioning and deprecation policies, to the FDC3 compliance page (#549)
- Added a recommended set of user channel definitions to the API docs and typescript sources (#727)
- Added the optional exposure of originating app metadata to messages received via
addContextListener
andaddIntentListener
via the newContextMetadata
type. (#725) - Added the current app's
AppMetadata
to theImplementationMetadata
returned byfdc3.getInfo()
allowing an app to retrieve its own metadata, according to the Desktop Agent (#726) - Added a context type representing a range of time (
fdc3.timeRange
). (#706) - Added a context type representing a Currency (
fdc3.currency
). (#708) - Added a context type representing the price and value of a holding (
fdc3.valuation
). (#709) - Added a context type representing a Chart (
fdc3.chart
). (#715) - Added a context type
ChatInitSettings
to initialize a chat creation with new optional parameters (#620) - Added guide on how to submit a new Intent. (#624)
- Added a
ViewResearch
Intent to be used when a user wants to see the latest research on a particular stock (#623) - Added a
ViewProfile
intent, which supersedes theViewContact
intent which is deprecated. (#619) - Added a
ViewInteractions
intent to be used when a user wants to see the latest interactions (calls, meetings, conferences, roadshows) on a particular stock or with an individual or organization. (#625) - Added a
ViewOrders
intent to be used when a user wants to see the order history of an individual, an institution or of a particular instrument. (#672) - Added a
StartEmail
intent andfdc3.email
context type to be used to initiate an email with a contact or list of contacts provided as part of the context. (#632) - Added a definition for "app directory record" to the FDC3 glossary to be used to refer to a single appD record (#658)
- Added
/v2/
paths to the AppD's specification, allowing a single implementation to support serving both FDC3 v1.2 and v2.0 application records, enabling simpler migration (#666) - Added a
moreInfo
URL field to AppD application records to enable linking to a web page with more information on an app (#669) - Added
lang
field to AppD application records to specify the primary language of an app and its appD record. (#670) - Added
localizedVersions
field to AppD application records to support localized versions of descriptive fields in the app records and alternative launch details for localized versions of the applications themselves. (#670) - Added
type
anddetails
elements to AppD application records to support vendor-agnostic launch details for both web and native apps (#671) - Added
categories
field and recommended categories list to AppD application records to enable category based browsing of AppDs (#673) - Added an
interop
field to AppD application records, replacing theintents
field, to more fully describe an app's use of FDC3 and enable search for apps that 'interoperate' with a selected app (#697) - Added
AppIdentifier
type, which is a new parent ofAppMetadata
and clarifies required fields for API call parameters which now preferappId
andinstanceId
overname
(#722) - Added a
getAppMetadata()
function to the desktop agent that can be used to retrieve the fullAppMetadata
for anAppIdentifier
and reduced types such asIntentResolution.source
andContextMetadata.source
fromAppMetadata
toAppIdentifier
to clarify what fields a developer can rely on and that they should manually retrieve the fullAppMetadata
when they need it for display purposes. (#751)
- Consolidated
Listener
documentation with other types (#404) - Updated definition of the
Position
context type to support negative (short) positions (#419) - Upgraded web access statements from SHOULD to MUST in the API specification (#440)
- Updated copyright notices (#467)
- Adjusted wording in API spec and documentation to acknowledge the possibility of methods of intent resolution other than a resolver UI (#461)
- Replaced 'System channels' with 'User channels' throughout the spec, documentation, API and methods.ts. Clarified spec and documentation where it is referring to User channels vs. App channels. Added support to methods.ts for automatic fallback to
getSystemChannels
ifgetUserChannels
doesn't exist. (#470) - Moved the Icon type definition into the Types documentation page for consistency with other types. (#493
- The
fdc3.joinChannel()
,fdc3.getCurrentChannel()
andfdc3.leaveCurrentChannel()
functions have been made optional for FDC3 API compliance, but are recommended through the application of the SHOULD keyword. (#512) - All DesktopAgent and Channel API functions are now async for consistency, changing the return type of the
broadcast
,addIntentListener
,addContextListener
andgetInfo
functions (#516) IntentResolution
now requires the name of the intent raised to included, allowing it to be used to determine the intent raised viafdc3.raiseIntentForContext()
. (#507)- The App Directory record schema (Application) has had the
manifestType
andmanifest
properties removed and replaced with the newtype
(required),details
andhostManifests
properties (#437) - App Directory
images
field was replaced withscreenshots
to better align the application record with web application manifest and match its format to that used byicons
(#675) - API
AppMetadata
type was updated to replace theimages
field with ascreenshots
field (an array ofImage
objects) matching the spec of the App Directory'sscreenshots
field entries (#736) - App Directory endpoint for creating applications was removed as these will often be implementation dependent and should not be required for compliance (#695)
- App Directory endpoint for searching applications was removed as searches over multiple app directories are better implemented by retrieving all the records and searching over the resulting combined dataset (#696)
- Extended Intent Naming conventions and added hyperlinks for existing Intent spec definitions (#701)
- Extended recommended field type conventions for contexts to include types for ids, times, dates, currency codes and country codes. The
fdc3.country
context type was updated to comply with the recommended field name for country codes (COUNTRY_ISOALPHA2
). (#704) - The
intents
field of an AppD application records has been replaced with theinterop
field, to more fully describe an app's use of FDC3 and enable search for apps that 'interoperate' with a selected app (#697)
- Deprecated the
ViewContact
intent, which is superseded byViewProfile
(#619) - Removed details of the 'global' channel that was deprecated in FDC3 1.2. (#496)
open
,raiseIntent
andraiseIntentForContext
function signatures that make use of the appname
have been deprecated in favour of usingAppIdentifier
(which is a new parent ofAppMetadata
that clarifies required fields for API call parameters) (#722)
- Removed trailing slashes from schema references (which break refs for schema parsers) (#374)
- Corrected the definition of the
Context
type in documentation (#406]) - Corrected syntax errors in context schema examples (#424)
- Corrected a minor error in the ViewQuote Intent example (#439)
- Clarified behavior of
fdc3.addContextListener
when not joined to a channel (#449) - Clarified existing behavior of
joinChannel
andaddContextListener
when joining a channel (#454) - Clarified numerous aspects of the existing
raiseIntent
behavior in the spec and documentation (#461) - Updated Methods.ts to support the updated signature for
addContextListener
introduced in FDC3 1.2 (#462) - Clarified the description of the addContextListener functions from the Desktop Agent and Channel APIs in spec and docs. (#492)
- Clarified that implementing
fdc3.getInfo()
is required for compliance with the FDC3 standard (#515) - Corrected syntax errors in valuation schema (#834)
- Clarified that API errors are promises rejected with a JavaScript (or language appropriate) Error Object with a message chosen from the error enumerations. (#843)
- Clarified that
findIntent
functions should return theResolveError.NoAppsFound
error, rather than anAppIntent
with an emptyapps
array when no apps are fund during intent resolution. (#843) - Clarified spec requirements for registration of intent handlers (SHOULD support
interop.intents.listensFor
in an appD record, may support other routes including dynamic registration at runtime) (#844) - Corrected schema definition for appD
interop.intents.listensFor
element (#847)
npm v1.2.0 - 2021-04-19
- ES6 functions for
getInfo()
andraiseIntentForContext()
(#268, #324) fdc3Ready()
utility function that wraps checks for the window.fdc3 global object and newfdc3Ready
event (#360)compareVersionNumbers()
andversionIsAtLeast()
utility functions to complementgetInfo()
(#324)- An example application definition (#437
- A test environment for the app directory specification and the example application definition (#437
addContextListener(contextType, handler)
now supports passingnull
as the context type (#329)- All other API type changes and additions from the FDC3 Standard 1.2 release
FDC3 Standard 1.2 - 2021-04-19
- New
raiseIntentForContext()
method (#268) - New
fdc3Ready
event (#269) - New
getInfo()
method that returns implementation metadata (#324)
fdc3.open()
andfdc3.raiseIntent()
now takesTargetApp
, which resolves tostring | AppMetadata
(#272)AppMetadata
return type can now optionally includeappId
andversion
(#273)addContextListener(contextType, handler)
now supports passingnull
as the context type (#329)- Simplify API reference documentation and add info about supported platforms, including npm package (#349)
- Return type of
getCurrentChannel()
should bePromise<Channel | null>
(#282) leaveCurrentChannel()
is missing fromDesktopAgent
interface (#283)
npm v1.1.1 - 2021-04-15
Intents
enum should containStartChat
notStartChart
(#364)- Return type of
getCurrentChannel()
should bePromise<Channel | null>
(#282) - Missing
leaveCurrentChannel()
export (#283)
npm v1.1.0 - 2021-04-14
- Build an npm package with exported TypeScript typings for API, Context Data and
window.fdc3
global (#252) - Export helper enums for names of standardized
Intents
andContextTypes
(#264) - Export API operations as ES6 functions that can be directly imported (#266)
- Check for the existence of
window.fdc3
in ES6 functions, and reject or throw if not defined (#356)
- Return type of
getCurrentChannel()
should bePromise<Channel>
(#222)
FDC3 Standard 1.1 - 2020-04-09
- JSON Schema definitions for agreed context types (#119):
fdc3.context
fdc3.instrument
fdc3.instrumentList
fdc3.contact
fdc3.contactList
fdc3.organization
fdc3.country
fdc3.position
fdc3.portfolio
- API entry point for web -
window.fdc3
(#139) - Use Case 17 (#153)
- Channels API (#154):
fdc3.getSystemChannels
fdc3.getOrCreateChannel
fdc3.joinChannel
fdc3.leaveCurrentChannel
fdc3.getCurrentChannel
Channel
interfaceDisplayMetadata
interfaceChannelError
type
- Type filtering support for
getCurrentContext
(#161) - Publish versioned JSON schemas to FDC3 website (#170)
- Intent Reference and Context Data Reference documentation (#172)
- Remove FactSet-specific examples from docs (#88)
- Apply FINOS branding, styles and logos to the website (#96)
- Include ChartIQ in "Who is using FDC3?" section on website (#100)
- Expand
AppMetadata
interface with more application properties (#157) - Restructure some docs (#190)
- Several typos and broken links in docs
- Various security vulnerabilities
FDC3 Standard 1.0 - 2019-03-28
- Documentation website (generated with Docusaurus) and content from old separate FDC3 repos (#5):
- Use Case 15 (#49)
- FDC3 Roadmap (#55)
- FDC3 feature icons on website landing page (#57)
- Participant showcase on website landing page (#67)