@intlayer/api 4.1.9 → 4.1.10

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/IntlayerEventListener.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { intlayerAPI } from '@intlayer/api';\nimport { DictionaryAPI } from '@intlayer/backend';\nimport { getConfiguration, IntlayerConfig } from '@intlayer/config/client';\n// @ts-ignore @intlayer/backend is not built yet\n\nexport type DictionaryMessageEvent = {\n object: 'DICTIONARY';\n dictionary: DictionaryAPI;\n status: 'ADDED' | 'UPDATED' | 'DELETED' | 'CREATED';\n};\n\nexport type IntlayerMessageEvent = MessageEvent<DictionaryMessageEvent[]>;\n\n/**\n * IntlayerEventListener class to listen for dictionary changes via SSE (Server-Sent Events).\n *\n * Usage example:\n *\n * import { buildIntlayerDictionary } from './transpiler/declaration_file_to_dictionary/intlayer_dictionary';\n * import { IntlayerEventListener } from '@intlayer/api';\n *\n * export const checkDictionaryChanges = async () => {\n * // Instantiate the listener\n * const eventListener = new IntlayerEventListener();\n *\n * // Set up your callbacks\n * eventListener.onDictionaryChange = async (dictionary) => {\n * await buildIntlayerDictionary(dictionary);\n * };\n *\n * // Initialize the listener\n * await eventListener.initialize();\n *\n * // Optionally, clean up later when you’re done\n * // eventListener.cleanup();\n * };\n */\nexport class IntlayerEventListener {\n private eventSource: EventSource | null = null;\n\n /**\n * Callback triggered when a Dictionary is ADDED.\n */\n public onDictionaryAdded?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is UPDATED.\n */\n public onDictionaryChange?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is DELETED.\n */\n public onDictionaryDeleted?: (dictionary: DictionaryAPI) => any;\n\n constructor(private intlayerConfig?: IntlayerConfig) {}\n\n /**\n * Initializes the EventSource connection using the given intlayerConfig\n * (or the default config if none was provided).\n */\n public async initialize(): Promise<void> {\n try {\n const config = this.intlayerConfig ?? getConfiguration();\n const { backendURL } = config.editor;\n\n // Retrieve the access token\n const oAuth2TokenResult = await intlayerAPI.auth.getOAuth2AccessToken();\n const accessToken = oAuth2TokenResult.data?.accessToken;\n\n if (!accessToken) {\n throw new Error('Failed to retrieve access token');\n }\n\n if (oAuth2TokenResult.data?.organization.plan?.type !== 'ENTERPRISE')\n return;\n\n const API_ROUTE = `${backendURL}/api/event-listener`;\n const url = `${API_ROUTE}/${accessToken}`;\n\n this.eventSource = new EventSource(url);\n this.eventSource.onmessage = (event) => this.handleMessage(event);\n this.eventSource.onerror = (event) => this.handleError(event);\n } catch (error) {\n console.error('Error initializing IntlayerEventListener:', error);\n }\n }\n\n /**\n * Cleans up (closes) the EventSource connection.\n */\n public cleanup(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n console.log('IntlayerEventListener cleaned up.');\n }\n }\n\n /**\n * Handles incoming SSE messages, parses the event data,\n * and invokes the appropriate callback.\n */\n private async handleMessage(event: IntlayerMessageEvent): Promise<void> {\n try {\n const { data } = event;\n for (const dataEl of data) {\n switch (dataEl.object) {\n case 'DICTIONARY':\n switch (dataEl.status) {\n case 'ADDED':\n await this.onDictionaryAdded?.(dataEl.dictionary);\n break;\n case 'UPDATED':\n await this.onDictionaryChange?.(dataEl.dictionary);\n break;\n case 'DELETED':\n await this.onDictionaryDeleted?.(dataEl.dictionary);\n break;\n default:\n console.error('Unhandled dictionary status:', dataEl.status);\n break;\n }\n break;\n default:\n console.error('Unknown object type:', dataEl.object);\n break;\n }\n }\n } catch (error) {\n console.error('Error processing dictionary update:', error);\n }\n }\n\n /**\n * Handles any SSE errors and then performs cleanup.\n */\n private handleError(event: Event): void {\n console.error('EventSource error:', event);\n this.cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA4B;AAE5B,oBAAiD;AAmC1C,MAAM,sBAAsB;AAAA,EAkBjC,YAAoB,gBAAiC;AAAjC;AAAA,EAAkC;AAAA,EAjB9C,cAAkC;AAAA;AAAA;AAAA;AAAA,EAKnC;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,MAAa,aAA4B;AACvC,QAAI;AACF,YAAM,SAAS,KAAK,sBAAkB,gCAAiB;AACvD,YAAM,EAAE,WAAW,IAAI,OAAO;AAG9B,YAAM,oBAAoB,MAAM,uBAAY,KAAK,qBAAqB;AACtE,YAAM,cAAc,kBAAkB,MAAM;AAE5C,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,UAAI,kBAAkB,MAAM,aAAa,MAAM,SAAS;AACtD;AAEF,YAAM,YAAY,GAAG,UAAU;AAC/B,YAAM,MAAM,GAAG,SAAS,IAAI,WAAW;AAEvC,WAAK,cAAc,IAAI,YAAY,GAAG;AACtC,WAAK,YAAY,YAAY,CAAC,UAAU,KAAK,cAAc,KAAK;AAChE,WAAK,YAAY,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,IAC9D,SAAS,OAAO;AACd,cAAQ,MAAM,6CAA6C,KAAK;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACrB,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,MAAM;AACvB,WAAK,cAAc;AACnB,cAAQ,IAAI,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,OAA4C;AACtE,QAAI;AACF,YAAM,EAAE,KAAK,IAAI;AACjB,iBAAW,UAAU,MAAM;AACzB,gBAAQ,OAAO,QAAQ;AAAA,UACrB,KAAK;AACH,oBAAQ,OAAO,QAAQ;AAAA,cACrB,KAAK;AACH,sBAAM,KAAK,oBAAoB,OAAO,UAAU;AAChD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,qBAAqB,OAAO,UAAU;AACjD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,sBAAsB,OAAO,UAAU;AAClD;AAAA,cACF;AACE,wBAAQ,MAAM,gCAAgC,OAAO,MAAM;AAC3D;AAAA,YACJ;AACA;AAAA,UACF;AACE,oBAAQ,MAAM,wBAAwB,OAAO,MAAM;AACnD;AAAA,QACJ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,KAAK;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAoB;AACtC,YAAQ,MAAM,sBAAsB,KAAK;AACzC,SAAK,QAAQ;AAAA,EACf;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/IntlayerEventListener.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { intlayerAPI } from '@intlayer/api';\n// @ts-ignore: @intlayer/backend is not built yet\nimport { DictionaryAPI } from '@intlayer/backend';\nimport { getConfiguration, IntlayerConfig } from '@intlayer/config/client';\n// @ts-ignore @intlayer/backend is not built yet\n\nexport type DictionaryMessageEvent = {\n object: 'DICTIONARY';\n dictionary: DictionaryAPI;\n status: 'ADDED' | 'UPDATED' | 'DELETED' | 'CREATED';\n};\n\nexport type IntlayerMessageEvent = MessageEvent<DictionaryMessageEvent[]>;\n\n/**\n * IntlayerEventListener class to listen for dictionary changes via SSE (Server-Sent Events).\n *\n * Usage example:\n *\n * import { buildIntlayerDictionary } from './transpiler/declaration_file_to_dictionary/intlayer_dictionary';\n * import { IntlayerEventListener } from '@intlayer/api';\n *\n * export const checkDictionaryChanges = async () => {\n * // Instantiate the listener\n * const eventListener = new IntlayerEventListener();\n *\n * // Set up your callbacks\n * eventListener.onDictionaryChange = async (dictionary) => {\n * await buildIntlayerDictionary(dictionary);\n * };\n *\n * // Initialize the listener\n * await eventListener.initialize();\n *\n * // Optionally, clean up later when you’re done\n * // eventListener.cleanup();\n * };\n */\nexport class IntlayerEventListener {\n private eventSource: EventSource | null = null;\n\n /**\n * Callback triggered when a Dictionary is ADDED.\n */\n public onDictionaryAdded?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is UPDATED.\n */\n public onDictionaryChange?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is DELETED.\n */\n public onDictionaryDeleted?: (dictionary: DictionaryAPI) => any;\n\n constructor(private intlayerConfig?: IntlayerConfig) {}\n\n /**\n * Initializes the EventSource connection using the given intlayerConfig\n * (or the default config if none was provided).\n */\n public async initialize(): Promise<void> {\n try {\n const config = this.intlayerConfig ?? getConfiguration();\n const { backendURL } = config.editor;\n\n // Retrieve the access token\n const oAuth2TokenResult = await intlayerAPI.auth.getOAuth2AccessToken();\n const accessToken = oAuth2TokenResult.data?.accessToken;\n\n if (!accessToken) {\n throw new Error('Failed to retrieve access token');\n }\n\n if (oAuth2TokenResult.data?.organization.plan?.type !== 'ENTERPRISE')\n return;\n\n const API_ROUTE = `${backendURL}/api/event-listener`;\n const url = `${API_ROUTE}/${accessToken}`;\n\n this.eventSource = new EventSource(url);\n this.eventSource.onmessage = (event) => this.handleMessage(event);\n this.eventSource.onerror = (event) => this.handleError(event);\n } catch (error) {\n console.error('Error initializing IntlayerEventListener:', error);\n }\n }\n\n /**\n * Cleans up (closes) the EventSource connection.\n */\n public cleanup(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n console.log('IntlayerEventListener cleaned up.');\n }\n }\n\n /**\n * Handles incoming SSE messages, parses the event data,\n * and invokes the appropriate callback.\n */\n private async handleMessage(event: IntlayerMessageEvent): Promise<void> {\n try {\n const { data } = event;\n for (const dataEl of data) {\n switch (dataEl.object) {\n case 'DICTIONARY':\n switch (dataEl.status) {\n case 'ADDED':\n await this.onDictionaryAdded?.(dataEl.dictionary);\n break;\n case 'UPDATED':\n await this.onDictionaryChange?.(dataEl.dictionary);\n break;\n case 'DELETED':\n await this.onDictionaryDeleted?.(dataEl.dictionary);\n break;\n default:\n console.error('Unhandled dictionary status:', dataEl.status);\n break;\n }\n break;\n default:\n console.error('Unknown object type:', dataEl.object);\n break;\n }\n }\n } catch (error) {\n console.error('Error processing dictionary update:', error);\n }\n }\n\n /**\n * Handles any SSE errors and then performs cleanup.\n */\n private handleError(event: Event): void {\n console.error('EventSource error:', event);\n this.cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA4B;AAG5B,oBAAiD;AAmC1C,MAAM,sBAAsB;AAAA,EAkBjC,YAAoB,gBAAiC;AAAjC;AAAA,EAAkC;AAAA,EAjB9C,cAAkC;AAAA;AAAA;AAAA;AAAA,EAKnC;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,MAAa,aAA4B;AACvC,QAAI;AACF,YAAM,SAAS,KAAK,sBAAkB,gCAAiB;AACvD,YAAM,EAAE,WAAW,IAAI,OAAO;AAG9B,YAAM,oBAAoB,MAAM,uBAAY,KAAK,qBAAqB;AACtE,YAAM,cAAc,kBAAkB,MAAM;AAE5C,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,UAAI,kBAAkB,MAAM,aAAa,MAAM,SAAS;AACtD;AAEF,YAAM,YAAY,GAAG,UAAU;AAC/B,YAAM,MAAM,GAAG,SAAS,IAAI,WAAW;AAEvC,WAAK,cAAc,IAAI,YAAY,GAAG;AACtC,WAAK,YAAY,YAAY,CAAC,UAAU,KAAK,cAAc,KAAK;AAChE,WAAK,YAAY,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,IAC9D,SAAS,OAAO;AACd,cAAQ,MAAM,6CAA6C,KAAK;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACrB,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,MAAM;AACvB,WAAK,cAAc;AACnB,cAAQ,IAAI,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,OAA4C;AACtE,QAAI;AACF,YAAM,EAAE,KAAK,IAAI;AACjB,iBAAW,UAAU,MAAM;AACzB,gBAAQ,OAAO,QAAQ;AAAA,UACrB,KAAK;AACH,oBAAQ,OAAO,QAAQ;AAAA,cACrB,KAAK;AACH,sBAAM,KAAK,oBAAoB,OAAO,UAAU;AAChD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,qBAAqB,OAAO,UAAU;AACjD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,sBAAsB,OAAO,UAAU;AAClD;AAAA,cACF;AACE,wBAAQ,MAAM,gCAAgC,OAAO,MAAM;AAC3D;AAAA,YACJ;AACA;AAAA,UACF;AACE,oBAAQ,MAAM,wBAAwB,OAAO,MAAM;AACnD;AAAA,QACJ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,KAAK;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAoB;AACtC,YAAQ,MAAM,sBAAsB,KAAK;AACzC,SAAK,QAAQ;AAAA,EACf;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/IntlayerEventListener.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { intlayerAPI } from '@intlayer/api';\nimport { DictionaryAPI } from '@intlayer/backend';\nimport { getConfiguration, IntlayerConfig } from '@intlayer/config/client';\n// @ts-ignore @intlayer/backend is not built yet\n\nexport type DictionaryMessageEvent = {\n object: 'DICTIONARY';\n dictionary: DictionaryAPI;\n status: 'ADDED' | 'UPDATED' | 'DELETED' | 'CREATED';\n};\n\nexport type IntlayerMessageEvent = MessageEvent<DictionaryMessageEvent[]>;\n\n/**\n * IntlayerEventListener class to listen for dictionary changes via SSE (Server-Sent Events).\n *\n * Usage example:\n *\n * import { buildIntlayerDictionary } from './transpiler/declaration_file_to_dictionary/intlayer_dictionary';\n * import { IntlayerEventListener } from '@intlayer/api';\n *\n * export const checkDictionaryChanges = async () => {\n * // Instantiate the listener\n * const eventListener = new IntlayerEventListener();\n *\n * // Set up your callbacks\n * eventListener.onDictionaryChange = async (dictionary) => {\n * await buildIntlayerDictionary(dictionary);\n * };\n *\n * // Initialize the listener\n * await eventListener.initialize();\n *\n * // Optionally, clean up later when you’re done\n * // eventListener.cleanup();\n * };\n */\nexport class IntlayerEventListener {\n private eventSource: EventSource | null = null;\n\n /**\n * Callback triggered when a Dictionary is ADDED.\n */\n public onDictionaryAdded?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is UPDATED.\n */\n public onDictionaryChange?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is DELETED.\n */\n public onDictionaryDeleted?: (dictionary: DictionaryAPI) => any;\n\n constructor(private intlayerConfig?: IntlayerConfig) {}\n\n /**\n * Initializes the EventSource connection using the given intlayerConfig\n * (or the default config if none was provided).\n */\n public async initialize(): Promise<void> {\n try {\n const config = this.intlayerConfig ?? getConfiguration();\n const { backendURL } = config.editor;\n\n // Retrieve the access token\n const oAuth2TokenResult = await intlayerAPI.auth.getOAuth2AccessToken();\n const accessToken = oAuth2TokenResult.data?.accessToken;\n\n if (!accessToken) {\n throw new Error('Failed to retrieve access token');\n }\n\n if (oAuth2TokenResult.data?.organization.plan?.type !== 'ENTERPRISE')\n return;\n\n const API_ROUTE = `${backendURL}/api/event-listener`;\n const url = `${API_ROUTE}/${accessToken}`;\n\n this.eventSource = new EventSource(url);\n this.eventSource.onmessage = (event) => this.handleMessage(event);\n this.eventSource.onerror = (event) => this.handleError(event);\n } catch (error) {\n console.error('Error initializing IntlayerEventListener:', error);\n }\n }\n\n /**\n * Cleans up (closes) the EventSource connection.\n */\n public cleanup(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n console.log('IntlayerEventListener cleaned up.');\n }\n }\n\n /**\n * Handles incoming SSE messages, parses the event data,\n * and invokes the appropriate callback.\n */\n private async handleMessage(event: IntlayerMessageEvent): Promise<void> {\n try {\n const { data } = event;\n for (const dataEl of data) {\n switch (dataEl.object) {\n case 'DICTIONARY':\n switch (dataEl.status) {\n case 'ADDED':\n await this.onDictionaryAdded?.(dataEl.dictionary);\n break;\n case 'UPDATED':\n await this.onDictionaryChange?.(dataEl.dictionary);\n break;\n case 'DELETED':\n await this.onDictionaryDeleted?.(dataEl.dictionary);\n break;\n default:\n console.error('Unhandled dictionary status:', dataEl.status);\n break;\n }\n break;\n default:\n console.error('Unknown object type:', dataEl.object);\n break;\n }\n }\n } catch (error) {\n console.error('Error processing dictionary update:', error);\n }\n }\n\n /**\n * Handles any SSE errors and then performs cleanup.\n */\n private handleError(event: Event): void {\n console.error('EventSource error:', event);\n this.cleanup();\n }\n}\n"],"mappings":"AACA,SAAS,mBAAmB;AAE5B,SAAS,wBAAwC;AAmC1C,MAAM,sBAAsB;AAAA,EAkBjC,YAAoB,gBAAiC;AAAjC;AAAA,EAAkC;AAAA,EAjB9C,cAAkC;AAAA;AAAA;AAAA;AAAA,EAKnC;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,MAAa,aAA4B;AACvC,QAAI;AACF,YAAM,SAAS,KAAK,kBAAkB,iBAAiB;AACvD,YAAM,EAAE,WAAW,IAAI,OAAO;AAG9B,YAAM,oBAAoB,MAAM,YAAY,KAAK,qBAAqB;AACtE,YAAM,cAAc,kBAAkB,MAAM;AAE5C,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,UAAI,kBAAkB,MAAM,aAAa,MAAM,SAAS;AACtD;AAEF,YAAM,YAAY,GAAG,UAAU;AAC/B,YAAM,MAAM,GAAG,SAAS,IAAI,WAAW;AAEvC,WAAK,cAAc,IAAI,YAAY,GAAG;AACtC,WAAK,YAAY,YAAY,CAAC,UAAU,KAAK,cAAc,KAAK;AAChE,WAAK,YAAY,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,IAC9D,SAAS,OAAO;AACd,cAAQ,MAAM,6CAA6C,KAAK;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACrB,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,MAAM;AACvB,WAAK,cAAc;AACnB,cAAQ,IAAI,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,OAA4C;AACtE,QAAI;AACF,YAAM,EAAE,KAAK,IAAI;AACjB,iBAAW,UAAU,MAAM;AACzB,gBAAQ,OAAO,QAAQ;AAAA,UACrB,KAAK;AACH,oBAAQ,OAAO,QAAQ;AAAA,cACrB,KAAK;AACH,sBAAM,KAAK,oBAAoB,OAAO,UAAU;AAChD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,qBAAqB,OAAO,UAAU;AACjD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,sBAAsB,OAAO,UAAU;AAClD;AAAA,cACF;AACE,wBAAQ,MAAM,gCAAgC,OAAO,MAAM;AAC3D;AAAA,YACJ;AACA;AAAA,UACF;AACE,oBAAQ,MAAM,wBAAwB,OAAO,MAAM;AACnD;AAAA,QACJ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,KAAK;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAoB;AACtC,YAAQ,MAAM,sBAAsB,KAAK;AACzC,SAAK,QAAQ;AAAA,EACf;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/IntlayerEventListener.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { intlayerAPI } from '@intlayer/api';\n// @ts-ignore: @intlayer/backend is not built yet\nimport { DictionaryAPI } from '@intlayer/backend';\nimport { getConfiguration, IntlayerConfig } from '@intlayer/config/client';\n// @ts-ignore @intlayer/backend is not built yet\n\nexport type DictionaryMessageEvent = {\n object: 'DICTIONARY';\n dictionary: DictionaryAPI;\n status: 'ADDED' | 'UPDATED' | 'DELETED' | 'CREATED';\n};\n\nexport type IntlayerMessageEvent = MessageEvent<DictionaryMessageEvent[]>;\n\n/**\n * IntlayerEventListener class to listen for dictionary changes via SSE (Server-Sent Events).\n *\n * Usage example:\n *\n * import { buildIntlayerDictionary } from './transpiler/declaration_file_to_dictionary/intlayer_dictionary';\n * import { IntlayerEventListener } from '@intlayer/api';\n *\n * export const checkDictionaryChanges = async () => {\n * // Instantiate the listener\n * const eventListener = new IntlayerEventListener();\n *\n * // Set up your callbacks\n * eventListener.onDictionaryChange = async (dictionary) => {\n * await buildIntlayerDictionary(dictionary);\n * };\n *\n * // Initialize the listener\n * await eventListener.initialize();\n *\n * // Optionally, clean up later when you’re done\n * // eventListener.cleanup();\n * };\n */\nexport class IntlayerEventListener {\n private eventSource: EventSource | null = null;\n\n /**\n * Callback triggered when a Dictionary is ADDED.\n */\n public onDictionaryAdded?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is UPDATED.\n */\n public onDictionaryChange?: (dictionary: DictionaryAPI) => any;\n\n /**\n * Callback triggered when a Dictionary is DELETED.\n */\n public onDictionaryDeleted?: (dictionary: DictionaryAPI) => any;\n\n constructor(private intlayerConfig?: IntlayerConfig) {}\n\n /**\n * Initializes the EventSource connection using the given intlayerConfig\n * (or the default config if none was provided).\n */\n public async initialize(): Promise<void> {\n try {\n const config = this.intlayerConfig ?? getConfiguration();\n const { backendURL } = config.editor;\n\n // Retrieve the access token\n const oAuth2TokenResult = await intlayerAPI.auth.getOAuth2AccessToken();\n const accessToken = oAuth2TokenResult.data?.accessToken;\n\n if (!accessToken) {\n throw new Error('Failed to retrieve access token');\n }\n\n if (oAuth2TokenResult.data?.organization.plan?.type !== 'ENTERPRISE')\n return;\n\n const API_ROUTE = `${backendURL}/api/event-listener`;\n const url = `${API_ROUTE}/${accessToken}`;\n\n this.eventSource = new EventSource(url);\n this.eventSource.onmessage = (event) => this.handleMessage(event);\n this.eventSource.onerror = (event) => this.handleError(event);\n } catch (error) {\n console.error('Error initializing IntlayerEventListener:', error);\n }\n }\n\n /**\n * Cleans up (closes) the EventSource connection.\n */\n public cleanup(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = null;\n console.log('IntlayerEventListener cleaned up.');\n }\n }\n\n /**\n * Handles incoming SSE messages, parses the event data,\n * and invokes the appropriate callback.\n */\n private async handleMessage(event: IntlayerMessageEvent): Promise<void> {\n try {\n const { data } = event;\n for (const dataEl of data) {\n switch (dataEl.object) {\n case 'DICTIONARY':\n switch (dataEl.status) {\n case 'ADDED':\n await this.onDictionaryAdded?.(dataEl.dictionary);\n break;\n case 'UPDATED':\n await this.onDictionaryChange?.(dataEl.dictionary);\n break;\n case 'DELETED':\n await this.onDictionaryDeleted?.(dataEl.dictionary);\n break;\n default:\n console.error('Unhandled dictionary status:', dataEl.status);\n break;\n }\n break;\n default:\n console.error('Unknown object type:', dataEl.object);\n break;\n }\n }\n } catch (error) {\n console.error('Error processing dictionary update:', error);\n }\n }\n\n /**\n * Handles any SSE errors and then performs cleanup.\n */\n private handleError(event: Event): void {\n console.error('EventSource error:', event);\n this.cleanup();\n }\n}\n"],"mappings":"AACA,SAAS,mBAAmB;AAG5B,SAAS,wBAAwC;AAmC1C,MAAM,sBAAsB;AAAA,EAkBjC,YAAoB,gBAAiC;AAAjC;AAAA,EAAkC;AAAA,EAjB9C,cAAkC;AAAA;AAAA;AAAA;AAAA,EAKnC;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA,EAKA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,MAAa,aAA4B;AACvC,QAAI;AACF,YAAM,SAAS,KAAK,kBAAkB,iBAAiB;AACvD,YAAM,EAAE,WAAW,IAAI,OAAO;AAG9B,YAAM,oBAAoB,MAAM,YAAY,KAAK,qBAAqB;AACtE,YAAM,cAAc,kBAAkB,MAAM;AAE5C,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,iCAAiC;AAAA,MACnD;AAEA,UAAI,kBAAkB,MAAM,aAAa,MAAM,SAAS;AACtD;AAEF,YAAM,YAAY,GAAG,UAAU;AAC/B,YAAM,MAAM,GAAG,SAAS,IAAI,WAAW;AAEvC,WAAK,cAAc,IAAI,YAAY,GAAG;AACtC,WAAK,YAAY,YAAY,CAAC,UAAU,KAAK,cAAc,KAAK;AAChE,WAAK,YAAY,UAAU,CAAC,UAAU,KAAK,YAAY,KAAK;AAAA,IAC9D,SAAS,OAAO;AACd,cAAQ,MAAM,6CAA6C,KAAK;AAAA,IAClE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKO,UAAgB;AACrB,QAAI,KAAK,aAAa;AACpB,WAAK,YAAY,MAAM;AACvB,WAAK,cAAc;AACnB,cAAQ,IAAI,mCAAmC;AAAA,IACjD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,OAA4C;AACtE,QAAI;AACF,YAAM,EAAE,KAAK,IAAI;AACjB,iBAAW,UAAU,MAAM;AACzB,gBAAQ,OAAO,QAAQ;AAAA,UACrB,KAAK;AACH,oBAAQ,OAAO,QAAQ;AAAA,cACrB,KAAK;AACH,sBAAM,KAAK,oBAAoB,OAAO,UAAU;AAChD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,qBAAqB,OAAO,UAAU;AACjD;AAAA,cACF,KAAK;AACH,sBAAM,KAAK,sBAAsB,OAAO,UAAU;AAClD;AAAA,cACF;AACE,wBAAQ,MAAM,gCAAgC,OAAO,MAAM;AAC3D;AAAA,YACJ;AACA;AAAA,UACF;AACE,oBAAQ,MAAM,wBAAwB,OAAO,MAAM;AACnD;AAAA,QACJ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,uCAAuC,KAAK;AAAA,IAC5D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,OAAoB;AACtC,YAAQ,MAAM,sBAAsB,KAAK;AACzC,SAAK,QAAQ;AAAA,EACf;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"IntlayerEventListener.d.ts","sourceRoot":"","sources":["../../src/IntlayerEventListener.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAoB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,aAAa,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAqB;IAkBpB,OAAO,CAAC,cAAc,CAAC;IAjBnC,OAAO,CAAC,WAAW,CAA4B;IAE/C;;OAEG;IACI,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;IAE9D;;OAEG;IACI,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;IAE/D;;OAEG;IACI,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;gBAE5C,cAAc,CAAC,EAAE,cAAc;IAEnD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BxC;;OAEG;IACI,OAAO,IAAI,IAAI;IAQtB;;;OAGG;YACW,aAAa;IA+B3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB"}
1
+ {"version":3,"file":"IntlayerEventListener.d.ts","sourceRoot":"","sources":["../../src/IntlayerEventListener.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAoB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG3E,MAAM,MAAM,sBAAsB,GAAG;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,aAAa,CAAC;IAC1B,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,qBAAqB;IAkBpB,OAAO,CAAC,cAAc,CAAC;IAjBnC,OAAO,CAAC,WAAW,CAA4B;IAE/C;;OAEG;IACI,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;IAE9D;;OAEG;IACI,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;IAE/D;;OAEG;IACI,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,KAAK,GAAG,CAAC;gBAE5C,cAAc,CAAC,EAAE,cAAc;IAEnD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BxC;;OAEG;IACI,OAAO,IAAI,IAAI;IAQtB;;;OAGG;YACW,aAAa;IA+B3B;;OAEG;IACH,OAAO,CAAC,WAAW;CAIpB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/api",
3
- "version": "4.1.9",
3
+ "version": "4.1.10",
4
4
  "private": false,
5
5
  "description": "SDK for interacting with the Intlayer API, enabling content auditing, and managing organizations, projects, and users.",
6
6
  "keywords": [
@@ -57,7 +57,7 @@
57
57
  "./package.json"
58
58
  ],
59
59
  "dependencies": {
60
- "@intlayer/config": "4.1.9"
60
+ "@intlayer/config": "4.1.10"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@changesets/changelog-github": "0.5.0",
@@ -71,15 +71,15 @@
71
71
  "tsc-alias": "^1.8.10",
72
72
  "tsup": "^8.3.5",
73
73
  "typescript": "^5.7.3",
74
- "@intlayer/backend": "4.1.9",
75
74
  "@utils/ts-config": "1.0.4",
75
+ "@utils/tsup-config": "1.0.4",
76
+ "intlayer-editor": "4.1.10",
76
77
  "@utils/eslint-config": "1.0.4",
77
78
  "@utils/ts-config-types": "1.0.4",
78
- "@utils/tsup-config": "1.0.4",
79
- "intlayer-editor": "4.1.9"
79
+ "@intlayer/backend": "4.1.10"
80
80
  },
81
81
  "peerDependencies": {
82
- "@intlayer/config": "4.1.9"
82
+ "@intlayer/config": "4.1.10"
83
83
  },
84
84
  "engines": {
85
85
  "node": ">=14.18"