@@ -225,6 +225,30 @@ export type CookieWatcher = (event: IPendingCookieMutation) => void;
225225/** Event types (for purpose resolution) */
226226export type TrackingEventType = 'request' | 'cookie' ;
227227
228+ /**
229+ * Module type
230+ */
231+ type ModuleKind = 'ui' | 'plugin' | 'policies' ;
232+
233+ /** JS module descriptor */
234+ interface ModuleDescriptor {
235+ /** Module URL */
236+ url : string ;
237+ /** Module ID (defaults to URI if not provided) */
238+ id ?: string ;
239+ /** Module name */
240+ name ?: string ;
241+ /** Module kind (default: plugin) */
242+ kind ?: ModuleKind ;
243+ /** Module media type (default: application/ecmascript) */
244+ type ?:
245+ | 'module' // ES module
246+ | 'application/ecmascript' // default for kind={plugin, ui}
247+ | 'application/vnd.transcend.governance-policies+json' ; // default for kind=policies
248+ /** Should module be loaded synchronously? (default: false) */
249+ sync ?: boolean ;
250+ }
251+
228252/** airgap.js API */
229253export type AirgapAPI = Readonly < {
230254 /** Embedded request watchers */
@@ -356,6 +380,8 @@ export type AirgapAPI = Readonly<{
356380 export ( options ?: AirgapExportOptions ) : AirgapQueues ;
357381 /** Get a list of legal regimes that are potentially applicable to the user */
358382 getRegimes ( ) : Set < PrivacyRegime > ;
383+ /** Get a list of active modules */
384+ getModules ( ) : ModuleDescriptor [ ] ;
359385 /** Get a list of detected active user agent privacy signals */
360386 getPrivacySignals ( ) : Set < UserPrivacySignal > ;
361387 /** Toggle all airgap.js protections. Auth must be a pre-airgap.js or airgap.js script 'load' event. Returns success status */
0 commit comments