Member Junction
    Preparing search index...

    Generic, abstract base class for any scenario where we want to use a Singleton pattern. This base class abstracts away the complexity of ensuring a truly global singleton instance across multiple code paths in a deployed application. It uses a Global Object Store to ensure that only one instance of the class exists in the application even if the class has code imported into multiple execution paths (which is not optimal, of course, but can occur in some situations).

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    MaxBatchSize: number = DEFAULT_BATCH_SIZE

    Configurable maximum batch size. Connector batches exceeding this are truncated.

    MaxColumnsPerTable: number

    Effective per-table column limit — read from MJ_INTEGRATION_MAX_COLUMNS_PER_TABLE at startup and clamped to [1, MAX_COLUMNS_CEILING] (defaults to the ceiling when unset). Objects whose column count exceeds this are auto-disabled at apply time (reversible) instead of failing CREATE TABLE.

    MAX_COLUMNS_CEILING: 1000

    SQL Server's hard per-table column limit is 1024; the framework reserves headroom for its own sync/system columns (the _mj_integration* set + ID + timestamps), so the effective ceiling is 1000. MJ_INTEGRATION_MAX_COLUMNS_PER_TABLE can only LOWER this, never raise it past 1000.

    Accessors

    • get GlobalKey(): string

      Returns string

    Methods

    • The Global Object Store is a place to store global objects that need to be shared across the application. Depending on the execution environment, this could be the window object in a browser, or the global object in a node environment, or something else in other contexts. The key here is that in some cases static variables are not truly shared because it is possible that a given class might have copies of its code in multiple paths in a deployed application. This approach ensures that no matter how many code copies might exist, there is only one instance of the object in question by using the Global Object Store.

      Returns GlobalObjectStore

    • Resumes any syncs that were orphaned by a process restart. Finds all CompanyIntegrationRun records with Status='In Progress', determines which entity maps already completed (have run details), and resumes from the remaining entity maps using existing watermarks.

      Call this once during MJAPI startup after metadata is loaded.

      Parameters

      Returns Promise<void>

    • Acquires the maintenance lock for a CompanyIntegration. Returns false (does NOT wait) when a data sync is currently running or another maintenance operation already holds the lock — the caller decides whether to wait for GetSyncProgress to clear or surface the conflict.

      Parameters

      • companyIntegrationID: string
      • reason: string

      Returns boolean

    • Cancel a running sync for a connector. Returns true if a sync was found and signalled.

      Parameters

      • companyIntegrationID: string

      Returns boolean

    • Returns the singleton instance of the class. If the instance does not exist, it is created and stored in the Global Object Store. If className is provided it will be used as part of the key in the Global Object Store, otherwise the actual class name will be used. NOTE: the class name used by default is the lowest level of the object hierarchy, so if you have a class that extends another class, the lowest level class name will be used.

      Type Parameters

      Parameters

      • this: new () => T
      • OptionalclassName: string

      Returns T

    • Current maintenance lock for a CompanyIntegration, or undefined when none is held.

      Parameters

      • companyIntegrationID: string

      Returns { AcquiredAt: Date; Reason: string }

    • U3 — pure, MONOTONIC progress fold: applies one per-map progress event to the live snapshot as a high-water mark. Under syncConcurrency > 1 events arrive out of order, so counters only ever ratchet UP — a progress bar must never go backwards. Totals are assigned (they're authoritative per event); completed/processed take max().

      Parameters

      Returns void