@acorex-platform/extension-project-management-simpro-client 0.0.38 → 0.0.46

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.
@@ -15,6 +15,19 @@ const RootConfig = {
15
15
  };
16
16
  //#endregion
17
17
 
18
+ //#region ---- Manifest ----
19
+ const SimproExtensionManifest = {
20
+ name: RootConfig.module.name,
21
+ version: '1.0.0',
22
+ title: RootConfig.module.title,
23
+ icon: RootConfig.module.icon,
24
+ i18n: RootConfig.config.i18n,
25
+ type: 'integration',
26
+ domain: 'project-management',
27
+ dependencies: [],
28
+ };
29
+ //#endregion
30
+
18
31
  //#region ---- Command Keys ----
19
32
  const AXESimproCommandKeys = {
20
33
  ConnectionConnect: 'simpro-extension.Connection:Connect',
@@ -111,5 +124,5 @@ const AXE_SIMPRO_ERROR_I18N_KEYS = {
111
124
  * Generated bundle index. Do not edit.
112
125
  */
113
126
 
114
- export { AXESimproCommandKeys, AXESimproMenuKeys, AXESimproPermissions, AXE_SIMPRO_ERROR_CODES, AXE_SIMPRO_ERROR_I18N_KEYS, AXPAdministrationPermissionKeys, RootConfig };
127
+ export { AXESimproCommandKeys, AXESimproMenuKeys, AXESimproPermissions, AXE_SIMPRO_ERROR_CODES, AXE_SIMPRO_ERROR_I18N_KEYS, AXPAdministrationPermissionKeys, RootConfig, SimproExtensionManifest };
115
128
  //# sourceMappingURL=acorex-platform-extension-project-management-simpro-client-contracts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-project-management-simpro-client-contracts.mjs","sources":["../../../../libs/extensions/project-management/simpro/contracts/src/root-config.ts","../../../../libs/extensions/project-management/simpro/contracts/src/commands.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/menu.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/permission.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/connection.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/oauth.api.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/project-sync.api.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/simpro.errors.ts","../../../../libs/extensions/project-management/simpro/contracts/src/acorex-platform-extension-project-management-simpro-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-simpro',\n};\n\nconst MODULE_NAME = 'SimproExtension';\n\nexport const RootConfig = {\n config,\n module: {\n name: MODULE_NAME,\n title: `@${config.i18n}:integration.display-name`,\n icon: 'fa-light fa-briefcase',\n },\n};\n\n//#endregion\n","//#region ---- Command Keys ----\n\nexport const AXESimproCommandKeys = {\n ConnectionConnect: 'simpro-extension.Connection:Connect',\n ConnectionCompleteOAuth: 'simpro-extension.Connection:CompleteOAuth',\n ConnectionLifecycle: 'simpro-extension.Connection:Lifecycle',\n OAuthStart: 'simpro-extension.OAuth:Start',\n OAuthComplete: 'simpro-extension.OAuth:Complete',\n OAuthValidate: 'simpro-extension.OAuth:Validate',\n ProjectImportFromSimpro: 'simpro-extension.Project:ImportFromSimpro',\n CustomerImportFromSimpro: 'simpro-extension.Customer:ImportFromSimpro',\n ProjectSync: 'simpro-extension.Project:Sync',\n JobsPull: 'simpro-extension.Jobs:Pull',\n JobsRefresh: 'simpro-extension.Jobs:Refresh',\n} as const;\n\n//#endregion\n","//#region ---- Menu Keys ----\n\nexport const AXESimproMenuKeys = {\n SimproExtensionConfig: 'simpro-extension:Menu:Configuration',\n} as const;\n\n//#endregion\n","//#region ---- Permission Keys ----\n\n/**\n * Administration capabilities used by this extension.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXESimproPermissions = {\n SimproExtension: {\n Management: AXPAdministrationPermissionKeys.MaintainConnections,\n Catalog: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n },\n ProjectImport: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n CustomerImport: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n ProjectSync: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Simpro tenant connection config ----\n\n/** Stored on IntegrationManagement connection `config` for tenant-scoped Simpro (cloud-only). */\nexport interface AXESimproConnectionConfig {\n /** Simpro multi-company ID (0 for single-company builds). */\n companyId?: number;\n /** OAuth2 client ID from the Simpro application key file. */\n clientId?: string;\n /** OAuth2 client secret from the Simpro application key file. */\n clientSecret?: string;\n /** Optional override when it differs from `{buildUrl}/oauth2/login`. */\n authorizationUrl?: string;\n /** Current bearer token (authorization-code flow). */\n accessToken?: string;\n /** Refresh token from Simpro token response. */\n refreshToken?: string;\n /** ISO timestamp when `accessToken` expires. */\n tokenExpiresAt?: string;\n /** Full Simpro token JSON response (mirrors legacy SimproJson). */\n oauthTokenJson?: string;\n /** Background job pull sync state (server-managed). */\n jobsSync?: AXESimproJobsSyncState;\n}\n\n/** Simpro job pull sync state stored on the tenant connection `config.jobsSync`. */\nexport interface AXESimproJobsSyncState {\n /** ISO timestamp — last successful job pull (incremental sync watermark). */\n lastSyncAt?: string;\n /** ISO timestamp — last full snapshot reconcile (deactivation pass). */\n lastFullReconcileAt?: string;\n}\n\n//#endregion\n","//#region ---- Simpro OAuth API (client ↔ server) ----\n\nexport interface AXESimproOAuthStartRequest {\n redirectUri: string;\n connectionId?: string;\n}\n\nexport interface AXESimproOAuthStartResponse {\n redirectUrl: string;\n state: string;\n}\n\nexport interface AXESimproOAuthCompleteRequest {\n state: string;\n code: string;\n}\n\nexport interface AXESimproOAuthCompleteResponse {\n connectionId: string;\n}\n\nexport interface AXESimproOAuthValidateRequest {\n connectionId?: string;\n}\n\nexport interface AXESimproOAuthValidateResponse {\n valid: boolean;\n message?: string;\n}\n\n//#endregion\n","//#region ---- Remote Simpro DTOs ----\n\nimport type { AXESimproProjectSyncStrategy } from './sync.types';\n\nexport interface AXESimproRemotePartyRef {\n ID?: number;\n Name?: string | null;\n GivenName?: string | null;\n CompanyName?: string | null;\n}\n\nexport interface AXESimproRemoteAddress {\n Address?: string | null;\n City?: string | null;\n State?: string | null;\n PostalCode?: string | null;\n}\n\nexport interface AXESimproRemoteJob {\n ID: number;\n Name?: string | null;\n Description?: string | null;\n OrderNo?: string | null;\n RequestNo?: string | null;\n Type?: string | null;\n Stage?: string | { Name?: string } | null;\n DateIssued?: string | null;\n DueDate?: string | null;\n DueTime?: string | null;\n DateModified?: string | null;\n Status?: { ID?: number; Name?: string } | string | null;\n Customer?: AXESimproRemotePartyRef | string | null;\n Site?: AXESimproRemotePartyRef | string | null;\n}\n\nexport interface AXESimproRemoteCustomer {\n ID: number;\n GivenName?: string | null;\n FamilyName?: string | null;\n Title?: string | null;\n Phone?: string | null;\n Email?: string | null;\n EIN?: string | null;\n CompanyName?: string | null;\n Address?: AXESimproRemoteAddress | null;\n BillingAddress?: AXESimproRemoteAddress | null;\n}\n\nexport interface AXESimproRemoteSitePrimaryContact {\n CellPhone?: string | null;\n Email?: string | null;\n Contact?: { ID?: number } | null;\n}\n\nexport interface AXESimproRemoteSite {\n ID: number;\n Name?: string | null;\n Address?: AXESimproRemoteAddress | null;\n PrimaryContact?: AXESimproRemoteSitePrimaryContact | null;\n}\n\n//#endregion\n\n//#region ---- API request / response ----\n\nexport interface AXESimproPullJobsRequest {\n /** When set, pulls for this Simpro connection (required for multi-connection schedules). */\n connectionId?: string;\n /** Maximum Simpro jobs to pull into the cache (default 250, max 1000). */\n maxJobs?: number;\n /**\n * When true, runs a full snapshot (no incremental filter) and reconciles deactivations.\n * When false (default for schedules), pulls jobs modified since the last successful sync.\n */\n force?: boolean;\n}\n\nexport interface AXESimproPullJobsResponse {\n upserted: number;\n deactivated: number;\n /** True when incremental pull found no modified jobs in Simpro. */\n skipped?: boolean;\n /** Whether this run used incremental or full snapshot mode. */\n syncMode?: 'incremental' | 'full';\n /** Per data-type upsert counts (jobs / customers / sites). */\n byResourceType?: {\n job?: { upserted: number; deactivated: number };\n customer?: { upserted: number; deactivated: number };\n site?: { upserted: number; deactivated: number };\n };\n}\n\nexport interface AXESimproImportJobRequest {\n remoteRecordId: string;\n projectTypeId: string;\n syncStrategy: AXESimproProjectSyncStrategy;\n}\n\nexport interface AXESimproImportJobResponse {\n platformProjectId: string;\n created: boolean;\n}\n\nexport interface AXESimproImportCustomerRequest {\n remoteRecordId: string;\n}\n\nexport interface AXESimproImportCustomerResponse {\n platformCustomerId: string;\n created: boolean;\n}\n\nexport interface AXESimproSyncPlatformProjectRequest {\n platformProjectId: string;\n}\n\nexport interface AXESimproConnectionLifecycleRequest {\n connectionId: string;\n action: 'connected' | 'disconnected' | 'deleted' | 'enabled' | 'disabled';\n}\n\nexport interface AXESimproConnectionLifecycleResponse {\n ok: true;\n}\n\n//#endregion\n","//#region ----- Simpro error codes -----\n\nexport const AXE_SIMPRO_ERROR_CODES = {\n COMPANY_ID_ZERO_MULTI: 'SIMPRO_COMPANY_ID_ZERO_MULTI',\n COMPANY_ID_INVALID: 'SIMPRO_COMPANY_ID_INVALID',\n} as const;\n\nexport type AXESimproErrorCode = (typeof AXE_SIMPRO_ERROR_CODES)[keyof typeof AXE_SIMPRO_ERROR_CODES];\n\n/** Client i18n keys for known Simpro error codes. */\nexport const AXE_SIMPRO_ERROR_I18N_KEYS: Record<AXESimproErrorCode, string> = {\n [AXE_SIMPRO_ERROR_CODES.COMPANY_ID_ZERO_MULTI]: '@extensions-simpro:errors.company-id-zero-multi',\n [AXE_SIMPRO_ERROR_CODES.COMPANY_ID_INVALID]: '@extensions-simpro:errors.company-id-invalid',\n};\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAAA;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,IAAI,EAAE,mBAAmB;CAC1B;AAED,MAAM,WAAW,GAAG,iBAAiB;AAE9B,MAAM,UAAU,GAAG;IACxB,MAAM;AACN,IAAA,MAAM,EAAE;AACN,QAAA,IAAI,EAAE,WAAW;AACjB,QAAA,KAAK,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,yBAAA,CAA2B;AACjD,QAAA,IAAI,EAAE,uBAAuB;AAC9B,KAAA;;AAGH;;ACjBA;AAEO,MAAM,oBAAoB,GAAG;AAClC,IAAA,iBAAiB,EAAE,qCAAqC;AACxD,IAAA,uBAAuB,EAAE,2CAA2C;AACpE,IAAA,mBAAmB,EAAE,uCAAuC;AAC5D,IAAA,UAAU,EAAE,8BAA8B;AAC1C,IAAA,aAAa,EAAE,iCAAiC;AAChD,IAAA,aAAa,EAAE,iCAAiC;AAChD,IAAA,uBAAuB,EAAE,2CAA2C;AACpE,IAAA,wBAAwB,EAAE,4CAA4C;AACtE,IAAA,WAAW,EAAE,+BAA+B;AAC5C,IAAA,QAAQ,EAAE,4BAA4B;AACtC,IAAA,WAAW,EAAE,+BAA+B;;AAG9C;;AChBA;AAEO,MAAM,iBAAiB,GAAG;AAC/B,IAAA,qBAAqB,EAAE,qCAAqC;;AAG9D;;ACNA;AAEA;;;AAGG;AACI,MAAM,+BAA+B,GAAG;AAC7C,IAAA,MAAM,EAAE,kCAAkC;AAC1C,IAAA,qBAAqB,EAAE,iDAAiD;AACxE,IAAA,cAAc,EAAE,0CAA0C;AAC1D,IAAA,gBAAgB,EAAE,4CAA4C;AAC9D,IAAA,gBAAgB,EAAE,4CAA4C;AAC9D,IAAA,mBAAmB,EAAE,+CAA+C;AACpE,IAAA,wBAAwB,EAAE,oDAAoD;AAC9E,IAAA,iBAAiB,EAAE,6CAA6C;AAChE,IAAA,qBAAqB,EAAE,iDAAiD;AACxE,IAAA,SAAS,EAAE,qCAAqC;AAChD,IAAA,aAAa,EAAE,yCAAyC;AACxD,IAAA,iBAAiB,EAAE,6CAA6C;AAChE,IAAA,UAAU,EAAE,sCAAsC;AAClD,IAAA,WAAW,EAAE,uCAAuC;AACpD,IAAA,kBAAkB,EAAE,8CAA8C;AAClE,IAAA,QAAQ,EAAE,oCAAoC;AAC9C,IAAA,gBAAgB,EAAE,4CAA4C;AAC9D,IAAA,iBAAiB,EAAE,6CAA6C;AAChE,IAAA,qBAAqB,EAAE,iDAAiD;;AAG1E;;;AAGG;AACI,MAAM,oBAAoB,GAAG;AAClC,IAAA,eAAe,EAAE;QACf,UAAU,EAAE,+BAA+B,CAAC,mBAAmB;AAC/D,QAAA,OAAO,EAAE;YACP,IAAI,EAAE,+BAA+B,CAAC,gBAAgB;AACvD,SAAA;AACD,QAAA,aAAa,EAAE;YACb,OAAO,EAAE,+BAA+B,CAAC,wBAAwB;AAClE,SAAA;AACD,QAAA,cAAc,EAAE;YACd,OAAO,EAAE,+BAA+B,CAAC,wBAAwB;AAClE,SAAA;AACD,QAAA,WAAW,EAAE;YACX,OAAO,EAAE,+BAA+B,CAAC,wBAAwB;AAClE,SAAA;AACF,KAAA;;AAGH;;AClDA;AAgCA;;AChCA;AA8BA;;AC9BA;AA6HA;;AC7HA;AAEO,MAAM,sBAAsB,GAAG;AACpC,IAAA,qBAAqB,EAAE,8BAA8B;AACrD,IAAA,kBAAkB,EAAE,2BAA2B;;AAKjD;AACO,MAAM,0BAA0B,GAAuC;AAC5E,IAAA,CAAC,sBAAsB,CAAC,qBAAqB,GAAG,iDAAiD;AACjG,IAAA,CAAC,sBAAsB,CAAC,kBAAkB,GAAG,8CAA8C;;AAG7F;;ACfA;;AAEG;;"}
1
+ {"version":3,"file":"acorex-platform-extension-project-management-simpro-client-contracts.mjs","sources":["../../../../libs/extensions/project-management/simpro/contracts/src/root-config.ts","../../../../libs/extensions/project-management/simpro/contracts/src/manifest.ts","../../../../libs/extensions/project-management/simpro/contracts/src/commands.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/menu.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/permission.keys.ts","../../../../libs/extensions/project-management/simpro/contracts/src/connection.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/oauth.api.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/project-sync.api.types.ts","../../../../libs/extensions/project-management/simpro/contracts/src/simpro.errors.ts","../../../../libs/extensions/project-management/simpro/contracts/src/acorex-platform-extension-project-management-simpro-client-contracts.ts"],"sourcesContent":["//#region ---- Module Config ----\n\nconst config = {\n i18n: 'extensions-simpro',\n};\n\nconst MODULE_NAME = 'SimproExtension';\n\nexport const RootConfig = {\n config,\n module: {\n name: MODULE_NAME,\n title: `@${config.i18n}:integration.display-name`,\n icon: 'fa-light fa-briefcase',\n },\n};\n\n//#endregion\n","//#region ---- Manifest ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-shared/core';\nimport { RootConfig } from './root-config';\n\nexport const SimproExtensionManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'integration',\n domain: 'project-management',\n dependencies: [],\n};\n\n//#endregion\n","//#region ---- Command Keys ----\n\nexport const AXESimproCommandKeys = {\n ConnectionConnect: 'simpro-extension.Connection:Connect',\n ConnectionCompleteOAuth: 'simpro-extension.Connection:CompleteOAuth',\n ConnectionLifecycle: 'simpro-extension.Connection:Lifecycle',\n OAuthStart: 'simpro-extension.OAuth:Start',\n OAuthComplete: 'simpro-extension.OAuth:Complete',\n OAuthValidate: 'simpro-extension.OAuth:Validate',\n ProjectImportFromSimpro: 'simpro-extension.Project:ImportFromSimpro',\n CustomerImportFromSimpro: 'simpro-extension.Customer:ImportFromSimpro',\n ProjectSync: 'simpro-extension.Project:Sync',\n JobsPull: 'simpro-extension.Jobs:Pull',\n JobsRefresh: 'simpro-extension.Jobs:Refresh',\n} as const;\n\n//#endregion\n","//#region ---- Menu Keys ----\n\nexport const AXESimproMenuKeys = {\n SimproExtensionConfig: 'simpro-extension:Menu:Configuration',\n} as const;\n\n//#endregion\n","//#region ---- Permission Keys ----\n\n/**\n * Administration capabilities used by this extension.\n * Domain capability keys for this module. Root groups live in `AXPCommonPermissionGroupKeys` (common contracts).\n */\nexport const AXPAdministrationPermissionKeys = {\n Access: 'Administration:Permission:Access',\n MaintainUsersAndRoles: 'Administration:Permission:MaintainUsersAndRoles',\n ManageSessions: 'Administration:Permission:ManageSessions',\n MaintainPolicies: 'Administration:Permission:MaintainPolicies',\n ViewIntegrations: 'Administration:Permission:ViewIntegrations',\n MaintainConnections: 'Administration:Permission:MaintainConnections',\n ManageIntegrationActions: 'Administration:Permission:ManageIntegrationActions',\n MaintainWorkflows: 'Administration:Permission:MaintainWorkflows',\n ManageWorkflowActions: 'Administration:Permission:ManageWorkflowActions',\n ViewRules: 'Administration:Permission:ViewRules',\n MaintainRules: 'Administration:Permission:MaintainRules',\n ManageRuleActions: 'Administration:Permission:ManageRuleActions',\n MaintainAi: 'Administration:Permission:MaintainAi',\n UseAiAssist: 'Administration:Permission:UseAiAssist',\n MaintainDashboards: 'Administration:Permission:MaintainDashboards',\n ViewJobs: 'Administration:Permission:ViewJobs',\n ManageJobActions: 'Administration:Permission:ManageJobActions',\n ViewObservability: 'Administration:Permission:ViewObservability',\n MaintainObservability: 'Administration:Permission:MaintainObservability',\n} as const;\n\n/**\n * @deprecated Prefer {@link AXPAdministrationPermissionKeys}.\n * Legacy nested shape kept so existing imports compile during migration.\n */\nexport const AXESimproPermissions = {\n SimproExtension: {\n Management: AXPAdministrationPermissionKeys.MaintainConnections,\n Catalog: {\n View: AXPAdministrationPermissionKeys.ViewIntegrations,\n },\n ProjectImport: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n CustomerImport: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n ProjectSync: {\n Execute: AXPAdministrationPermissionKeys.ManageIntegrationActions,\n },\n },\n} as const;\n\n//#endregion\n","//#region ---- Simpro tenant connection config ----\n\n/** Stored on IntegrationManagement connection `config` for tenant-scoped Simpro (cloud-only). */\nexport interface AXESimproConnectionConfig {\n /** Simpro multi-company ID (0 for single-company builds). */\n companyId?: number;\n /** OAuth2 client ID from the Simpro application key file. */\n clientId?: string;\n /** OAuth2 client secret from the Simpro application key file. */\n clientSecret?: string;\n /** Optional override when it differs from `{buildUrl}/oauth2/login`. */\n authorizationUrl?: string;\n /** Current bearer token (authorization-code flow). */\n accessToken?: string;\n /** Refresh token from Simpro token response. */\n refreshToken?: string;\n /** ISO timestamp when `accessToken` expires. */\n tokenExpiresAt?: string;\n /** Full Simpro token JSON response (mirrors legacy SimproJson). */\n oauthTokenJson?: string;\n /** Background job pull sync state (server-managed). */\n jobsSync?: AXESimproJobsSyncState;\n}\n\n/** Simpro job pull sync state stored on the tenant connection `config.jobsSync`. */\nexport interface AXESimproJobsSyncState {\n /** ISO timestamp — last successful job pull (incremental sync watermark). */\n lastSyncAt?: string;\n /** ISO timestamp — last full snapshot reconcile (deactivation pass). */\n lastFullReconcileAt?: string;\n}\n\n//#endregion\n","//#region ---- Simpro OAuth API (client ↔ server) ----\n\nexport interface AXESimproOAuthStartRequest {\n redirectUri: string;\n connectionId?: string;\n}\n\nexport interface AXESimproOAuthStartResponse {\n redirectUrl: string;\n state: string;\n}\n\nexport interface AXESimproOAuthCompleteRequest {\n state: string;\n code: string;\n}\n\nexport interface AXESimproOAuthCompleteResponse {\n connectionId: string;\n}\n\nexport interface AXESimproOAuthValidateRequest {\n connectionId?: string;\n}\n\nexport interface AXESimproOAuthValidateResponse {\n valid: boolean;\n message?: string;\n}\n\n//#endregion\n","//#region ---- Remote Simpro DTOs ----\n\nimport type { AXESimproProjectSyncStrategy } from './sync.types';\n\nexport interface AXESimproRemotePartyRef {\n ID?: number;\n Name?: string | null;\n GivenName?: string | null;\n CompanyName?: string | null;\n}\n\nexport interface AXESimproRemoteAddress {\n Address?: string | null;\n City?: string | null;\n State?: string | null;\n PostalCode?: string | null;\n}\n\nexport interface AXESimproRemoteJob {\n ID: number;\n Name?: string | null;\n Description?: string | null;\n OrderNo?: string | null;\n RequestNo?: string | null;\n Type?: string | null;\n Stage?: string | { Name?: string } | null;\n DateIssued?: string | null;\n DueDate?: string | null;\n DueTime?: string | null;\n DateModified?: string | null;\n Status?: { ID?: number; Name?: string } | string | null;\n Customer?: AXESimproRemotePartyRef | string | null;\n Site?: AXESimproRemotePartyRef | string | null;\n}\n\nexport interface AXESimproRemoteCustomer {\n ID: number;\n GivenName?: string | null;\n FamilyName?: string | null;\n Title?: string | null;\n Phone?: string | null;\n Email?: string | null;\n EIN?: string | null;\n CompanyName?: string | null;\n Address?: AXESimproRemoteAddress | null;\n BillingAddress?: AXESimproRemoteAddress | null;\n}\n\nexport interface AXESimproRemoteSitePrimaryContact {\n CellPhone?: string | null;\n Email?: string | null;\n Contact?: { ID?: number } | null;\n}\n\nexport interface AXESimproRemoteSite {\n ID: number;\n Name?: string | null;\n Address?: AXESimproRemoteAddress | null;\n PrimaryContact?: AXESimproRemoteSitePrimaryContact | null;\n}\n\n//#endregion\n\n//#region ---- API request / response ----\n\nexport interface AXESimproPullJobsRequest {\n /** When set, pulls for this Simpro connection (required for multi-connection schedules). */\n connectionId?: string;\n /** Maximum Simpro jobs to pull into the cache (default 250, max 1000). */\n maxJobs?: number;\n /**\n * When true, runs a full snapshot (no incremental filter) and reconciles deactivations.\n * When false (default for schedules), pulls jobs modified since the last successful sync.\n */\n force?: boolean;\n}\n\nexport interface AXESimproPullJobsResponse {\n upserted: number;\n deactivated: number;\n /** True when incremental pull found no modified jobs in Simpro. */\n skipped?: boolean;\n /** Whether this run used incremental or full snapshot mode. */\n syncMode?: 'incremental' | 'full';\n /** Per data-type upsert counts (jobs / customers / sites). */\n byResourceType?: {\n job?: { upserted: number; deactivated: number };\n customer?: { upserted: number; deactivated: number };\n site?: { upserted: number; deactivated: number };\n };\n}\n\nexport interface AXESimproImportJobRequest {\n remoteRecordId: string;\n projectTypeId: string;\n syncStrategy: AXESimproProjectSyncStrategy;\n}\n\nexport interface AXESimproImportJobResponse {\n platformProjectId: string;\n created: boolean;\n}\n\nexport interface AXESimproImportCustomerRequest {\n remoteRecordId: string;\n}\n\nexport interface AXESimproImportCustomerResponse {\n platformCustomerId: string;\n created: boolean;\n}\n\nexport interface AXESimproSyncPlatformProjectRequest {\n platformProjectId: string;\n}\n\nexport interface AXESimproConnectionLifecycleRequest {\n connectionId: string;\n action: 'connected' | 'disconnected' | 'deleted' | 'enabled' | 'disabled';\n}\n\nexport interface AXESimproConnectionLifecycleResponse {\n ok: true;\n}\n\n//#endregion\n","//#region ----- Simpro error codes -----\n\nexport const AXE_SIMPRO_ERROR_CODES = {\n COMPANY_ID_ZERO_MULTI: 'SIMPRO_COMPANY_ID_ZERO_MULTI',\n COMPANY_ID_INVALID: 'SIMPRO_COMPANY_ID_INVALID',\n} as const;\n\nexport type AXESimproErrorCode = (typeof AXE_SIMPRO_ERROR_CODES)[keyof typeof AXE_SIMPRO_ERROR_CODES];\n\n/** Client i18n keys for known Simpro error codes. */\nexport const AXE_SIMPRO_ERROR_I18N_KEYS: Record<AXESimproErrorCode, string> = {\n [AXE_SIMPRO_ERROR_CODES.COMPANY_ID_ZERO_MULTI]: '@extensions-simpro:errors.company-id-zero-multi',\n [AXE_SIMPRO_ERROR_CODES.COMPANY_ID_INVALID]: '@extensions-simpro:errors.company-id-invalid',\n};\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';
2
2
  import { AXPIntegrationRuntimeService, AXP_INTEGRATION_SECRET_STORE, AXPSettingsService, AXP_INTEGRATION_RUNTIME_PROVIDER, AXP_INTEGRATION_CONNECTION_LIFECYCLE, AXP_MENU_PROVIDER, AXP_INTEGRATION_PROVIDER } from '@acorex-platform/framework-client/common';
3
- import { AXP_LOGO_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex-platform/framework-client/core';
3
+ import { AXP_LOGO_PROVIDER, AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex-platform/framework-client/core';
4
4
  import { AXPEntityService, ensureListActions, actionExists, AXP_ENTITY_MODIFIER } from '@acorex-platform/framework-client/layout/entity';
5
5
  import { AXPQueryService, AXPCommandService, provideCommandSetups } from '@acorex-platform/framework-client/runtime';
6
6
  import * as i0 from '@angular/core';
@@ -458,19 +458,6 @@ const AXE_SIMPRO_LOGO_PROVIDER = {
458
458
  multi: true,
459
459
  };
460
460
 
461
- //#region ---- Manifest ----
462
- const SimproExtensionManifest = {
463
- name: RootConfig$2.module.name,
464
- version: '1.0.0',
465
- title: RootConfig$2.module.title,
466
- icon: RootConfig$2.module.icon,
467
- i18n: RootConfig$2.config.i18n,
468
- type: 'integration',
469
- domain: 'project-management',
470
- dependencies: [],
471
- };
472
- //#endregion
473
-
474
461
  //#region ---- Imports ----
475
462
  //#endregion
476
463
  class AXESimproMenuProvider {
@@ -509,7 +496,6 @@ class AXESimproExtensionModule {
509
496
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXESimproExtensionModule, imports: [AXMIntegrationManagementModule] }); }
510
497
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXESimproExtensionModule, providers: [
511
498
  AXE_SIMPRO_LOGO_PROVIDER,
512
- { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SimproExtensionManifest, multi: true },
513
499
  { provide: AXP_MENU_PROVIDER, useClass: AXESimproMenuProvider, multi: true },
514
500
  { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproProjectEntityModifier, multi: true },
515
501
  { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproCustomerEntityModifier, multi: true },
@@ -539,7 +525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
539
525
  imports: [AXMIntegrationManagementModule],
540
526
  providers: [
541
527
  AXE_SIMPRO_LOGO_PROVIDER,
542
- { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SimproExtensionManifest, multi: true },
543
528
  { provide: AXP_MENU_PROVIDER, useClass: AXESimproMenuProvider, multi: true },
544
529
  { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproProjectEntityModifier, multi: true },
545
530
  { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproCustomerEntityModifier, multi: true },
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-platform-extension-project-management-simpro-client.mjs","sources":["../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/simpro-expression-scope.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/simpro-project-link-expression-evaluator-scope.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/project-simpro.entity-modifier.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/customer-management/customer-simpro.entity-modifier.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo-key.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.integration.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro-integration-settings-badges.util.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.integration-runtime.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.connection-lifecycle.handler.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/manifest.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/menu.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/simpro-extension.module.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-mark.paths.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo.component.ts","../../../../libs/extensions/project-management/simpro/client/src/acorex-platform-extension-project-management-simpro-client.ts"],"sourcesContent":["export const AXE_SIMPRO_EXPRESSION_SCOPE = 'SimproExtension';\n","//#region ---- Imports ----\n\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';\nimport { AXPIntegrationRuntimeService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { AXE_PM_INTEGRATION_PROVIDER_SIMPRO } from '@acorex-platform/extension-project-management-core-client/contracts';\nimport { RootConfig as PmRootConfig } from '@acorex-platform/module-project-management-client/contracts';\nimport type { AXMProjectManagementProjectEntityModel } from '@acorex-platform/module-project-management-client/contracts';\nimport { AXE_SIMPRO_EXPRESSION_SCOPE } from './simpro-expression-scope';\n\n//#endregion\n\nexport class AXESimproProjectLinkExpressionEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly integrationRuntime = inject(AXPIntegrationRuntimeService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope(AXE_SIMPRO_EXPRESSION_SCOPE, {\n hasProjectLink: async (platformProjectIdRaw?: unknown): Promise<boolean> => {\n const platformProjectId = typeof platformProjectIdRaw === 'string' ? platformProjectIdRaw.trim() : '';\n if (!platformProjectId) {\n return false;\n }\n\n const project = (await this.entityService\n .withEntity(PmRootConfig.module.name, PmRootConfig.entities.project.name)\n .data<string, AXMProjectManagementProjectEntityModel>()\n .byKey(platformProjectId)) as AXMProjectManagementProjectEntityModel | null;\n\n return project?.integrationRef?.source === AXE_PM_INTEGRATION_PROVIDER_SIMPRO;\n },\n hasSimproConnection: async (): Promise<boolean> => {\n try {\n await this.integrationRuntime.getConnection({ providerId: 'simpro', connectionScope: 'tenant' });\n return true;\n } catch {\n return false;\n }\n },\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex-platform/framework-shared/entity';\nimport {\n actionExists,\n AXPEntityModifierProvider,\n ensureListActions,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { RootConfig as PmRootConfig } from '@acorex-platform/module-project-management-client/contracts';\nimport { AXE_SIMPRO_EXPRESSION_SCOPE } from './simpro-expression-scope';\n\n//#endregion\n\nconst IMPORT_ORDER = 36;\nconst SYNC_ORDER = 37;\n\nfunction buildImportAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.ProjectImportFromSimpro,\n title: '@extensions-simpro:actions.import-from-simpro.title',\n command: { name: AXESimproCommandKeys.ProjectImportFromSimpro },\n priority: 'secondary',\n type: AXPSystemActionType.Import,\n icon: 'fa-light fa-briefcase',\n scope: AXPEntityCommandScope.TypeLevel,\n order: IMPORT_ORDER,\n };\n}\n\nfunction buildSyncAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.ProjectSync,\n title: '@extensions-simpro:actions.sync.title',\n command: {\n name: AXESimproCommandKeys.ProjectSync,\n options: { platformProjectId: '{{ context.eval(\"id\") }}' },\n },\n priority: 'secondary',\n type: AXPSystemActionType.Sync,\n icon: 'fa-light fa-arrows-rotate',\n scope: AXPEntityCommandScope.Individual,\n order: SYNC_ORDER,\n hidden: `{{ !(await ${AXE_SIMPRO_EXPRESSION_SCOPE}.hasProjectLink(context.eval(\"id\"))) }}`,\n };\n}\n\n/** Adds Simpro import/sync actions to ProjectManagement.Project views. */\nexport const AXESimproProjectEntityModifier: AXPEntityModifierProvider = {\n entityName: PmRootConfig.entities.project.name,\n order: 50,\n modifier: (ctx) => {\n if (ctx.module.get() !== PmRootConfig.module.name) {\n return;\n }\n\n ensureListActions(ctx);\n\n ctx.interfaces.update((interfaces) => {\n const next = (interfaces ?? {}) as Record<string, unknown>;\n const master = (next['master'] ?? {}) as Record<string, unknown>;\n const list = (master['list'] ?? { actions: [], views: [] }) as Record<string, unknown>;\n const listActions = (list['actions'] ?? []) as AXPEntityAction[];\n\n if (!actionExists(listActions, AXESimproCommandKeys.ProjectImportFromSimpro)) {\n listActions.push(buildImportAction());\n }\n list['actions'] = listActions;\n master['list'] = list;\n\n const single = master['single'] as Record<string, unknown> | undefined;\n if (single) {\n const singleActions = (single['actions'] ?? []) as AXPEntityAction[];\n if (!actionExists(singleActions, AXESimproCommandKeys.ProjectSync)) {\n singleActions.push(buildSyncAction());\n }\n single['actions'] = singleActions;\n }\n\n next['master'] = master;\n return next as typeof interfaces;\n });\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex-platform/framework-shared/entity';\nimport {\n actionExists,\n AXPEntityModifierProvider,\n ensureListActions,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { RootConfig as CustomerRootConfig } from '@acorex-platform/module-customer-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst IMPORT_ORDER = 36;\n\n//#endregion\n\n//#region ----- Actions -----\n\nfunction buildImportAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.CustomerImportFromSimpro,\n title: '@extensions-simpro:actions.import-from-simpro.title',\n command: { name: AXESimproCommandKeys.CustomerImportFromSimpro },\n priority: 'secondary',\n type: AXPSystemActionType.Import,\n icon: 'fa-light fa-briefcase',\n scope: AXPEntityCommandScope.TypeLevel,\n order: IMPORT_ORDER,\n };\n}\n\n//#endregion\n\n//#region ----- Modifier -----\n\n/** Adds Simpro import action to CustomerManagement.Customer list views. */\nexport const AXESimproCustomerEntityModifier: AXPEntityModifierProvider = {\n entityName: CustomerRootConfig.entities.customer.name,\n order: 50,\n modifier: (ctx) => {\n if (ctx.module.get() !== CustomerRootConfig.module.name) {\n return;\n }\n\n ensureListActions(ctx);\n\n ctx.interfaces.update((interfaces) => {\n const next = (interfaces ?? {}) as Record<string, unknown>;\n const master = (next['master'] ?? {}) as Record<string, unknown>;\n const list = (master['list'] ?? { actions: [], views: [] }) as Record<string, unknown>;\n const listActions = (list['actions'] ?? []) as AXPEntityAction[];\n\n if (!actionExists(listActions, AXESimproCommandKeys.CustomerImportFromSimpro)) {\n listActions.push(buildImportAction());\n }\n list['actions'] = listActions;\n master['list'] = list;\n next['master'] = master;\n return next as typeof interfaces;\n });\n },\n};\n\n//#endregion\n","//#region ---- Simpro logo registry key ----\n\nexport const axpSimproLogoKey = 'simpro' as const;\n\n//#endregion\n","import {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n AXP_INTEGRATION_CAPABILITY,\n AXP_INTEGRATION_CONNECTION_SCOPE,\n AXPWidgetsList,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPIntegrationProvider, AXPIntegrationProviderContext } from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { AXESimproCommandKeys, RootConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { axpSimproLogoKey } from '../brand/simpro-logo-key';\n\n@Injectable()\nexport class AXESimproIntegrationProvider implements AXPIntegrationProvider {\n async provide(context: AXPIntegrationProviderContext): Promise<void> {\n const I18N = `@${RootConfig.config.i18n}:integration`;\n\n context.register({\n domainId: 'project-management',\n id: 'simpro',\n module: RootConfig.module.name,\n displayName: `${I18N}.display-name`,\n description: `${I18N}.description`,\n icon: RootConfig.module.icon,\n logoKey: axpSimproLogoKey,\n capabilities: [AXP_INTEGRATION_CAPABILITY.Sync, AXP_INTEGRATION_CAPABILITY.Import],\n connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.Tenant],\n allowMultipleConnections: true,\n defaultConnectionKey: 'default',\n connectCommandKey: AXESimproCommandKeys.ConnectionConnect,\n completeOAuthCommandKey: AXESimproCommandKeys.ConnectionCompleteOAuth,\n authMethods: [\n {\n type: AXP_INTEGRATION_AUTH_METHOD_TYPE.OAuth2,\n label: `${I18N}.auth.oauth.label`,\n instructions: `${I18N}.auth.oauth.instructions`,\n usesRedirect: false,\n supportsRefresh: true,\n supportsRevoke: false,\n supportsValidation: true,\n fields: [\n {\n type: AXPWidgetsList.Editors.TextBox,\n path: 'clientId',\n options: { placeholder: `${I18N}.auth.oauth.client-id.placeholder` },\n },\n {\n type: AXPWidgetsList.Editors.PasswordBox,\n path: 'clientSecret',\n options: { placeholder: `${I18N}.auth.oauth.client-secret.placeholder` },\n },\n ],\n },\n ],\n });\n }\n}\n","//#region ---- Simpro integration settings badges ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPIntegrationConnectionSettingsContext,\n AXPIntegrationSettingsRowBadge,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXPBackgroundJobSchedule } from '@acorex-platform/framework-shared/background-job';\nimport type { AXESimproConnectionConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\n\nconst SIMPRO_I18N = '@extensions-simpro:integration.badges';\n\n/** Must match `SIMPRO_PULL_JOBS_COMMAND_KEY` / schedule `command.key`. */\nexport const SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY = 'simpro-extension.jobs.pull';\n\nasync function formatSyncTimestamp(\n iso: string,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<string | undefined> {\n const parsed = Date.parse(iso);\n if (!Number.isFinite(parsed)) {\n return undefined;\n }\n\n const dateFormat = await settingsService.get(AXPRegionalSetting.ShortDate);\n const timeFormat = await settingsService.get(AXPRegionalSetting.ShortTime);\n const format = `${dateFormat} ${timeFormat}`.trim();\n\n return formatService.format(new Date(parsed), 'datetime', { format });\n}\n\nfunction isFailureNewer(schedule: AXPBackgroundJobSchedule): boolean {\n const failed = schedule.lastFailureAt ? Date.parse(schedule.lastFailureAt) : NaN;\n const succeeded = schedule.lastSuccessAt ? Date.parse(schedule.lastSuccessAt) : NaN;\n if (!Number.isFinite(failed)) {\n return false;\n }\n if (!Number.isFinite(succeeded)) {\n return true;\n }\n return failed >= succeeded;\n}\n\nexport async function resolveSimproConnectionSettingsBadges(\n ctx: AXPIntegrationConnectionSettingsContext,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n schedule?: AXPBackgroundJobSchedule | null,\n): Promise<AXPIntegrationSettingsRowBadge[]> {\n const config = (ctx.connection.config ?? {}) as AXESimproConnectionConfig;\n const jobsSync = config.jobsSync as Record<string, unknown> | undefined;\n const lastSync =\n config.jobsSync?.lastSyncAt?.trim() ||\n (typeof jobsSync?.['lastSuccessfulSyncAt'] === 'string' ? jobsSync['lastSuccessfulSyncAt'].trim() : '');\n\n const badges: AXPIntegrationSettingsRowBadge[] = [];\n\n if (!lastSync) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.never-synced`,\n color: 'warning',\n });\n } else {\n const datetime = await formatSyncTimestamp(lastSync, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.last-sync`,\n params: { datetime },\n color: 'success',\n });\n }\n }\n\n if (!schedule) {\n return badges;\n }\n\n if (schedule.status === 'pause') {\n badges.push({\n labelKey: `${SIMPRO_I18N}.schedule-paused`,\n color: 'warning',\n });\n } else if (schedule.status === 'disabled') {\n badges.push({\n labelKey: `${SIMPRO_I18N}.schedule-disabled`,\n color: 'warning',\n });\n }\n\n if (schedule.nextRunAt) {\n const datetime = await formatSyncTimestamp(schedule.nextRunAt, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.next-run`,\n params: { datetime },\n color: 'secondary',\n });\n }\n }\n\n if (isFailureNewer(schedule) && schedule.lastFailureAt) {\n const datetime = await formatSyncTimestamp(schedule.lastFailureAt, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.last-failure`,\n params: { datetime },\n color: 'danger',\n });\n }\n }\n\n return badges;\n}\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_STATUS,\n runtimeQueryPayloadData,\n type AXPIntegrationProviderRuntimeHooks,\n type AXPIntegrationRuntimeContext,\n type AXPIntegrationValidationResult,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_INTEGRATION_SECRET_STORE,\n type AXPIntegrationRuntimeProvider,\n} from '@acorex-platform/framework-client/common';\nimport type { AXESimproConnectionConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { defaultTo, trim } from 'lodash-es';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPBackgroundJobQueryKeys,\n type AXPBackgroundJobSchedule,\n} from '@acorex-platform/framework-shared/background-job';\nimport {\n resolveSimproConnectionSettingsBadges,\n SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY,\n} from './simpro-integration-settings-badges.util';\n\n@Injectable()\nexport class AXESimproIntegrationRuntimeProvider implements AXPIntegrationRuntimeProvider {\n readonly providerId = 'simpro';\n\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly queryService = inject(AXPQueryService, { optional: true });\n\n async getHooks(): Promise<AXPIntegrationProviderRuntimeHooks> {\n return {\n validateConnection: (ctx) => this.validateConnection(ctx),\n createClient: (ctx) => this.createClient(ctx),\n getConnectionSettingsBadges: async (ctx) =>\n resolveSimproConnectionSettingsBadges(\n ctx,\n this.formatService,\n this.settingsService,\n await this.loadPullSchedule(ctx.connection.id),\n ),\n };\n }\n\n private async validateConnection(ctx: AXPIntegrationRuntimeContext): Promise<AXPIntegrationValidationResult> {\n const buildUrl = trim(defaultTo(ctx.instanceUrl, ''));\n if (!buildUrl) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Simpro build URL is missing on the connection.',\n };\n }\n\n if (!this.hasClientCredentials(ctx)) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Simpro client ID and client secret are required.',\n };\n }\n\n return {\n valid: true,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n externalAccountName: buildUrl,\n };\n }\n\n private async createClient(ctx: AXPIntegrationRuntimeContext): Promise<{ clientId: string; baseUrl?: string }> {\n const credentials = await this.resolveClientCredentials(ctx);\n return {\n clientId: credentials.clientId,\n baseUrl: defaultTo(ctx.instanceUrl, undefined),\n };\n }\n\n private hasClientCredentials(ctx: AXPIntegrationRuntimeContext): boolean {\n const config = (ctx.config ?? {}) as AXESimproConnectionConfig;\n const clientId = trim(defaultTo(config.clientId, ''));\n const clientSecret = trim(defaultTo(config.clientSecret, ''));\n const legacyToken = trim(defaultTo(config.accessToken, ''));\n const refreshToken = trim(defaultTo(config.refreshToken, ''));\n return Boolean((clientId && clientSecret) || legacyToken || refreshToken);\n }\n\n private async resolveClientCredentials(\n ctx: AXPIntegrationRuntimeContext,\n ): Promise<{ clientId: string; clientSecret?: string }> {\n const config = (ctx.config ?? {}) as AXESimproConnectionConfig;\n const configClientId = trim(defaultTo(config.clientId, ''));\n const configClientSecret = trim(defaultTo(config.clientSecret, ''));\n\n if (configClientId && configClientSecret) {\n return { clientId: configClientId, clientSecret: configClientSecret };\n }\n\n if (!this.secretStore || !trim(defaultTo(ctx.secretRef, ''))) {\n throw new Error('Simpro connection has no client credentials.');\n }\n\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n const clientId = trim(defaultTo(credentials.token ?? credentials.email, ''));\n const clientSecret = trim(defaultTo(credentials.password ?? credentials.apiToken, ''));\n if (!clientId || !clientSecret) {\n throw new Error('Simpro connection has no usable client credentials.');\n }\n\n return { clientId, clientSecret };\n }\n\n private async loadPullSchedule(connectionId: string): Promise<AXPBackgroundJobSchedule | null> {\n if (!this.queryService || !connectionId.trim()) {\n return null;\n }\n try {\n const result = await this.queryService.fetch<\n { commandKey: string; connectionId?: string },\n AXPBackgroundJobSchedule | null\n >(AXPBackgroundJobQueryKeys.ScheduleGetByScope, {\n commandKey: SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY,\n connectionId,\n });\n return runtimeQueryPayloadData(result) ?? null;\n } catch {\n return null;\n }\n }\n}\n\nexport const provideSimproIntegrationRuntimeProvider = {\n provide: AXP_INTEGRATION_RUNTIME_PROVIDER,\n useClass: AXESimproIntegrationRuntimeProvider,\n multi: true,\n};\n","//#region ---- Imports ----\n\nimport {\n AXP_INTEGRATION_CONNECTION_LIFECYCLE,\n type AXPIntegrationConnectionLifecycleHandler,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Handler ----\n\n@Injectable()\nexport class AXESimproConnectionLifecycleHandler implements AXPIntegrationConnectionLifecycleHandler {\n readonly providerId = 'simpro';\n\n private readonly commandService = inject(AXPCommandService);\n\n async onDisconnected(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n await this.runLifecycle(connection.id, 'disconnected');\n }\n\n async onDeleted(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n await this.runLifecycle(connection.id, 'deleted');\n }\n\n async onEnabledChanged(connection: AXPSafeIntegrationConnectionDto, enabled: boolean): Promise<void> {\n if (enabled) {\n if (connection.status === AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n await this.runLifecycle(connection.id, 'enabled');\n }\n return;\n }\n await this.runLifecycle(connection.id, 'disabled');\n }\n\n private async runLifecycle(\n connectionId: string,\n action: 'connected' | 'disconnected' | 'deleted' | 'enabled' | 'disabled',\n ): Promise<void> {\n await this.commandService.execute(AXESimproCommandKeys.ConnectionLifecycle, {\n connectionId,\n action,\n });\n }\n}\n\nexport const provideSimproConnectionLifecycleHandler = {\n provide: AXP_INTEGRATION_CONNECTION_LIFECYCLE,\n useClass: AXESimproConnectionLifecycleHandler,\n multi: true,\n};\n\n//#endregion\n","import {\n AXP_LOGO_PROVIDER,\n type AXPLogoProvider,\n type AXPLogoRequest,\n type AXPLogoView,\n} from '@acorex-platform/framework-client/core';\nimport { axpSimproLogoKey } from './simpro-logo-key';\n\nconst simproLogoProvider: AXPLogoProvider = {\n key: axpSimproLogoKey,\n resolve: async (request: AXPLogoRequest): Promise<AXPLogoView> => ({\n kind: 'component',\n load: () => import('./simpro-logo.component').then((module) => module.AXESimproLogoComponent),\n inputs: {\n appearance: request.appearance,\n size: request.size,\n },\n }),\n};\n\nexport const AXE_SIMPRO_LOGO_PROVIDER = {\n provide: AXP_LOGO_PROVIDER,\n useValue: simproLogoProvider,\n multi: true,\n} as const;\n","//#region ---- Manifest ----\n\nimport { AXPModuleManifest } from '@acorex-platform/framework-client/core';\nimport { RootConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\n\nexport const SimproExtensionManifest: AXPModuleManifest = {\n name: RootConfig.module.name,\n version: '1.0.0',\n title: RootConfig.module.title,\n icon: RootConfig.module.icon,\n i18n: RootConfig.config.i18n,\n type: 'integration',\n domain: 'project-management',\n dependencies: [],\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport {\n AXESimproMenuKeys,\n RootConfig,\n AXPAdministrationPermissionKeys\n} from '@acorex-platform/extension-project-management-simpro-client/contracts';\n\n//#endregion\n\n@Injectable()\nexport class AXESimproMenuProvider implements AXPMenuProvider {\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const policy = {\n features: [module.name],\n permissions: [AXPAdministrationPermissionKeys.MaintainConnections],\n };\n\n const configMenu = context.find(AXPCommonMenuKeys.Configuration);\n if (!context.find(AXESimproMenuKeys.SimproExtensionConfig).exists) {\n configMenu.addItems([\n {\n name: AXESimproMenuKeys.SimproExtensionConfig,\n text: '@extensions-simpro:module.menus.configuration.title',\n icon: module.icon,\n type: 'menu',\n priority: 8940,\n policy,\n children: [],\n },\n ]);\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';\nimport { AXP_INTEGRATION_PROVIDER, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER, AXP_MODULE_MANIFEST_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_ENTITY_MODIFIER } from '@acorex-platform/framework-client/layout/entity';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { AXESimproProjectLinkExpressionEvaluatorScopeProvider } from './features/project-management/simpro-project-link-expression-evaluator-scope.provider';\nimport { AXESimproProjectEntityModifier } from './features/project-management/project-simpro.entity-modifier';\nimport { AXESimproCustomerEntityModifier } from './features/customer-management/customer-simpro.entity-modifier';\nimport { AXESimproIntegrationProvider } from './integration/simpro.integration.provider';\nimport { provideSimproIntegrationRuntimeProvider } from './integration/simpro.integration-runtime.provider';\nimport { provideSimproConnectionLifecycleHandler } from './integration/simpro.connection-lifecycle.handler';\nimport { AXE_SIMPRO_LOGO_PROVIDER } from './brand/simpro-logo.provider';\nimport { SimproExtensionManifest } from './manifest';\nimport { AXESimproMenuProvider } from './menu.provider';\n\n//#endregion\n\n@NgModule({\n imports: [AXMIntegrationManagementModule],\n providers: [\n AXE_SIMPRO_LOGO_PROVIDER,\n { provide: AXP_MODULE_MANIFEST_PROVIDER, useValue: SimproExtensionManifest, multi: true },\n { provide: AXP_MENU_PROVIDER, useClass: AXESimproMenuProvider, multi: true },\n { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproProjectEntityModifier, multi: true },\n { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproCustomerEntityModifier, multi: true },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXESimproProjectLinkExpressionEvaluatorScopeProvider,\n multi: true,\n },\n { provide: AXP_INTEGRATION_PROVIDER, useClass: AXESimproIntegrationProvider, multi: true },\n provideSimproIntegrationRuntimeProvider,\n provideSimproConnectionLifecycleHandler,\n provideCommandSetups([\n {\n key: AXESimproCommandKeys.ConnectionConnect,\n command: () => import('./features/connect/connect-simpro.command').then((c) => c.ConnectSimproCommand),\n },\n {\n key: AXESimproCommandKeys.ConnectionCompleteOAuth,\n command: () =>\n import('./features/connect/complete-simpro-oauth.command').then((c) => c.CompleteSimproOAuthCommand),\n },\n ]),\n ],\n})\nexport class AXESimproExtensionModule {}\n\n//#endregion\n","//#region ---- Simpro mark vector paths ----\n\nexport const AXE_SIMPRO_MARK_BLUE = '#00338D';\nexport const AXE_SIMPRO_MARK_GOLD = '#FFCC00';\n\nexport const AXE_SIMPRO_MARK_PATH = 'M12 4.2C12.5 4.2 12.5 8.6 13.6 9.2C14.7 9.9 18.5 7.6 18.8 8.1C19 8.6 15.2 10.7 15.2 12C15.2 13.3 19 15.4 18.8 15.9C18.5 16.4 14.7 14.1 13.6 14.8C12.5 15.4 12.5 19.8 12 19.8C11.5 19.8 11.5 15.4 10.4 14.8C9.3 14.1 5.5 16.4 5.2 15.9C5 15.4 8.8 13.3 8.8 12C8.8 10.7 5 8.6 5.2 8.1C5.5 7.6 9.3 9.9 10.4 9.2C11.5 8.6 11.5 4.2 12 4.2Z';\n\n//#endregion\n","import type { AXPLogoAppearance } from '@acorex-platform/framework-client/core';\nimport { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\nimport { AXE_SIMPRO_MARK_BLUE, AXE_SIMPRO_MARK_GOLD, AXE_SIMPRO_MARK_PATH } from './simpro-mark.paths';\n\n//#region ---- Simpro brand logo (owned by Simpro extension) ----\n\n@Component({\n selector: 'axe-simpro-logo',\n host: { class: 'inline-flex items-center justify-center' },\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n @switch (resolvedAppearance()) {\n @case ('monochrome') {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"currentColor\" />\n <path fill=\"#fff\" [attr.d]=\"markPath\" />\n </svg>\n }\n @default {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" [attr.fill]=\"markBlue\" />\n <path [attr.fill]=\"markGold\" [attr.d]=\"markPath\" />\n </svg>\n }\n }\n `,\n})\nexport class AXESimproLogoComponent {\n appearance = input<AXPLogoAppearance>('colored');\n size = input(20);\n\n protected readonly markPath = AXE_SIMPRO_MARK_PATH;\n protected readonly markBlue = AXE_SIMPRO_MARK_BLUE;\n protected readonly markGold = AXE_SIMPRO_MARK_GOLD;\n\n protected readonly resolvedAppearance = computed(() => {\n const value = this.appearance();\n return value === 'monochrome' ? 'monochrome' : 'colored';\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PmRootConfig","IMPORT_ORDER","buildImportAction","CustomerRootConfig","RootConfig"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-platform-extension-project-management-simpro-client.mjs","sources":["../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/simpro-expression-scope.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/simpro-project-link-expression-evaluator-scope.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/project-management/project-simpro.entity-modifier.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/features/customer-management/customer-simpro.entity-modifier.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo-key.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.integration.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro-integration-settings-badges.util.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.integration-runtime.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/integration/simpro.connection-lifecycle.handler.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/menu.provider.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/simpro-extension.module.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-mark.paths.ts","../../../../libs/extensions/project-management/simpro/client/src/lib/brand/simpro-logo.component.ts","../../../../libs/extensions/project-management/simpro/client/src/acorex-platform-extension-project-management-simpro-client.ts"],"sourcesContent":["export const AXE_SIMPRO_EXPRESSION_SCOPE = 'SimproExtension';\n","//#region ---- Imports ----\n\nimport { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';\nimport { AXPIntegrationRuntimeService } from '@acorex-platform/framework-client/common';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { inject } from '@angular/core';\nimport { AXE_PM_INTEGRATION_PROVIDER_SIMPRO } from '@acorex-platform/extension-project-management-core-client/contracts';\nimport { RootConfig as PmRootConfig } from '@acorex-platform/module-project-management-client/contracts';\nimport type { AXMProjectManagementProjectEntityModel } from '@acorex-platform/module-project-management-client/contracts';\nimport { AXE_SIMPRO_EXPRESSION_SCOPE } from './simpro-expression-scope';\n\n//#endregion\n\nexport class AXESimproProjectLinkExpressionEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n private readonly entityService = inject(AXPEntityService);\n private readonly integrationRuntime = inject(AXPIntegrationRuntimeService);\n\n async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n context.addScope(AXE_SIMPRO_EXPRESSION_SCOPE, {\n hasProjectLink: async (platformProjectIdRaw?: unknown): Promise<boolean> => {\n const platformProjectId = typeof platformProjectIdRaw === 'string' ? platformProjectIdRaw.trim() : '';\n if (!platformProjectId) {\n return false;\n }\n\n const project = (await this.entityService\n .withEntity(PmRootConfig.module.name, PmRootConfig.entities.project.name)\n .data<string, AXMProjectManagementProjectEntityModel>()\n .byKey(platformProjectId)) as AXMProjectManagementProjectEntityModel | null;\n\n return project?.integrationRef?.source === AXE_PM_INTEGRATION_PROVIDER_SIMPRO;\n },\n hasSimproConnection: async (): Promise<boolean> => {\n try {\n await this.integrationRuntime.getConnection({ providerId: 'simpro', connectionScope: 'tenant' });\n return true;\n } catch {\n return false;\n }\n },\n });\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex-platform/framework-shared/entity';\nimport {\n actionExists,\n AXPEntityModifierProvider,\n ensureListActions,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { RootConfig as PmRootConfig } from '@acorex-platform/module-project-management-client/contracts';\nimport { AXE_SIMPRO_EXPRESSION_SCOPE } from './simpro-expression-scope';\n\n//#endregion\n\nconst IMPORT_ORDER = 36;\nconst SYNC_ORDER = 37;\n\nfunction buildImportAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.ProjectImportFromSimpro,\n title: '@extensions-simpro:actions.import-from-simpro.title',\n command: { name: AXESimproCommandKeys.ProjectImportFromSimpro },\n priority: 'secondary',\n type: AXPSystemActionType.Import,\n icon: 'fa-light fa-briefcase',\n scope: AXPEntityCommandScope.TypeLevel,\n order: IMPORT_ORDER,\n };\n}\n\nfunction buildSyncAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.ProjectSync,\n title: '@extensions-simpro:actions.sync.title',\n command: {\n name: AXESimproCommandKeys.ProjectSync,\n options: { platformProjectId: '{{ context.eval(\"id\") }}' },\n },\n priority: 'secondary',\n type: AXPSystemActionType.Sync,\n icon: 'fa-light fa-arrows-rotate',\n scope: AXPEntityCommandScope.Individual,\n order: SYNC_ORDER,\n hidden: `{{ !(await ${AXE_SIMPRO_EXPRESSION_SCOPE}.hasProjectLink(context.eval(\"id\"))) }}`,\n };\n}\n\n/** Adds Simpro import/sync actions to ProjectManagement.Project views. */\nexport const AXESimproProjectEntityModifier: AXPEntityModifierProvider = {\n entityName: PmRootConfig.entities.project.name,\n order: 50,\n modifier: (ctx) => {\n if (ctx.module.get() !== PmRootConfig.module.name) {\n return;\n }\n\n ensureListActions(ctx);\n\n ctx.interfaces.update((interfaces) => {\n const next = (interfaces ?? {}) as Record<string, unknown>;\n const master = (next['master'] ?? {}) as Record<string, unknown>;\n const list = (master['list'] ?? { actions: [], views: [] }) as Record<string, unknown>;\n const listActions = (list['actions'] ?? []) as AXPEntityAction[];\n\n if (!actionExists(listActions, AXESimproCommandKeys.ProjectImportFromSimpro)) {\n listActions.push(buildImportAction());\n }\n list['actions'] = listActions;\n master['list'] = list;\n\n const single = master['single'] as Record<string, unknown> | undefined;\n if (single) {\n const singleActions = (single['actions'] ?? []) as AXPEntityAction[];\n if (!actionExists(singleActions, AXESimproCommandKeys.ProjectSync)) {\n singleActions.push(buildSyncAction());\n }\n single['actions'] = singleActions;\n }\n\n next['master'] = master;\n return next as typeof interfaces;\n });\n },\n};\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXPSystemActionType } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityAction, AXPEntityCommandScope } from '@acorex-platform/framework-shared/entity';\nimport {\n actionExists,\n AXPEntityModifierProvider,\n ensureListActions,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { RootConfig as CustomerRootConfig } from '@acorex-platform/module-customer-management-client/contracts';\n\n//#endregion\n\n//#region ----- Constants -----\n\nconst IMPORT_ORDER = 36;\n\n//#endregion\n\n//#region ----- Actions -----\n\nfunction buildImportAction(): AXPEntityAction {\n return {\n name: AXESimproCommandKeys.CustomerImportFromSimpro,\n title: '@extensions-simpro:actions.import-from-simpro.title',\n command: { name: AXESimproCommandKeys.CustomerImportFromSimpro },\n priority: 'secondary',\n type: AXPSystemActionType.Import,\n icon: 'fa-light fa-briefcase',\n scope: AXPEntityCommandScope.TypeLevel,\n order: IMPORT_ORDER,\n };\n}\n\n//#endregion\n\n//#region ----- Modifier -----\n\n/** Adds Simpro import action to CustomerManagement.Customer list views. */\nexport const AXESimproCustomerEntityModifier: AXPEntityModifierProvider = {\n entityName: CustomerRootConfig.entities.customer.name,\n order: 50,\n modifier: (ctx) => {\n if (ctx.module.get() !== CustomerRootConfig.module.name) {\n return;\n }\n\n ensureListActions(ctx);\n\n ctx.interfaces.update((interfaces) => {\n const next = (interfaces ?? {}) as Record<string, unknown>;\n const master = (next['master'] ?? {}) as Record<string, unknown>;\n const list = (master['list'] ?? { actions: [], views: [] }) as Record<string, unknown>;\n const listActions = (list['actions'] ?? []) as AXPEntityAction[];\n\n if (!actionExists(listActions, AXESimproCommandKeys.CustomerImportFromSimpro)) {\n listActions.push(buildImportAction());\n }\n list['actions'] = listActions;\n master['list'] = list;\n next['master'] = master;\n return next as typeof interfaces;\n });\n },\n};\n\n//#endregion\n","//#region ---- Simpro logo registry key ----\n\nexport const axpSimproLogoKey = 'simpro' as const;\n\n//#endregion\n","import {\n AXP_INTEGRATION_AUTH_METHOD_TYPE,\n AXP_INTEGRATION_CAPABILITY,\n AXP_INTEGRATION_CONNECTION_SCOPE,\n AXPWidgetsList,\n} from '@acorex-platform/framework-shared/core';\nimport { AXPIntegrationProvider, AXPIntegrationProviderContext } from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport { AXESimproCommandKeys, RootConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { axpSimproLogoKey } from '../brand/simpro-logo-key';\n\n@Injectable()\nexport class AXESimproIntegrationProvider implements AXPIntegrationProvider {\n async provide(context: AXPIntegrationProviderContext): Promise<void> {\n const I18N = `@${RootConfig.config.i18n}:integration`;\n\n context.register({\n domainId: 'project-management',\n id: 'simpro',\n module: RootConfig.module.name,\n displayName: `${I18N}.display-name`,\n description: `${I18N}.description`,\n icon: RootConfig.module.icon,\n logoKey: axpSimproLogoKey,\n capabilities: [AXP_INTEGRATION_CAPABILITY.Sync, AXP_INTEGRATION_CAPABILITY.Import],\n connectionScopes: [AXP_INTEGRATION_CONNECTION_SCOPE.Tenant],\n allowMultipleConnections: true,\n defaultConnectionKey: 'default',\n connectCommandKey: AXESimproCommandKeys.ConnectionConnect,\n completeOAuthCommandKey: AXESimproCommandKeys.ConnectionCompleteOAuth,\n authMethods: [\n {\n type: AXP_INTEGRATION_AUTH_METHOD_TYPE.OAuth2,\n label: `${I18N}.auth.oauth.label`,\n instructions: `${I18N}.auth.oauth.instructions`,\n usesRedirect: false,\n supportsRefresh: true,\n supportsRevoke: false,\n supportsValidation: true,\n fields: [\n {\n type: AXPWidgetsList.Editors.TextBox,\n path: 'clientId',\n options: { placeholder: `${I18N}.auth.oauth.client-id.placeholder` },\n },\n {\n type: AXPWidgetsList.Editors.PasswordBox,\n path: 'clientSecret',\n options: { placeholder: `${I18N}.auth.oauth.client-secret.placeholder` },\n },\n ],\n },\n ],\n });\n }\n}\n","//#region ---- Simpro integration settings badges ----\n\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPRegionalSetting } from '@acorex-platform/framework-shared/core';\nimport type {\n AXPIntegrationConnectionSettingsContext,\n AXPIntegrationSettingsRowBadge,\n} from '@acorex-platform/framework-shared/core';\nimport type { AXPBackgroundJobSchedule } from '@acorex-platform/framework-shared/background-job';\nimport type { AXESimproConnectionConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\n\nconst SIMPRO_I18N = '@extensions-simpro:integration.badges';\n\n/** Must match `SIMPRO_PULL_JOBS_COMMAND_KEY` / schedule `command.key`. */\nexport const SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY = 'simpro-extension.jobs.pull';\n\nasync function formatSyncTimestamp(\n iso: string,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n): Promise<string | undefined> {\n const parsed = Date.parse(iso);\n if (!Number.isFinite(parsed)) {\n return undefined;\n }\n\n const dateFormat = await settingsService.get(AXPRegionalSetting.ShortDate);\n const timeFormat = await settingsService.get(AXPRegionalSetting.ShortTime);\n const format = `${dateFormat} ${timeFormat}`.trim();\n\n return formatService.format(new Date(parsed), 'datetime', { format });\n}\n\nfunction isFailureNewer(schedule: AXPBackgroundJobSchedule): boolean {\n const failed = schedule.lastFailureAt ? Date.parse(schedule.lastFailureAt) : NaN;\n const succeeded = schedule.lastSuccessAt ? Date.parse(schedule.lastSuccessAt) : NaN;\n if (!Number.isFinite(failed)) {\n return false;\n }\n if (!Number.isFinite(succeeded)) {\n return true;\n }\n return failed >= succeeded;\n}\n\nexport async function resolveSimproConnectionSettingsBadges(\n ctx: AXPIntegrationConnectionSettingsContext,\n formatService: AXFormatService,\n settingsService: AXPSettingsService,\n schedule?: AXPBackgroundJobSchedule | null,\n): Promise<AXPIntegrationSettingsRowBadge[]> {\n const config = (ctx.connection.config ?? {}) as AXESimproConnectionConfig;\n const jobsSync = config.jobsSync as Record<string, unknown> | undefined;\n const lastSync =\n config.jobsSync?.lastSyncAt?.trim() ||\n (typeof jobsSync?.['lastSuccessfulSyncAt'] === 'string' ? jobsSync['lastSuccessfulSyncAt'].trim() : '');\n\n const badges: AXPIntegrationSettingsRowBadge[] = [];\n\n if (!lastSync) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.never-synced`,\n color: 'warning',\n });\n } else {\n const datetime = await formatSyncTimestamp(lastSync, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.last-sync`,\n params: { datetime },\n color: 'success',\n });\n }\n }\n\n if (!schedule) {\n return badges;\n }\n\n if (schedule.status === 'pause') {\n badges.push({\n labelKey: `${SIMPRO_I18N}.schedule-paused`,\n color: 'warning',\n });\n } else if (schedule.status === 'disabled') {\n badges.push({\n labelKey: `${SIMPRO_I18N}.schedule-disabled`,\n color: 'warning',\n });\n }\n\n if (schedule.nextRunAt) {\n const datetime = await formatSyncTimestamp(schedule.nextRunAt, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.next-run`,\n params: { datetime },\n color: 'secondary',\n });\n }\n }\n\n if (isFailureNewer(schedule) && schedule.lastFailureAt) {\n const datetime = await formatSyncTimestamp(schedule.lastFailureAt, formatService, settingsService);\n if (datetime) {\n badges.push({\n labelKey: `${SIMPRO_I18N}.last-failure`,\n params: { datetime },\n color: 'danger',\n });\n }\n }\n\n return badges;\n}\n\n//#endregion\n","import {\n AXP_INTEGRATION_CONNECTION_STATUS,\n runtimeQueryPayloadData,\n type AXPIntegrationProviderRuntimeHooks,\n type AXPIntegrationRuntimeContext,\n type AXPIntegrationValidationResult,\n} from '@acorex-platform/framework-shared/core';\nimport {\n AXP_INTEGRATION_RUNTIME_PROVIDER,\n AXP_INTEGRATION_SECRET_STORE,\n type AXPIntegrationRuntimeProvider,\n} from '@acorex-platform/framework-client/common';\nimport type { AXESimproConnectionConfig } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { Injectable, inject } from '@angular/core';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { defaultTo, trim } from 'lodash-es';\nimport { AXPQueryService } from '@acorex-platform/framework-client/runtime';\nimport {\n AXPBackgroundJobQueryKeys,\n type AXPBackgroundJobSchedule,\n} from '@acorex-platform/framework-shared/background-job';\nimport {\n resolveSimproConnectionSettingsBadges,\n SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY,\n} from './simpro-integration-settings-badges.util';\n\n@Injectable()\nexport class AXESimproIntegrationRuntimeProvider implements AXPIntegrationRuntimeProvider {\n readonly providerId = 'simpro';\n\n private readonly secretStore = inject(AXP_INTEGRATION_SECRET_STORE, { optional: true });\n private readonly formatService = inject(AXFormatService);\n private readonly settingsService = inject(AXPSettingsService);\n private readonly queryService = inject(AXPQueryService, { optional: true });\n\n async getHooks(): Promise<AXPIntegrationProviderRuntimeHooks> {\n return {\n validateConnection: (ctx) => this.validateConnection(ctx),\n createClient: (ctx) => this.createClient(ctx),\n getConnectionSettingsBadges: async (ctx) =>\n resolveSimproConnectionSettingsBadges(\n ctx,\n this.formatService,\n this.settingsService,\n await this.loadPullSchedule(ctx.connection.id),\n ),\n };\n }\n\n private async validateConnection(ctx: AXPIntegrationRuntimeContext): Promise<AXPIntegrationValidationResult> {\n const buildUrl = trim(defaultTo(ctx.instanceUrl, ''));\n if (!buildUrl) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Simpro build URL is missing on the connection.',\n };\n }\n\n if (!this.hasClientCredentials(ctx)) {\n return {\n valid: false,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Invalid,\n errorMessage: 'Simpro client ID and client secret are required.',\n };\n }\n\n return {\n valid: true,\n status: AXP_INTEGRATION_CONNECTION_STATUS.Connected,\n externalAccountName: buildUrl,\n };\n }\n\n private async createClient(ctx: AXPIntegrationRuntimeContext): Promise<{ clientId: string; baseUrl?: string }> {\n const credentials = await this.resolveClientCredentials(ctx);\n return {\n clientId: credentials.clientId,\n baseUrl: defaultTo(ctx.instanceUrl, undefined),\n };\n }\n\n private hasClientCredentials(ctx: AXPIntegrationRuntimeContext): boolean {\n const config = (ctx.config ?? {}) as AXESimproConnectionConfig;\n const clientId = trim(defaultTo(config.clientId, ''));\n const clientSecret = trim(defaultTo(config.clientSecret, ''));\n const legacyToken = trim(defaultTo(config.accessToken, ''));\n const refreshToken = trim(defaultTo(config.refreshToken, ''));\n return Boolean((clientId && clientSecret) || legacyToken || refreshToken);\n }\n\n private async resolveClientCredentials(\n ctx: AXPIntegrationRuntimeContext,\n ): Promise<{ clientId: string; clientSecret?: string }> {\n const config = (ctx.config ?? {}) as AXESimproConnectionConfig;\n const configClientId = trim(defaultTo(config.clientId, ''));\n const configClientSecret = trim(defaultTo(config.clientSecret, ''));\n\n if (configClientId && configClientSecret) {\n return { clientId: configClientId, clientSecret: configClientSecret };\n }\n\n if (!this.secretStore || !trim(defaultTo(ctx.secretRef, ''))) {\n throw new Error('Simpro connection has no client credentials.');\n }\n\n const credentials = await this.secretStore.resolve(ctx.secretRef, ctx);\n const clientId = trim(defaultTo(credentials.token ?? credentials.email, ''));\n const clientSecret = trim(defaultTo(credentials.password ?? credentials.apiToken, ''));\n if (!clientId || !clientSecret) {\n throw new Error('Simpro connection has no usable client credentials.');\n }\n\n return { clientId, clientSecret };\n }\n\n private async loadPullSchedule(connectionId: string): Promise<AXPBackgroundJobSchedule | null> {\n if (!this.queryService || !connectionId.trim()) {\n return null;\n }\n try {\n const result = await this.queryService.fetch<\n { commandKey: string; connectionId?: string },\n AXPBackgroundJobSchedule | null\n >(AXPBackgroundJobQueryKeys.ScheduleGetByScope, {\n commandKey: SIMPRO_PULL_JOBS_SCHEDULE_COMMAND_KEY,\n connectionId,\n });\n return runtimeQueryPayloadData(result) ?? null;\n } catch {\n return null;\n }\n }\n}\n\nexport const provideSimproIntegrationRuntimeProvider = {\n provide: AXP_INTEGRATION_RUNTIME_PROVIDER,\n useClass: AXESimproIntegrationRuntimeProvider,\n multi: true,\n};\n","//#region ---- Imports ----\n\nimport {\n AXP_INTEGRATION_CONNECTION_LIFECYCLE,\n type AXPIntegrationConnectionLifecycleHandler,\n} from '@acorex-platform/framework-client/common';\nimport { AXP_INTEGRATION_CONNECTION_STATUS, type AXPSafeIntegrationConnectionDto } from '@acorex-platform/framework-shared/core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { Injectable, inject } from '@angular/core';\n\n//#endregion\n\n//#region ---- Handler ----\n\n@Injectable()\nexport class AXESimproConnectionLifecycleHandler implements AXPIntegrationConnectionLifecycleHandler {\n readonly providerId = 'simpro';\n\n private readonly commandService = inject(AXPCommandService);\n\n async onDisconnected(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n await this.runLifecycle(connection.id, 'disconnected');\n }\n\n async onDeleted(connection: AXPSafeIntegrationConnectionDto): Promise<void> {\n await this.runLifecycle(connection.id, 'deleted');\n }\n\n async onEnabledChanged(connection: AXPSafeIntegrationConnectionDto, enabled: boolean): Promise<void> {\n if (enabled) {\n if (connection.status === AXP_INTEGRATION_CONNECTION_STATUS.Connected) {\n await this.runLifecycle(connection.id, 'enabled');\n }\n return;\n }\n await this.runLifecycle(connection.id, 'disabled');\n }\n\n private async runLifecycle(\n connectionId: string,\n action: 'connected' | 'disconnected' | 'deleted' | 'enabled' | 'disabled',\n ): Promise<void> {\n await this.commandService.execute(AXESimproCommandKeys.ConnectionLifecycle, {\n connectionId,\n action,\n });\n }\n}\n\nexport const provideSimproConnectionLifecycleHandler = {\n provide: AXP_INTEGRATION_CONNECTION_LIFECYCLE,\n useClass: AXESimproConnectionLifecycleHandler,\n multi: true,\n};\n\n//#endregion\n","import {\n AXP_LOGO_PROVIDER,\n type AXPLogoProvider,\n type AXPLogoRequest,\n type AXPLogoView,\n} from '@acorex-platform/framework-client/core';\nimport { axpSimproLogoKey } from './simpro-logo-key';\n\nconst simproLogoProvider: AXPLogoProvider = {\n key: axpSimproLogoKey,\n resolve: async (request: AXPLogoRequest): Promise<AXPLogoView> => ({\n kind: 'component',\n load: () => import('./simpro-logo.component').then((module) => module.AXESimproLogoComponent),\n inputs: {\n appearance: request.appearance,\n size: request.size,\n },\n }),\n};\n\nexport const AXE_SIMPRO_LOGO_PROVIDER = {\n provide: AXP_LOGO_PROVIDER,\n useValue: simproLogoProvider,\n multi: true,\n} as const;\n","//#region ---- Imports ----\n\nimport {\n AXPCommonMenuKeys\n} from '@acorex-platform/module-common-client/contracts';\nimport { AXPMenuProvider, AXPMenuProviderContext } from '@acorex-platform/framework-client/common';\nimport { Injectable } from '@angular/core';\nimport {\n AXESimproMenuKeys,\n RootConfig,\n AXPAdministrationPermissionKeys\n} from '@acorex-platform/extension-project-management-simpro-client/contracts';\n\n//#endregion\n\n@Injectable()\nexport class AXESimproMenuProvider implements AXPMenuProvider {\n async provide(context: AXPMenuProviderContext): Promise<void> {\n const module = RootConfig.module;\n const policy = {\n features: [module.name],\n permissions: [AXPAdministrationPermissionKeys.MaintainConnections],\n };\n\n const configMenu = context.find(AXPCommonMenuKeys.Configuration);\n if (!context.find(AXESimproMenuKeys.SimproExtensionConfig).exists) {\n configMenu.addItems([\n {\n name: AXESimproMenuKeys.SimproExtensionConfig,\n text: '@extensions-simpro:module.menus.configuration.title',\n icon: module.icon,\n type: 'menu',\n priority: 8940,\n policy,\n children: [],\n },\n ]);\n }\n }\n}\n\n//#endregion\n","//#region ---- Imports ----\n\nimport { AXMIntegrationManagementModule } from '@acorex-platform/module-integration-management-client';\nimport { AXP_INTEGRATION_PROVIDER, AXP_MENU_PROVIDER } from '@acorex-platform/framework-client/common';\nimport { AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER } from '@acorex-platform/framework-client/core';\nimport { AXP_ENTITY_MODIFIER } from '@acorex-platform/framework-client/layout/entity';\nimport { provideCommandSetups } from '@acorex-platform/framework-client/runtime';\nimport { NgModule } from '@angular/core';\nimport { AXESimproCommandKeys } from '@acorex-platform/extension-project-management-simpro-client/contracts';\nimport { AXESimproProjectLinkExpressionEvaluatorScopeProvider } from './features/project-management/simpro-project-link-expression-evaluator-scope.provider';\nimport { AXESimproProjectEntityModifier } from './features/project-management/project-simpro.entity-modifier';\nimport { AXESimproCustomerEntityModifier } from './features/customer-management/customer-simpro.entity-modifier';\nimport { AXESimproIntegrationProvider } from './integration/simpro.integration.provider';\nimport { provideSimproIntegrationRuntimeProvider } from './integration/simpro.integration-runtime.provider';\nimport { provideSimproConnectionLifecycleHandler } from './integration/simpro.connection-lifecycle.handler';\nimport { AXE_SIMPRO_LOGO_PROVIDER } from './brand/simpro-logo.provider';\nimport { AXESimproMenuProvider } from './menu.provider';\n\n//#endregion\n\n@NgModule({\n imports: [AXMIntegrationManagementModule],\n providers: [\n AXE_SIMPRO_LOGO_PROVIDER,\n { provide: AXP_MENU_PROVIDER, useClass: AXESimproMenuProvider, multi: true },\n { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproProjectEntityModifier, multi: true },\n { provide: AXP_ENTITY_MODIFIER, useValue: AXESimproCustomerEntityModifier, multi: true },\n {\n provide: AXP_EXPRESSION_EVALUATOR_SCOPE_PROVIDER,\n useClass: AXESimproProjectLinkExpressionEvaluatorScopeProvider,\n multi: true,\n },\n { provide: AXP_INTEGRATION_PROVIDER, useClass: AXESimproIntegrationProvider, multi: true },\n provideSimproIntegrationRuntimeProvider,\n provideSimproConnectionLifecycleHandler,\n provideCommandSetups([\n {\n key: AXESimproCommandKeys.ConnectionConnect,\n command: () => import('./features/connect/connect-simpro.command').then((c) => c.ConnectSimproCommand),\n },\n {\n key: AXESimproCommandKeys.ConnectionCompleteOAuth,\n command: () =>\n import('./features/connect/complete-simpro-oauth.command').then((c) => c.CompleteSimproOAuthCommand),\n },\n ]),\n ],\n})\nexport class AXESimproExtensionModule {}\n\n//#endregion\n","//#region ---- Simpro mark vector paths ----\n\nexport const AXE_SIMPRO_MARK_BLUE = '#00338D';\nexport const AXE_SIMPRO_MARK_GOLD = '#FFCC00';\n\nexport const AXE_SIMPRO_MARK_PATH = 'M12 4.2C12.5 4.2 12.5 8.6 13.6 9.2C14.7 9.9 18.5 7.6 18.8 8.1C19 8.6 15.2 10.7 15.2 12C15.2 13.3 19 15.4 18.8 15.9C18.5 16.4 14.7 14.1 13.6 14.8C12.5 15.4 12.5 19.8 12 19.8C11.5 19.8 11.5 15.4 10.4 14.8C9.3 14.1 5.5 16.4 5.2 15.9C5 15.4 8.8 13.3 8.8 12C8.8 10.7 5 8.6 5.2 8.1C5.5 7.6 9.3 9.9 10.4 9.2C11.5 8.6 11.5 4.2 12 4.2Z';\n\n//#endregion\n","import type { AXPLogoAppearance } from '@acorex-platform/framework-client/core';\nimport { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\nimport { AXE_SIMPRO_MARK_BLUE, AXE_SIMPRO_MARK_GOLD, AXE_SIMPRO_MARK_PATH } from './simpro-mark.paths';\n\n//#region ---- Simpro brand logo (owned by Simpro extension) ----\n\n@Component({\n selector: 'axe-simpro-logo',\n host: { class: 'inline-flex items-center justify-center' },\n changeDetection: ChangeDetectionStrategy.Eager,\n template: `\n @switch (resolvedAppearance()) {\n @case ('monochrome') {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"currentColor\" />\n <path fill=\"#fff\" [attr.d]=\"markPath\" />\n </svg>\n }\n @default {\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" [attr.fill]=\"markBlue\" />\n <path [attr.fill]=\"markGold\" [attr.d]=\"markPath\" />\n </svg>\n }\n }\n `,\n})\nexport class AXESimproLogoComponent {\n appearance = input<AXPLogoAppearance>('colored');\n size = input(20);\n\n protected readonly markPath = AXE_SIMPRO_MARK_PATH;\n protected readonly markBlue = AXE_SIMPRO_MARK_BLUE;\n protected readonly markGold = AXE_SIMPRO_MARK_GOLD;\n\n protected readonly resolvedAppearance = computed(() => {\n const value = this.appearance();\n return value === 'monochrome' ? 'monochrome' : 'colored';\n });\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["PmRootConfig","IMPORT_ORDER","buildImportAction","CustomerRootConfig","RootConfig"],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex-platform/extension-project-management-simpro-client",
3
- "version": "0.0.38",
3
+ "version": "0.0.46",
4
4
  "sideEffects": false,
5
5
  "peerDependencies": {
6
- "@acorex-platform/extension-project-management-core-client": "0.0.38",
6
+ "@acorex-platform/extension-project-management-core-client": "0.0.46",
7
7
  "@angular/common": "^21.0.0 || ^22.0.0",
8
8
  "@angular/core": "^21.0.0 || ^22.0.0"
9
9
  },
@@ -1,3 +1,4 @@
1
+ import { AXPModuleManifest } from '@acorex-platform/framework-shared/core';
1
2
  import { AXEPMProjectSyncStrategy } from '@acorex-platform/extension-project-management-core-client/contracts';
2
3
  export { AXEPMProjectSyncStrategy, AXEPMProjectSyncStrategy as AXESimproProjectSyncStrategy, AXE_PM_PROJECT_SYNC_STRATEGIES as AXE_SIMPRO_PROJECT_SYNC_STRATEGIES } from '@acorex-platform/extension-project-management-core-client/contracts';
3
4
 
@@ -12,6 +13,8 @@ declare const RootConfig: {
12
13
  };
13
14
  };
14
15
 
16
+ declare const SimproExtensionManifest: AXPModuleManifest;
17
+
15
18
  declare const AXESimproCommandKeys: {
16
19
  readonly ConnectionConnect: "simpro-extension.Connection:Connect";
17
20
  readonly ConnectionCompleteOAuth: "simpro-extension.Connection:CompleteOAuth";
@@ -256,5 +259,5 @@ type AXESimproErrorCode = (typeof AXE_SIMPRO_ERROR_CODES)[keyof typeof AXE_SIMPR
256
259
  /** Client i18n keys for known Simpro error codes. */
257
260
  declare const AXE_SIMPRO_ERROR_I18N_KEYS: Record<AXESimproErrorCode, string>;
258
261
 
259
- export { AXESimproCommandKeys, AXESimproMenuKeys, AXESimproPermissions, AXE_SIMPRO_ERROR_CODES, AXE_SIMPRO_ERROR_I18N_KEYS, AXPAdministrationPermissionKeys, RootConfig };
262
+ export { AXESimproCommandKeys, AXESimproMenuKeys, AXESimproPermissions, AXE_SIMPRO_ERROR_CODES, AXE_SIMPRO_ERROR_I18N_KEYS, AXPAdministrationPermissionKeys, RootConfig, SimproExtensionManifest };
260
263
  export type { AXESimproConnectionConfig, AXESimproConnectionLifecycleRequest, AXESimproConnectionLifecycleResponse, AXESimproErrorCode, AXESimproImportCustomerRequest, AXESimproImportCustomerResponse, AXESimproImportJobRequest, AXESimproImportJobResponse, AXESimproJobsSyncState, AXESimproOAuthCompleteRequest, AXESimproOAuthCompleteResponse, AXESimproOAuthStartRequest, AXESimproOAuthStartResponse, AXESimproOAuthValidateRequest, AXESimproOAuthValidateResponse, AXESimproPullJobsRequest, AXESimproPullJobsResponse, AXESimproRemoteAddress, AXESimproRemoteCustomer, AXESimproRemoteJob, AXESimproRemotePartyRef, AXESimproRemoteSite, AXESimproRemoteSitePrimaryContact, AXESimproSyncPlatformProjectRequest };