From 0ae00a25e1a2faee1b328d485e440d7f0569b5cf Mon Sep 17 00:00:00 2001 From: Aleksejs Kovalovs Date: Fri, 25 Jul 2025 06:08:14 +0300 Subject: [PATCH] issue-1 fix 1000 contacts limit --- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- docs/assets/style.css | 11 +- .../classes/auth_AuthManager.AuthManager.html | 10 +- ...e_ContactNoteWriter.ContactNoteWriter.html | 18 +- .../core_FolderSuggest.FolderSuggest.html | 10 +- docs/classes/core_Formatter.Formatter.html | 22 +- ...ContactsService.GoogleContactsService.html | 6 +- docs/classes/i18n_translator.Translator.html | 8 +- docs/classes/main.default.html | 28 +- ...plugin_settings.ContactSyncSettingTab.html | 8 +- ...vices_MetadataService.MetadataService.html | 8 +- .../services_VaultService.VaultService.html | 12 +- .../functions/auth_getAuthUrl.getAuthUrl.html | 2 +- docs/functions/i18n_translator.t.html | 2 +- ...sInFolder.getAllMarkdownFilesInFolder.html | 2 +- docs/interfaces/types_Contact.Birthday.html | 8 +- .../types_Contact.ContactGroupMembership.html | 6 +- .../types_Contact.GoogleContact.html | 18 +- .../types_Contact.GoogleContactGroup.html | 6 +- docs/interfaces/types_Contact.Membership.html | 8 +- ...s_ContactNoteConfig.ContactNoteConfig.html | 4 +- .../types_Settings.ContactSyncSettings.html | 28 +- docs/modules/config.html | 2 +- docs/variables/config.DEFAULT_SETTINGS.html | 2 +- docs/variables/config.LINK_TO_MANUAL.html | 2 +- docs/variables/config.PERSONAL_FIELDS.html | 1 + docs/variables/config.URI_OATUH_REDIRECT.html | 2 +- docs/variables/config.URL_CONTACT_GROUPS.html | 2 +- docs/variables/config.URL_OAUTH_AUTH.html | 2 +- docs/variables/config.URL_OAUTH_SCOPE.html | 2 +- docs/variables/config.URL_OAUTH_TOKEN.html | 2 +- docs/variables/config.URL_PEOPLE_API.html | 2 +- docs/variables/config.URL_PEOPLE_BASE.html | 2 +- .../config.URL_PEOPLE_CONNECTIONS.html | 2 +- docs/variables/i18n_translations.en.html | 2 +- docs/variables/i18n_translations.lv.html | 2 +- docs/variables/i18n_translations.ru.html | 2 +- .../variables/i18n_translator.translator.html | 2 +- manifest.json | 2 +- package-lock.json | 585 +++++++++--------- package.json | 2 +- .../core/GoogleContactsService.test.ts | 8 +- src/config/index.ts | 3 +- src/core/GoogleContactsService.ts | 32 +- 45 files changed, 441 insertions(+), 451 deletions(-) create mode 100644 docs/variables/config.PERSONAL_FIELDS.html diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 271ebaf..6e0af15 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "eJylmE1vozAQhv8L56hVu7tVlRulNEVNIApk91BVlgsOWHVMZEx2q1X/+woI4cMfONpLDvDOM++M8WDy+tfi6A+35hYseWbNrDjDJGGIWvPX8y275NkKUpgiZs2sA+SZNbf2eVISVFxXcaCnuMr4nlgz6wPTxJrfXkCMCSwKGVFJv7m9/3r7mp2xKeKVdsuIwmcnMLIp4+1KGnOcU5Gogt99/3ob2IxzusOpaLG5buTs0X2yt8sIhG4Uef4i7GBHyDB87+HG0iH/223P2NLzX0AUgJXtb+2lhjkUaojbjQcCO9o+g4376G1cJ9JQRbGWvARO4Ee2E4HFJtiudT0QxRPkwN5Gz6D6maB2QiNi6ARr1whZK42YUfDi+kbMWjnBXLvBeukCe+1NIDuhGfHBDqcq7ynNmE7g+64TeYE/tfpigJBhuEUZUkxDJ6ccxtzPOfrFMJfNxCoaCDqjja2ht/NRQZ/IN56VTzlJEAvLNEUFV5Qw0BjZV1AH1odUTQ7RMttDru74+b6hVYE2stnSFNyxvUWepwSdlqEIETviGCmsSrVGtieyDEqQZzHI3ZTWLw7f3FPFhuAM0oLA+qUollsFgr7EqEpEZftZZCGqGRTkaAYhRw2ElWYQVmoHSqvNJQ/vAJabPb2RhNeu/ZgXKdDVKusdKgrO2ZXK7qB3XHZsEkgTp6U9xFTsWXXVqFEJ2sGSSGZRTTjd1W/sAylTTK8LxDmmqeQZbwSgFVwy6MNPGodNXATfRZdjtDRMb79odnih2L4rxGECOVQOrDYejJRGZSrpbYFKujbbuMaf1SpOV9CXGdmXcwXvA646iThW+edBuTCnpRbLqYPaE4BRGQ+Y8SyBnx0LU47YDsYCrpWOuD/ueq5P2gXLy8MK7d8RKzJ8MIDLA3WpBi8rgwwDvTG4NnQpvQ7SpbioNbp2vIm9r455juI7cgDuhJeeP8d4lfVehqmco1pC5URtEoT/N1ALjfdQPVDH6WrTfdslx6S4rj73CVlB9pHkv+kTJqjwaHOaFeupQ4AmxPj/iMmU3Zt2Oqmxoeat/A/BoEeX" \ No newline at end of file +window.navigationData = "eJylmF9vmzAUxb8Lz1GrdltV5Y1SkqISiAJsD1VlueCAVcdExmSrpn73CQjlj7FxtJc+JOf+zrk2vrh5+Wtw9IcbSwOWPDMWRpxhkjBEjeXL11dmybMNpDBFzFgYR8gzY2kc8qQkqLiu6kBPcZXxAzEWxjumibG8vYAYE1gUU0Qp/eb2/vP1c/GFTRGvtBEjkpydQCvmFG9f0pjjnIpEGfzu++frIGac0z1OxYjN51rJHu2VGbkhCOwwdLx10MFOkGH41sONpUP+t9teMNfxnkHog43pRaarYA6FCuLW3gW+Z7pg5djuoyrmSKlgRjsH+GYYPYGd/ejsbCtUYEWxkuwCy/dC0wrBeudHW1VgUTxD9s0ofALVnxlqJ9QiBpa/tbWQtVKLGfrPtqfFrJUzzK3tb10bmFtnBtkJ9YgPZjDXeU+px7R8z7Ot0PG9ud0XCwSH4bFnSDJhrZxyGHMv5+gXw3xqzlbVQNBpDQsFvZ25EvqM33j+rnKSIBaUaYoKLmlhoNGKL6EOog+pCg8xMjtALl/xr+81owq0UcyWJuGO463zPCXovA1FgNgJx0gSdVKrFXvGZdDCtIuGd9Navzl8c08lB4IzSAsC6xet2G5VCPoSrS4RnTrPIgtRxaAgJz0IOSkgrNSDsFI5UFptPvHwDmC53tMbTvDavR/zQgm62mV1QknDObuSxR2sHZ+6igmkmRvYAWIqrln1qdZCJWgPSzIxi2rC+Vv1wT6SMsX0ukCcY5pOPOONALSCSwZ98EHjoKkL4ZuYcoyeLFPHL5oTXkiO7wZxmEAOpQOrrQcjpVabUnrboJSudBv3+LPaxfkO+jKt+NNcIfuAKzcRxyr/OEo35rzVYjt1UXsD0GrjATOeJfCjY2HKEdvDWMC10hH3x10v9Vm7Znl53KDDG2JFho8a8OlCldXgZaXhMNBrg+tAl9LrIpXFRUujWo5Xce2ra54l+d90AO6El94/x3hZ9J7DnOeol0A6URuD4P8GaqHIHsgH6tiuDt2PXXJMiuvqJwRCNpC9J/lvusIEFQ5tbrNiP3UJUJRo/8Yxa9m9aedNtQM1b+V/GoBh9Q==" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index d93b3e9..8e44da4 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 7c3fbdb..5ba5a2a 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -504,15 +504,8 @@ body { background: var(--color-background); font-family: - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - "Noto Sans", - Helvetica, - Arial, - sans-serif, - "Apple Color Emoji", - "Segoe UI Emoji"; + -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; color: var(--color-text); margin: 0; diff --git a/docs/classes/auth_AuthManager.AuthManager.html b/docs/classes/auth_AuthManager.AuthManager.html index 8543b60..8693c5f 100644 --- a/docs/classes/auth_AuthManager.AuthManager.html +++ b/docs/classes/auth_AuthManager.AuthManager.html @@ -1,17 +1,17 @@ AuthManager | Documentation
Documentation
    Preparing search index...

    Manages OAuth2 authentication for accessing the Google contacts API. Handles exchanging authorization codes, refreshing access tokens, and providing updated credentials.

    -
    Index

    Constructors

    Index

    Constructors

    Methods

    • Ensures the access token is valid and refreshes it if expired.

      +

    Returns AuthManager

    Methods

    • Ensures the access token is valid and refreshes it if expired.

      Returns Promise<string>

      A promise that resolves to a valid access token.

      -
    • Exchanges an authorization code for access and refresh tokens.

      +
    • Exchanges an authorization code for access and refresh tokens.

      Parameters

      • code: string

        The authorization code received from the OAuth flow.

      Returns Promise<void>

      A promise that resolves when tokens have been successfully obtained.

      -
    +
    diff --git a/docs/classes/core_ContactNoteWriter.ContactNoteWriter.html b/docs/classes/core_ContactNoteWriter.ContactNoteWriter.html index 19f0535..2ad3f8a 100644 --- a/docs/classes/core_ContactNoteWriter.ContactNoteWriter.html +++ b/docs/classes/core_ContactNoteWriter.ContactNoteWriter.html @@ -1,6 +1,6 @@ ContactNoteWriter | Documentation
    Documentation
      Preparing search index...

      Responsible for creating and updating contact notes in the vault. Handles writing new notes and updating existing ones based on contact metadata.

      -
      Index

      Constructors

      Index

      Constructors

      Properties

      fileManager formatter metadataCache @@ -12,25 +12,25 @@ Handles writing new notes and updating existing ones based on contact metadata.<

      Parameters

      • vault: Vault

        The Obsidian Vault instance to operate on.

      • metadataCache: MetadataCache

        The Obsidian MetadataCache instance to operate on.

      • fileManager: FileManager

        The Obsidian FileManager instance to operate on.

        -

      Returns ContactNoteWriter

      Properties

      fileManager: FileManager

      The FileManager instance used for file operations.

      +

      Returns ContactNoteWriter

      Properties

      fileManager: FileManager

      The FileManager instance used for file operations.

      This protected property is used to manage file operations in the Obsidian vault.

      -
      formatter: Formatter = ...

      The Formatter instance used for formatting contact data into frontmatter.

      +
      formatter: Formatter = ...

      The Formatter instance used for formatting contact data into frontmatter.

      This protected property is used to format contact data into a suitable format for Obsidian frontmatter.

      -
      metadataCache: MetadataCache

      The MetadataCache instance used for managing file metadata.

      +
      metadataCache: MetadataCache

      The MetadataCache instance used for managing file metadata.

      This protected property is used to manage file metadata in the Obsidian vault.

      -
      vaultService: VaultService

      The VaultService instance used for vault operations.

      +
      vaultService: VaultService

      The VaultService instance used for vault operations.

      This protected property is used to encapsulate file and folder operations to facilitate testing and decouple from direct API usage.

      -

      Methods

      • Checks if a Google contact has the specified sync label.

        +

      Methods

      • Checks if a Google contact has the specified sync label.

        Parameters

        • contact: GoogleContact

          The Google contact to check.

        • syncLabel: string

          The label to check for.

        • labelMap: Record<string, string>

          A mapping of label names to their corresponding group IDs.

        Returns boolean

        True if the contact has the label, false otherwise.

        -
      • Scans the provided files for frontmatter properties matching the specified prefix.

        +
      • Scans the provided files for frontmatter properties matching the specified prefix.

        Parameters

        • files: TFile[]

          The list of TFile objects to scan.

        • propertyPrefix: string

          The prefix to use for identifying frontmatter properties.

        Returns Promise<Record<string, TFile>>

        A mapping of property values to TFile objects.

        -
      • Writes notes for the provided contacts based on the specified configuration.

        Parameters

        • config: ContactNoteConfig

          The configuration for writing contact notes.

        • labelMap: Record<string, string>

          A mapping of label names to their corresponding group IDs.

        • contacts: GoogleContact[]

          The list of Google contacts to write notes for.

          -

        Returns Promise<void>

      +

      Returns Promise<void>

      diff --git a/docs/classes/core_FolderSuggest.FolderSuggest.html b/docs/classes/core_FolderSuggest.FolderSuggest.html index 14556ab..406643c 100644 --- a/docs/classes/core_FolderSuggest.FolderSuggest.html +++ b/docs/classes/core_FolderSuggest.FolderSuggest.html @@ -1,19 +1,19 @@ FolderSuggest | Documentation
      Documentation
        Preparing search index...

        FolderSuggest class for providing folder suggestions in Obsidian. This class extends AbstractInputSuggest to create a custom suggestion provider for folder paths in the Obsidian vault.

        -

        Hierarchy

        • AbstractInputSuggest<TFolder>
          • FolderSuggest
        Index

        Constructors

        Hierarchy

        • AbstractInputSuggest<TFolder>
          • FolderSuggest
        Index

        Constructors

        • Constructs a FolderSuggest instance.

          Parameters

          • app: App

            The Obsidian app instance.

          • inputEl: HTMLInputElement

            The input element to attach the suggestions to.

            -

          Returns FolderSuggest

        Methods

        • Returns the folder suggestions based on the input query.

          +

        Returns FolderSuggest

        Methods

        • Returns the folder suggestions based on the input query.

          Parameters

          • query: string

            The input query to filter folder suggestions.

          Returns TFolder[]

          An array of TFolder objects that match the query.

          -
        • Renders the suggestion element for a folder.

          +
        • Renders the suggestion element for a folder.

          Parameters

          • folder: TFolder

            The TFolder object to render.

          • el: HTMLElement

            The HTML element to render the suggestion into.

            -

          Returns void

        • Handles the selection of a folder suggestion.

          +

        Returns void

        +

        Returns void

        diff --git a/docs/classes/core_Formatter.Formatter.html b/docs/classes/core_Formatter.Formatter.html index 32d793e..b245c2a 100644 --- a/docs/classes/core_Formatter.Formatter.html +++ b/docs/classes/core_Formatter.Formatter.html @@ -1,5 +1,5 @@ Formatter | Documentation
        Documentation
          Preparing search index...

          Formatter class for transforming Google contact data into a format suitable for Obsidian frontmatter.

          -
          Index

          Constructors

          Index

          Constructors

          Methods

          addAddressFields addBioField addBirthdayFields @@ -15,47 +15,47 @@ Handles multiple addresses and appends a suffix to each additional field.

          Parameters

          • frontmatterLines: Record<string, string>

            The object representing the frontmatter fields to update.

          • contact: GoogleContact

            The Google contact containing address information.

          • propertyPrefix: string

            The prefix to prepend to the field name.

            -

          Returns void

          • Adds the biography field(s) from the contact to the frontmatter lines.

            +

          Returns void

          • Adds the biography field(s) from the contact to the frontmatter lines.

            Parameters

            • frontmatterLines: Record<string, string>

              The object representing the frontmatter fields to update.

            • contact: GoogleContact

              The Google contact containing biography information.

            • propertyPrefix: string

              The prefix to prepend to the field name.

              -

            Returns void

          • Adds birthday field(s) from the contact to the frontmatter lines. +

          Returns void

          Returns void

          Returns void

          Returns void

          Returns void

          Returns void

          Returns void

          Returns void

          +

          Returns void

          diff --git a/docs/classes/core_GoogleContactsService.GoogleContactsService.html b/docs/classes/core_GoogleContactsService.GoogleContactsService.html index 6151dcd..042e1df 100644 --- a/docs/classes/core_GoogleContactsService.GoogleContactsService.html +++ b/docs/classes/core_GoogleContactsService.GoogleContactsService.html @@ -2,13 +2,13 @@

          Encapsulates logic for fetching, processing, and transforming Google contact data. Designed to be used by higher-level plugin components to separate external API concerns from application and Obsidian-specific logic.

          -
          Index

          Constructors

          Index

          Constructors

          Methods

          • Fetches contact groups and returns a mapping of lowercase group name → group ID.

            +
          • Fetches contact groups and returns a mapping of lowercase group name → group ID.

            Parameters

            • token: string

              OAuth access token.

            Returns Promise<Record<string, string>>

            Record mapping lowercase group names to their resource IDs.

            -
          +
          diff --git a/docs/classes/i18n_translator.Translator.html b/docs/classes/i18n_translator.Translator.html index ebeb299..ba22a2a 100644 --- a/docs/classes/i18n_translator.Translator.html +++ b/docs/classes/i18n_translator.Translator.html @@ -1,11 +1,11 @@ Translator | Documentation
          Documentation
            Preparing search index...

            Translator handles language selection and translation fallback.

            -
            Index

            Constructors

            Index

            Constructors

            Methods

            Constructors

            Methods

            • Sets the active language (e.g. 'ru' or 'en').

              -

              Parameters

              • language: string

              Returns void

            • Translates a key using the selected language. +

            Constructors

            Methods

            • Sets the active language (e.g. 'ru' or 'en').

              +

              Parameters

              • language: string

              Returns void

            • Translates a key using the selected language. Falls back to English if key is missing. Returns the key itself if translation is not found at all.

              Parameters

              • key: string

                The translation key.

              Returns string

              The translated string.

              -
            +
            diff --git a/docs/classes/main.default.html b/docs/classes/main.default.html index 08748b2..8d6a67d 100644 --- a/docs/classes/main.default.html +++ b/docs/classes/main.default.html @@ -1,5 +1,5 @@ default | Documentation
            Documentation
              Preparing search index...

              Class default

              Obsidian plugin for synchronizing contacts from Google contacts into markdown notes.

              -

              Hierarchy

              • Plugin
                • default
              Index

              Constructors

              Hierarchy

              • Plugin
                • default
              Index

              Constructors

              • Parameters

                • app: App
                • manifest: PluginManifest

                Returns default

              Properties

              auth: null | AuthManager = null

              Manages OAuth token exchange and refresh

              -
              googleService: null | GoogleContactsService = null

              Service layer handling communication with the Google contacts API. +

              googleService: null | GoogleContactsService = null

              Service layer handling communication with the Google contacts API. Used to fetch contacts and groups, separate from Obsidian-specific logic.

              -
              noteWriter: null | ContactNoteWriter = null

              Handles writing contact notes to the vault

              -
              settings: ContactSyncSettings = DEFAULT_SETTINGS

              Plugin settings loaded from user config

              -

              Methods

              • Loads plugin settings from disk, applying defaults as needed.

                -

                Returns Promise<void>

              • Called when the plugin is loaded by Obsidian.

                -

                Returns Promise<void>

              • Override this to unload your component

                -

                Returns Promise<void>

              • Saves current plugin settings to disk.

                -

                Returns Promise<void>

              • Sets up automatic periodic syncing using setInterval based on plugin settings.

                -

                Returns void

              • Determines whether syncing should be triggered based on the last sync time and interval.

                +
              noteWriter: null | ContactNoteWriter = null

              Handles writing contact notes to the vault

              +
              settings: ContactSyncSettings = DEFAULT_SETTINGS

              Plugin settings loaded from user config

              +

              Methods

              • Loads plugin settings from disk, applying defaults as needed.

                +

                Returns Promise<void>

              • Called when the plugin is loaded by Obsidian.

                +

                Returns Promise<void>

              • Override this to unload your component

                +

                Returns Promise<void>

              • Saves current plugin settings to disk.

                +

                Returns Promise<void>

              • Sets up automatic periodic syncing using setInterval based on plugin settings.

                +

                Returns void

              • Determines whether syncing should be triggered based on the last sync time and interval.

                Returns boolean

                True if sync should be triggered now, false otherwise.

                -
              • Performs the contact synchronization process: fetching, processing, and saving contact notes.

                -

                Returns Promise<void>

              • Updates the plugin settings with the latest authentication tokens from the AuthManager +

              • Performs the contact synchronization process: fetching, processing, and saving contact notes.

                +

                Returns Promise<void>

              • Updates the plugin settings with the latest authentication tokens from the AuthManager and persists them to the plugin storage.

                -

                Returns Promise<void>

              • Updates the last synchronization timestamp and saves the updated plugin settings. +

                Returns Promise<void>

              • Updates the last synchronization timestamp and saves the updated plugin settings. This should be called after a successful sync to persist the last sync time.

                -

                Returns Promise<void>

              +

              Returns Promise<void>

              diff --git a/docs/classes/plugin_settings.ContactSyncSettingTab.html b/docs/classes/plugin_settings.ContactSyncSettingTab.html index acf387f..be5c112 100644 --- a/docs/classes/plugin_settings.ContactSyncSettingTab.html +++ b/docs/classes/plugin_settings.ContactSyncSettingTab.html @@ -1,11 +1,11 @@ ContactSyncSettingTab | Documentation
              Documentation
                Preparing search index...

                Class ContactSyncSettingTab

                Settings tab for the Google contacts sync plugin. Allows the user to configure plugin options through the Obsidian settings UI.

                -

                Hierarchy

                • PluginSettingTab
                  • ContactSyncSettingTab
                Index

                Constructors

                Hierarchy

                • PluginSettingTab
                  • ContactSyncSettingTab
                Index

                Constructors

                Properties

                Methods

                Constructors

                Properties

                plugin: default

                Reference to the main plugin instance

                -

                Methods

                • Renders the plugin's settings UI in Obsidian's settings panel.

                  -

                  Returns void

                +

                Returns ContactSyncSettingTab

                Properties

                plugin: default

                Reference to the main plugin instance

                +

                Methods

                • Renders the plugin's settings UI in Obsidian's settings panel.

                  +

                  Returns void

                diff --git a/docs/classes/services_MetadataService.MetadataService.html b/docs/classes/services_MetadataService.MetadataService.html index dfc7c9c..7fc40da 100644 --- a/docs/classes/services_MetadataService.MetadataService.html +++ b/docs/classes/services_MetadataService.MetadataService.html @@ -1,14 +1,14 @@ MetadataService | Documentation
                Documentation
                  Preparing search index...

                  Service class for managing metadata in Obsidian files. Encapsulates metadata operations to facilitate testing and decouple from direct API usage.

                  -
                  Index

                  Constructors

                  Index

                  Constructors

                  • Creates an instance of MetadataService.

                    Parameters

                    • metadataCache: MetadataCache

                      The Obsidian MetadataCache instance to operate on.

                      -

                    Returns MetadataService

                  Methods

                  • Retrieves the YAML frontmatter from a file.

                    +

                  Returns MetadataService

                  Methods

                  • Retrieves the YAML frontmatter from a file.

                    Parameters

                    • file: TFile

                      The TFile to retrieve YAML frontmatter from.

                    Returns null | CachedMetadata

                    The YAML frontmatter as a string, or null if not found.

                    -
                  • Retrieves the frontmatter metadata from a file.

                    Parameters

                    • file: TFile

                      The TFile to retrieve frontmatter from.

                    Returns undefined | Record<string, string | string[]>

                    The frontmatter as a record of key-value pairs, or undefined if not found.

                    -
                  +
                  diff --git a/docs/classes/services_VaultService.VaultService.html b/docs/classes/services_VaultService.VaultService.html index 60ef148..0687a7d 100644 --- a/docs/classes/services_VaultService.VaultService.html +++ b/docs/classes/services_VaultService.VaultService.html @@ -1,22 +1,22 @@ VaultService | Documentation
                  Documentation
                    Preparing search index...

                    Service class for interacting with the Obsidian Vault. Encapsulates file and folder operations to facilitate testing and decouple from direct API usage.

                    -
                    Index

                    Constructors

                    Index

                    Constructors

                    Methods

                    • Creates a new file with the given content.

                      +

                    Returns VaultService

                    Methods

                    • Creates a new file with the given content.

                      Parameters

                      • filePath: string

                        The path for the new file.

                      • content: string

                        The initial content of the file.

                      Returns Promise<TFile>

                      The created TFile.

                      -
                    • Ensures that a folder exists at the given path, creating it if necessary.

                      +
                    • Ensures that a folder exists at the given path, creating it if necessary.

                      Parameters

                      • folderPath: string

                        The path of the folder to create.

                        -

                      Returns Promise<void>

                    • Retrieves a file from the vault by its path.

                      +

                    Returns Promise<void>

                    +
                    diff --git a/docs/functions/auth_getAuthUrl.getAuthUrl.html b/docs/functions/auth_getAuthUrl.getAuthUrl.html index 20f760e..f4f12d0 100644 --- a/docs/functions/auth_getAuthUrl.getAuthUrl.html +++ b/docs/functions/auth_getAuthUrl.getAuthUrl.html @@ -1,4 +1,4 @@ getAuthUrl | Documentation
                    Documentation
                      Preparing search index...

                      Function getAuthUrl

                      • Generates the Google OAuth2 authorization URL for user authentication.

                        Parameters

                        • clientId: string

                          The OAuth2 client ID provided by Google.

                        Returns string

                        A complete URL string that initiates the OAuth2 authorization flow.

                        -
                      +
                      diff --git a/docs/functions/i18n_translator.t.html b/docs/functions/i18n_translator.t.html index 992b3ed..8e5214c 100644 --- a/docs/functions/i18n_translator.t.html +++ b/docs/functions/i18n_translator.t.html @@ -1,4 +1,4 @@ t | Documentation
                      Documentation
                        Preparing search index...
                        • Global translation function.

                          Parameters

                          • key: string

                            The translation key.

                          Returns string

                          The translated string.

                          -
                        +
                        diff --git a/docs/functions/utils_getAllMarkdownFilesInFolder.getAllMarkdownFilesInFolder.html b/docs/functions/utils_getAllMarkdownFilesInFolder.getAllMarkdownFilesInFolder.html index 6a01236..0f3e570 100644 --- a/docs/functions/utils_getAllMarkdownFilesInFolder.getAllMarkdownFilesInFolder.html +++ b/docs/functions/utils_getAllMarkdownFilesInFolder.getAllMarkdownFilesInFolder.html @@ -1,4 +1,4 @@ getAllMarkdownFilesInFolder | Documentation
                        Documentation
                          Preparing search index...
                          • Recursively retrieves all markdown files in the specified folder.

                            Parameters

                            • folder: TFolder

                              The root folder to search within.

                            Returns TFile[]

                            An array of markdown files.

                            -
                          +
                          diff --git a/docs/interfaces/types_Contact.Birthday.html b/docs/interfaces/types_Contact.Birthday.html index 05afae7..ab0bda0 100644 --- a/docs/interfaces/types_Contact.Birthday.html +++ b/docs/interfaces/types_Contact.Birthday.html @@ -1,8 +1,8 @@ Birthday | Documentation
                          Documentation
                            Preparing search index...

                            Interface Birthday

                            Represents a contact's birthday, including optional structured date and metadata.

                            -
                            interface Birthday {
                                date?: { day?: number; year?: number; month?: number };
                                metadata?: Record<string, unknown>;
                                text?: string;
                            }
                            Index

                            Properties

                            interface Birthday {
                                date?: { day?: number; year?: number; month?: number };
                                metadata?: Record<string, unknown>;
                                text?: string;
                            }
                            Index

                            Properties

                            Properties

                            date?: { day?: number; year?: number; month?: number }

                            Structured date object (year, month, day)

                            -
                            metadata?: Record<string, unknown>

                            Additional metadata about the birthday

                            -
                            text?: string

                            Free-form birthday string if structured date is unavailable

                            -
                            +
                            metadata?: Record<string, unknown>

                            Additional metadata about the birthday

                            +
                            text?: string

                            Free-form birthday string if structured date is unavailable

                            +
                            diff --git a/docs/interfaces/types_Contact.ContactGroupMembership.html b/docs/interfaces/types_Contact.ContactGroupMembership.html index 0ce6ec7..15d9428 100644 --- a/docs/interfaces/types_Contact.ContactGroupMembership.html +++ b/docs/interfaces/types_Contact.ContactGroupMembership.html @@ -1,6 +1,6 @@ ContactGroupMembership | Documentation
                            Documentation
                              Preparing search index...

                              Interface ContactGroupMembership

                              Represents a membership in a Google contact Group.

                              -
                              interface ContactGroupMembership {
                                  contactGroupId: string;
                                  contactGroupResourceName?: string;
                              }
                              Index

                              Properties

                              interface ContactGroupMembership {
                                  contactGroupId: string;
                                  contactGroupResourceName?: string;
                              }
                              Index

                              Properties

                              contactGroupId: string

                              Identifier of the contact group (e.g., "abc123")

                              -
                              contactGroupResourceName?: string

                              Optional full resource name of the contact group (e.g., "contactGroups/family")

                              -
                              +
                              contactGroupResourceName?: string

                              Optional full resource name of the contact group (e.g., "contactGroups/family")

                              +
                              diff --git a/docs/interfaces/types_Contact.GoogleContact.html b/docs/interfaces/types_Contact.GoogleContact.html index 4ea94bd..c63226a 100644 --- a/docs/interfaces/types_Contact.GoogleContact.html +++ b/docs/interfaces/types_Contact.GoogleContact.html @@ -1,5 +1,5 @@ GoogleContact | Documentation
                              Documentation
                                Preparing search index...

                                Interface GoogleContact

                                Represents a single contact retrieved from Google contacts API.

                                -
                                interface GoogleContact {
                                    addresses?: {
                                        city: string;
                                        country: string;
                                        countryCode: string;
                                        extendedAddress: string;
                                        formattedType: string;
                                        formattedValue: string;
                                        postalCode: string;
                                        streetAddress: string;
                                        type: string;
                                    }[];
                                    biographies?: { value: string }[];
                                    birthdays?: Birthday[];
                                    emailAddresses?: { value: string }[];
                                    memberships?: Membership[];
                                    names?: { displayName: string }[];
                                    organizations?: { name: string; title: string }[];
                                    phoneNumbers?: { value: string }[];
                                    resourceName: string;
                                }
                                Index

                                Properties

                                interface GoogleContact {
                                    addresses?: {
                                        city: string;
                                        country: string;
                                        countryCode: string;
                                        extendedAddress: string;
                                        formattedType: string;
                                        formattedValue: string;
                                        postalCode: string;
                                        streetAddress: string;
                                        type: string;
                                    }[];
                                    biographies?: { value: string }[];
                                    birthdays?: Birthday[];
                                    emailAddresses?: { value: string }[];
                                    memberships?: Membership[];
                                    names?: { displayName: string }[];
                                    organizations?: { name: string; title: string }[];
                                    phoneNumbers?: { value: string }[];
                                    resourceName: string;
                                }
                                Index

                                Properties

                                addresses?: {
                                    city: string;
                                    country: string;
                                    countryCode: string;
                                    extendedAddress: string;
                                    formattedType: string;
                                    formattedValue: string;
                                    postalCode: string;
                                    streetAddress: string;
                                    type: string;
                                }[]

                                Array of address objects associated with the contact

                                -
                                biographies?: { value: string }[]

                                Array of biographies objects associated with the contact

                                -
                                birthdays?: Birthday[]

                                Array of birthday objects associated with the contact

                                -
                                emailAddresses?: { value: string }[]

                                Array of email address objects

                                -
                                memberships?: Membership[]

                                Array of group/domain memberships associated with the contact

                                -
                                names?: { displayName: string }[]

                                Array of name objects (usually contains a displayName)

                                -
                                organizations?: { name: string; title: string }[]
                                phoneNumbers?: { value: string }[]

                                Array of phone number objects

                                -
                                resourceName: string

                                Unique resource identifier for the contact (e.g., "people/c123...")

                                -
                                +
                                biographies?: { value: string }[]

                                Array of biographies objects associated with the contact

                                +
                                birthdays?: Birthday[]

                                Array of birthday objects associated with the contact

                                +
                                emailAddresses?: { value: string }[]

                                Array of email address objects

                                +
                                memberships?: Membership[]

                                Array of group/domain memberships associated with the contact

                                +
                                names?: { displayName: string }[]

                                Array of name objects (usually contains a displayName)

                                +
                                organizations?: { name: string; title: string }[]
                                phoneNumbers?: { value: string }[]

                                Array of phone number objects

                                +
                                resourceName: string

                                Unique resource identifier for the contact (e.g., "people/c123...")

                                +
                                diff --git a/docs/interfaces/types_Contact.GoogleContactGroup.html b/docs/interfaces/types_Contact.GoogleContactGroup.html index 7a0b541..03c4386 100644 --- a/docs/interfaces/types_Contact.GoogleContactGroup.html +++ b/docs/interfaces/types_Contact.GoogleContactGroup.html @@ -1,6 +1,6 @@ GoogleContactGroup | Documentation
                                Documentation
                                  Preparing search index...

                                  Interface GoogleContactGroup

                                  Represents a contact group fetched from Google contacts API.

                                  -
                                  interface GoogleContactGroup {
                                      name: string;
                                      resourceName: string;
                                  }
                                  Index

                                  Properties

                                  interface GoogleContactGroup {
                                      name: string;
                                      resourceName: string;
                                  }
                                  Index

                                  Properties

                                  Properties

                                  name: string

                                  Human-readable name of the group (e.g., "Friends")

                                  -
                                  resourceName: string

                                  Full resource name of the group (e.g., "contactGroups/friends")

                                  -
                                  +
                                  resourceName: string

                                  Full resource name of the group (e.g., "contactGroups/friends")

                                  +
                                  diff --git a/docs/interfaces/types_Contact.Membership.html b/docs/interfaces/types_Contact.Membership.html index ca42bbd..c91ada9 100644 --- a/docs/interfaces/types_Contact.Membership.html +++ b/docs/interfaces/types_Contact.Membership.html @@ -1,8 +1,8 @@ Membership | Documentation
                                  Documentation
                                    Preparing search index...

                                    Interface Membership

                                    Represents a contact's membership in various domains or groups.

                                    -
                                    interface Membership {
                                        contactGroupMembership?: ContactGroupMembership;
                                        domainMembership?: Record<string, unknown>;
                                        metadata?: Record<string, unknown>;
                                    }
                                    Index

                                    Properties

                                    interface Membership {
                                        contactGroupMembership?: ContactGroupMembership;
                                        domainMembership?: Record<string, unknown>;
                                        metadata?: Record<string, unknown>;
                                    }
                                    Index

                                    Properties

                                    contactGroupMembership?: ContactGroupMembership

                                    Membership in a specific contact group

                                    -
                                    domainMembership?: Record<string, unknown>

                                    Optional domain membership data

                                    -
                                    metadata?: Record<string, unknown>

                                    Optional metadata associated with the membership

                                    -
                                    +
                                    domainMembership?: Record<string, unknown>

                                    Optional domain membership data

                                    +
                                    metadata?: Record<string, unknown>

                                    Optional metadata associated with the membership

                                    +
                                    diff --git a/docs/interfaces/types_ContactNoteConfig.ContactNoteConfig.html b/docs/interfaces/types_ContactNoteConfig.ContactNoteConfig.html index 3b8e638..c5b194d 100644 --- a/docs/interfaces/types_ContactNoteConfig.ContactNoteConfig.html +++ b/docs/interfaces/types_ContactNoteConfig.ContactNoteConfig.html @@ -1,6 +1,6 @@ -ContactNoteConfig | Documentation
                                    Documentation
                                      Preparing search index...

                                      Interface ContactNoteConfig

                                      interface ContactNoteConfig {
                                          folderPath: string;
                                          noteBody: string;
                                          prefix: string;
                                          propertyPrefix: string;
                                          syncLabel: string;
                                      }
                                      Index

                                      Properties

                                      folderPath +ContactNoteConfig | Documentation
                                      Documentation
                                        Preparing search index...

                                        Interface ContactNoteConfig

                                        interface ContactNoteConfig {
                                            folderPath: string;
                                            noteBody: string;
                                            prefix: string;
                                            propertyPrefix: string;
                                            syncLabel: string;
                                        }
                                        Index

                                        Properties

                                        folderPath: string
                                        noteBody: string
                                        prefix: string
                                        propertyPrefix: string
                                        syncLabel: string
                                        +

                                        Properties

                                        folderPath: string
                                        noteBody: string
                                        prefix: string
                                        propertyPrefix: string
                                        syncLabel: string
                                        diff --git a/docs/interfaces/types_Settings.ContactSyncSettings.html b/docs/interfaces/types_Settings.ContactSyncSettings.html index def6dc9..cd168c9 100644 --- a/docs/interfaces/types_Settings.ContactSyncSettings.html +++ b/docs/interfaces/types_Settings.ContactSyncSettings.html @@ -1,5 +1,5 @@ ContactSyncSettings | Documentation
                                        Documentation
                                          Preparing search index...

                                          Interface ContactSyncSettings

                                          Configuration options for Google contacts synchronization.

                                          -
                                          interface ContactSyncSettings {
                                              accessToken: string;
                                              clientId: string;
                                              clientSecret: string;
                                              contactsFolder: string;
                                              fileNamePrefix: string;
                                              lastSyncTime?: string;
                                              noteTemplate: string;
                                              propertyNamePrefix: string;
                                              refreshToken: string;
                                              syncIntervalMinutes: number;
                                              syncLabel: string;
                                              syncOnStartup: boolean;
                                              tokenExpiresAt: number;
                                          }
                                          Index

                                          Properties

                                          interface ContactSyncSettings {
                                              accessToken: string;
                                              clientId: string;
                                              clientSecret: string;
                                              contactsFolder: string;
                                              fileNamePrefix: string;
                                              lastSyncTime?: string;
                                              noteTemplate: string;
                                              propertyNamePrefix: string;
                                              refreshToken: string;
                                              syncIntervalMinutes: number;
                                              syncLabel: string;
                                              syncOnStartup: boolean;
                                              tokenExpiresAt: number;
                                          }
                                          Index

                                          Properties

                                          accessToken: string

                                          OAuth access token used to authorize API requests

                                          -
                                          clientId: string

                                          OAuth client ID from Google Developer Console

                                          -
                                          clientSecret: string

                                          OAuth client secret from Google Developer Console

                                          -
                                          contactsFolder: string

                                          Path to the folder where contact notes will be stored

                                          -
                                          fileNamePrefix: string

                                          Prefix used in contact note filenames

                                          -
                                          lastSyncTime?: string

                                          ISO timestamp string of the last sync (optional)

                                          -
                                          noteTemplate: string

                                          Template content for each contact note

                                          -
                                          propertyNamePrefix: string

                                          Prefix used for frontmatter keys in contact notes

                                          -
                                          refreshToken: string

                                          OAuth refresh token to obtain a new access token

                                          -
                                          syncIntervalMinutes: number

                                          Interval (in minutes) for auto-sync

                                          -
                                          syncLabel: string

                                          Name of the contact group to sync from Google contacts

                                          -
                                          syncOnStartup: boolean

                                          Whether to trigger sync automatically when Obsidian starts

                                          -
                                          tokenExpiresAt: number

                                          Timestamp (in ms) when the access token will expire

                                          -
                                          +
                                          clientId: string

                                          OAuth client ID from Google Developer Console

                                          +
                                          clientSecret: string

                                          OAuth client secret from Google Developer Console

                                          +
                                          contactsFolder: string

                                          Path to the folder where contact notes will be stored

                                          +
                                          fileNamePrefix: string

                                          Prefix used in contact note filenames

                                          +
                                          lastSyncTime?: string

                                          ISO timestamp string of the last sync (optional)

                                          +
                                          noteTemplate: string

                                          Template content for each contact note

                                          +
                                          propertyNamePrefix: string

                                          Prefix used for frontmatter keys in contact notes

                                          +
                                          refreshToken: string

                                          OAuth refresh token to obtain a new access token

                                          +
                                          syncIntervalMinutes: number

                                          Interval (in minutes) for auto-sync

                                          +
                                          syncLabel: string

                                          Name of the contact group to sync from Google contacts

                                          +
                                          syncOnStartup: boolean

                                          Whether to trigger sync automatically when Obsidian starts

                                          +
                                          tokenExpiresAt: number

                                          Timestamp (in ms) when the access token will expire

                                          +
                                          diff --git a/docs/modules/config.html b/docs/modules/config.html index 47422c1..7c4519a 100644 --- a/docs/modules/config.html +++ b/docs/modules/config.html @@ -1 +1 @@ -config | Documentation
                                          Documentation
                                            Preparing search index...
                                            +config | Documentation
                                            Documentation
                                              Preparing search index...
                                              diff --git a/docs/variables/config.DEFAULT_SETTINGS.html b/docs/variables/config.DEFAULT_SETTINGS.html index 4327b07..eacf92c 100644 --- a/docs/variables/config.DEFAULT_SETTINGS.html +++ b/docs/variables/config.DEFAULT_SETTINGS.html @@ -1,2 +1,2 @@ DEFAULT_SETTINGS | Documentation
                                              Documentation
                                                Preparing search index...

                                                Variable DEFAULT_SETTINGSConst

                                                DEFAULT_SETTINGS: {
                                                    accessToken: string;
                                                    clientId: string;
                                                    clientSecret: string;
                                                    contactsFolder: string;
                                                    fileNamePrefix: string;
                                                    noteTemplate: string;
                                                    propertyNamePrefix: string;
                                                    refreshToken: string;
                                                    syncIntervalMinutes: number;
                                                    syncLabel: string;
                                                    syncOnStartup: boolean;
                                                    tokenExpiresAt: number;
                                                } = ...

                                                Plugin default settings

                                                -

                                                Type declaration

                                                • accessToken: string
                                                • clientId: string
                                                • clientSecret: string
                                                • contactsFolder: string
                                                • fileNamePrefix: string
                                                • noteTemplate: string
                                                • propertyNamePrefix: string
                                                • refreshToken: string
                                                • syncIntervalMinutes: number
                                                • syncLabel: string
                                                • syncOnStartup: boolean
                                                • tokenExpiresAt: number
                                                +

                                                Type declaration

                                                diff --git a/docs/variables/config.LINK_TO_MANUAL.html b/docs/variables/config.LINK_TO_MANUAL.html index abcaac4..8ee4faa 100644 --- a/docs/variables/config.LINK_TO_MANUAL.html +++ b/docs/variables/config.LINK_TO_MANUAL.html @@ -1,2 +1,2 @@ LINK_TO_MANUAL | Documentation
                                                Documentation
                                                  Preparing search index...

                                                  Variable LINK_TO_MANUALConst

                                                  LINK_TO_MANUAL: "https://github.com/YukiGasai/obsidian-google-calendar/blob/1.10.16/documentation/content/Install.pdf" = 'https://github.com/YukiGasai/obsidian-google-calendar/blob/1.10.16/documentation/content/Install.pdf'

                                                  External links

                                                  -
                                                  +
                                                  diff --git a/docs/variables/config.PERSONAL_FIELDS.html b/docs/variables/config.PERSONAL_FIELDS.html new file mode 100644 index 0000000..e26f88c --- /dev/null +++ b/docs/variables/config.PERSONAL_FIELDS.html @@ -0,0 +1 @@ +PERSONAL_FIELDS | Documentation
                                                  Documentation
                                                    Preparing search index...

                                                    Variable PERSONAL_FIELDSConst

                                                    PERSONAL_FIELDS: "names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations" = ...
                                                    diff --git a/docs/variables/config.URI_OATUH_REDIRECT.html b/docs/variables/config.URI_OATUH_REDIRECT.html index e46fecf..da75c5c 100644 --- a/docs/variables/config.URI_OATUH_REDIRECT.html +++ b/docs/variables/config.URI_OATUH_REDIRECT.html @@ -1,2 +1,2 @@ URI_OATUH_REDIRECT | Documentation
                                                    Documentation
                                                      Preparing search index...

                                                      Variable URI_OATUH_REDIRECTConst

                                                      URI_OATUH_REDIRECT: "urn:ietf:wg:oauth:2.0:oob" = 'urn:ietf:wg:oauth:2.0:oob'

                                                      OAuth2 defaults

                                                      -
                                                      +
                                                      diff --git a/docs/variables/config.URL_CONTACT_GROUPS.html b/docs/variables/config.URL_CONTACT_GROUPS.html index ecaf61a..341d396 100644 --- a/docs/variables/config.URL_CONTACT_GROUPS.html +++ b/docs/variables/config.URL_CONTACT_GROUPS.html @@ -1 +1 @@ -URL_CONTACT_GROUPS | Documentation
                                                      Documentation
                                                        Preparing search index...

                                                        Variable URL_CONTACT_GROUPSConst

                                                        URL_CONTACT_GROUPS: "https://people.googleapis.com/v1/contactGroups" = ...
                                                        +URL_CONTACT_GROUPS | Documentation
                                                        Documentation
                                                          Preparing search index...

                                                          Variable URL_CONTACT_GROUPSConst

                                                          URL_CONTACT_GROUPS: "https://people.googleapis.com/v1/contactGroups" = ...
                                                          diff --git a/docs/variables/config.URL_OAUTH_AUTH.html b/docs/variables/config.URL_OAUTH_AUTH.html index ee4c8b1..70b6416 100644 --- a/docs/variables/config.URL_OAUTH_AUTH.html +++ b/docs/variables/config.URL_OAUTH_AUTH.html @@ -1,2 +1,2 @@ URL_OAUTH_AUTH | Documentation
                                                          Documentation
                                                            Preparing search index...

                                                            Variable URL_OAUTH_AUTHConst

                                                            URL_OAUTH_AUTH: "https://accounts.google.com/o/oauth2/v2/auth" = 'https://accounts.google.com/o/oauth2/v2/auth'

                                                            OAuth2 endpoints

                                                            -
                                                            +
                                                            diff --git a/docs/variables/config.URL_OAUTH_SCOPE.html b/docs/variables/config.URL_OAUTH_SCOPE.html index cea5ec8..c84e30a 100644 --- a/docs/variables/config.URL_OAUTH_SCOPE.html +++ b/docs/variables/config.URL_OAUTH_SCOPE.html @@ -1 +1 @@ -URL_OAUTH_SCOPE | Documentation
                                                            Documentation
                                                              Preparing search index...

                                                              Variable URL_OAUTH_SCOPEConst

                                                              URL_OAUTH_SCOPE: "https://www.googleapis.com/auth/contacts.readonly" = 'https://www.googleapis.com/auth/contacts.readonly'
                                                              +URL_OAUTH_SCOPE | Documentation
                                                              Documentation
                                                                Preparing search index...

                                                                Variable URL_OAUTH_SCOPEConst

                                                                URL_OAUTH_SCOPE: "https://www.googleapis.com/auth/contacts.readonly" = 'https://www.googleapis.com/auth/contacts.readonly'
                                                                diff --git a/docs/variables/config.URL_OAUTH_TOKEN.html b/docs/variables/config.URL_OAUTH_TOKEN.html index 7f40e91..13e0b10 100644 --- a/docs/variables/config.URL_OAUTH_TOKEN.html +++ b/docs/variables/config.URL_OAUTH_TOKEN.html @@ -1 +1 @@ -URL_OAUTH_TOKEN | Documentation
                                                                Documentation
                                                                  Preparing search index...

                                                                  Variable URL_OAUTH_TOKENConst

                                                                  URL_OAUTH_TOKEN: "https://oauth2.googleapis.com/token" = 'https://oauth2.googleapis.com/token'
                                                                  +URL_OAUTH_TOKEN | Documentation
                                                                  Documentation
                                                                    Preparing search index...

                                                                    Variable URL_OAUTH_TOKENConst

                                                                    URL_OAUTH_TOKEN: "https://oauth2.googleapis.com/token" = 'https://oauth2.googleapis.com/token'
                                                                    diff --git a/docs/variables/config.URL_PEOPLE_API.html b/docs/variables/config.URL_PEOPLE_API.html index c2b450d..d67d66b 100644 --- a/docs/variables/config.URL_PEOPLE_API.html +++ b/docs/variables/config.URL_PEOPLE_API.html @@ -1 +1 @@ -URL_PEOPLE_API | Documentation
                                                                    Documentation
                                                                      Preparing search index...

                                                                      Variable URL_PEOPLE_APIConst

                                                                      URL_PEOPLE_API: "https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations&pageSize=2000" = ...
                                                                      +URL_PEOPLE_API | Documentation
                                                                      Documentation
                                                                        Preparing search index...

                                                                        Variable URL_PEOPLE_APIConst

                                                                        URL_PEOPLE_API: "https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations&pageSize=1000" = ...
                                                                        diff --git a/docs/variables/config.URL_PEOPLE_BASE.html b/docs/variables/config.URL_PEOPLE_BASE.html index 65f74dc..f35e4b6 100644 --- a/docs/variables/config.URL_PEOPLE_BASE.html +++ b/docs/variables/config.URL_PEOPLE_BASE.html @@ -1,2 +1,2 @@ URL_PEOPLE_BASE | Documentation
                                                                        Documentation
                                                                          Preparing search index...

                                                                          Variable URL_PEOPLE_BASEConst

                                                                          URL_PEOPLE_BASE: "https://people.googleapis.com/v1" = 'https://people.googleapis.com/v1'

                                                                          Google People API endpoints

                                                                          -
                                                                          +
                                                                          diff --git a/docs/variables/config.URL_PEOPLE_CONNECTIONS.html b/docs/variables/config.URL_PEOPLE_CONNECTIONS.html index 792ffa4..ce77b9c 100644 --- a/docs/variables/config.URL_PEOPLE_CONNECTIONS.html +++ b/docs/variables/config.URL_PEOPLE_CONNECTIONS.html @@ -1 +1 @@ -URL_PEOPLE_CONNECTIONS | Documentation
                                                                          Documentation
                                                                            Preparing search index...

                                                                            Variable URL_PEOPLE_CONNECTIONSConst

                                                                            URL_PEOPLE_CONNECTIONS: "https://people.googleapis.com/v1/people/me/connections" = ...
                                                                            +URL_PEOPLE_CONNECTIONS | Documentation
                                                                            Documentation
                                                                              Preparing search index...

                                                                              Variable URL_PEOPLE_CONNECTIONSConst

                                                                              URL_PEOPLE_CONNECTIONS: "https://people.googleapis.com/v1/people/me/connections" = ...
                                                                              diff --git a/docs/variables/i18n_translations.en.html b/docs/variables/i18n_translations.en.html index 6a4a3f1..625b032 100644 --- a/docs/variables/i18n_translations.en.html +++ b/docs/variables/i18n_translations.en.html @@ -1,4 +1,4 @@ en | Documentation
                                                                              Documentation
                                                                                Preparing search index...

                                                                                Variable enConst

                                                                                en: {
                                                                                    "Authorization code": string;
                                                                                    "Auto sync period": string;
                                                                                    "Automatically sync contacts when the plugin is loaded.": string;
                                                                                    "Client ID and secret required.": string;
                                                                                    "Contacts folder": string;
                                                                                    "e.g. # Notes\n\nWrite something here...": string;
                                                                                    "e.g. 1440": string;
                                                                                    "e.g. Contacts": string;
                                                                                    "e.g. obsidian": string;
                                                                                    "e.g. p ": string;
                                                                                    "e.g. s_": string;
                                                                                    "Enter your client ID": string;
                                                                                    "Enter your client secret": string;
                                                                                    "Failed to obtain access token. Please re-authenticate.": string;
                                                                                    "Fallback to English": string;
                                                                                    "File name prefix": string;
                                                                                    "Google auth": string;
                                                                                    "Google client ID": string;
                                                                                    "Google client secret": string;
                                                                                    "Google contacts synced!": string;
                                                                                    "Here is the manual about creating your own client:": string;
                                                                                    "If not empty, then only contacts with this label will synced": string;
                                                                                    "Label to sync": string;
                                                                                    Login: string;
                                                                                    "Login with Google": string;
                                                                                    manual: string;
                                                                                    "Note template": string;
                                                                                    "Open Google's auth page in your browser": string;
                                                                                    "Paste code here": string;
                                                                                    "Paste the code from Google after login": string;
                                                                                    "Period in minutes. If 0, then never. 1 day = 1440": string;
                                                                                    "Please enter your client ID first.": string;
                                                                                    "Prefix to add to the beginning of each contact file name": string;
                                                                                    "Prefix to add to the beginning of each contact property name": string;
                                                                                    "Property name prefix": string;
                                                                                    "Sync on startup": string;
                                                                                    "Template to insert below the metadata block for new contact notes": string;
                                                                                    "Tokens saved!": string;
                                                                                    "Vault folder where contact notes will be stored": string;
                                                                                } = ...

                                                                                Language dictionaries for English translations.

                                                                                Type declaration

                                                                                • Authorization code: string
                                                                                • Auto sync period: string
                                                                                • Automatically sync contacts when the plugin is loaded.: string
                                                                                • Client ID and secret required.: string
                                                                                • Contacts folder: string
                                                                                • e.g. # Notes -Write something here...: string
                                                                                • e.g. 1440: string
                                                                                • e.g. Contacts: string
                                                                                • e.g. obsidian: string
                                                                                • e.g. p : string
                                                                                • e.g. s_: string
                                                                                • Enter your client ID: string
                                                                                • Enter your client secret: string
                                                                                • Failed to obtain access token. Please re-authenticate.: string
                                                                                • Fallback to English: string
                                                                                • File name prefix: string
                                                                                • Google auth: string
                                                                                • Google client ID: string
                                                                                • Google client secret: string
                                                                                • Google contacts synced!: string
                                                                                • Here is the manual about creating your own client:: string
                                                                                • If not empty, then only contacts with this label will synced: string
                                                                                • Label to sync: string
                                                                                • Login: string
                                                                                • Login with Google: string
                                                                                • manual: string
                                                                                • Note template: string
                                                                                • Open Google's auth page in your browser: string
                                                                                • Paste code here: string
                                                                                • Paste the code from Google after login: string
                                                                                • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                                • Please enter your client ID first.: string
                                                                                • Prefix to add to the beginning of each contact file name: string
                                                                                • Prefix to add to the beginning of each contact property name: string
                                                                                • Property name prefix: string
                                                                                • Sync on startup: string
                                                                                • Template to insert below the metadata block for new contact notes: string
                                                                                • Tokens saved!: string
                                                                                • Vault folder where contact notes will be stored: string
                                                                                +Write something here...: string
                                                                              • e.g. 1440: string
                                                                              • e.g. Contacts: string
                                                                              • e.g. obsidian: string
                                                                              • e.g. p : string
                                                                              • e.g. s_: string
                                                                              • Enter your client ID: string
                                                                              • Enter your client secret: string
                                                                              • Failed to obtain access token. Please re-authenticate.: string
                                                                              • Fallback to English: string
                                                                              • File name prefix: string
                                                                              • Google auth: string
                                                                              • Google client ID: string
                                                                              • Google client secret: string
                                                                              • Google contacts synced!: string
                                                                              • Here is the manual about creating your own client:: string
                                                                              • If not empty, then only contacts with this label will synced: string
                                                                              • Label to sync: string
                                                                              • Login: string
                                                                              • Login with Google: string
                                                                              • manual: string
                                                                              • Note template: string
                                                                              • Open Google's auth page in your browser: string
                                                                              • Paste code here: string
                                                                              • Paste the code from Google after login: string
                                                                              • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                              • Please enter your client ID first.: string
                                                                              • Prefix to add to the beginning of each contact file name: string
                                                                              • Prefix to add to the beginning of each contact property name: string
                                                                              • Property name prefix: string
                                                                              • Sync on startup: string
                                                                              • Template to insert below the metadata block for new contact notes: string
                                                                              • Tokens saved!: string
                                                                              • Vault folder where contact notes will be stored: string
                                                                              • diff --git a/docs/variables/i18n_translations.lv.html b/docs/variables/i18n_translations.lv.html index 6442ce9..235834a 100644 --- a/docs/variables/i18n_translations.lv.html +++ b/docs/variables/i18n_translations.lv.html @@ -1,4 +1,4 @@ lv | Documentation
                                                                                Documentation
                                                                                  Preparing search index...

                                                                                  Variable lvConst

                                                                                  lv: {
                                                                                      "Authorization code": string;
                                                                                      "Auto sync period": string;
                                                                                      "Automatically sync contacts when the plugin is loaded.": string;
                                                                                      "Client ID and secret required.": string;
                                                                                      "Contacts folder": string;
                                                                                      "e.g. # Notes\n\nWrite something here...": string;
                                                                                      "e.g. 1440": string;
                                                                                      "e.g. Contacts": string;
                                                                                      "e.g. obsidian": string;
                                                                                      "e.g. p ": string;
                                                                                      "e.g. s_": string;
                                                                                      "Enter your client ID": string;
                                                                                      "Enter your client secret": string;
                                                                                      "Failed to obtain access token. Please re-authenticate.": string;
                                                                                      "File name prefix": string;
                                                                                      "Google auth": string;
                                                                                      "Google client ID": string;
                                                                                      "Google client secret": string;
                                                                                      "Google contacts synced!": string;
                                                                                      "Here is the manual about creating your own client:": string;
                                                                                      "If not empty, then only contacts with this label will synced": string;
                                                                                      "Label to sync": string;
                                                                                      Login: string;
                                                                                      "Login with Google": string;
                                                                                      manual: string;
                                                                                      "Note template": string;
                                                                                      "Open Google's auth page in your browser": string;
                                                                                      "Paste code here": string;
                                                                                      "Paste the code from Google after login": string;
                                                                                      "Period in minutes. If 0, then never. 1 day = 1440": string;
                                                                                      "Please enter your client ID first.": string;
                                                                                      "Prefix to add to the beginning of each contact file name": string;
                                                                                      "Prefix to add to the beginning of each contact property name": string;
                                                                                      "Property name prefix": string;
                                                                                      "Sync on startup": string;
                                                                                      "Template to insert below the metadata block for new contact notes": string;
                                                                                      "Tokens saved!": string;
                                                                                      "Vault folder where contact notes will be stored": string;
                                                                                  } = ...

                                                                                  Language dictionaries for Latvian translations.

                                                                                  Type declaration

                                                                                  • Authorization code: string
                                                                                  • Auto sync period: string
                                                                                  • Automatically sync contacts when the plugin is loaded.: string
                                                                                  • Client ID and secret required.: string
                                                                                  • Contacts folder: string
                                                                                  • e.g. # Notes -Write something here...: string
                                                                                  • e.g. 1440: string
                                                                                  • e.g. Contacts: string
                                                                                  • e.g. obsidian: string
                                                                                  • e.g. p : string
                                                                                  • e.g. s_: string
                                                                                  • Enter your client ID: string
                                                                                  • Enter your client secret: string
                                                                                  • Failed to obtain access token. Please re-authenticate.: string
                                                                                  • File name prefix: string
                                                                                  • Google auth: string
                                                                                  • Google client ID: string
                                                                                  • Google client secret: string
                                                                                  • Google contacts synced!: string
                                                                                  • Here is the manual about creating your own client:: string
                                                                                  • If not empty, then only contacts with this label will synced: string
                                                                                  • Label to sync: string
                                                                                  • Login: string
                                                                                  • Login with Google: string
                                                                                  • manual: string
                                                                                  • Note template: string
                                                                                  • Open Google's auth page in your browser: string
                                                                                  • Paste code here: string
                                                                                  • Paste the code from Google after login: string
                                                                                  • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                                  • Please enter your client ID first.: string
                                                                                  • Prefix to add to the beginning of each contact file name: string
                                                                                  • Prefix to add to the beginning of each contact property name: string
                                                                                  • Property name prefix: string
                                                                                  • Sync on startup: string
                                                                                  • Template to insert below the metadata block for new contact notes: string
                                                                                  • Tokens saved!: string
                                                                                  • Vault folder where contact notes will be stored: string
                                                                                  +Write something here...: string
                                                                                • e.g. 1440: string
                                                                                • e.g. Contacts: string
                                                                                • e.g. obsidian: string
                                                                                • e.g. p : string
                                                                                • e.g. s_: string
                                                                                • Enter your client ID: string
                                                                                • Enter your client secret: string
                                                                                • Failed to obtain access token. Please re-authenticate.: string
                                                                                • File name prefix: string
                                                                                • Google auth: string
                                                                                • Google client ID: string
                                                                                • Google client secret: string
                                                                                • Google contacts synced!: string
                                                                                • Here is the manual about creating your own client:: string
                                                                                • If not empty, then only contacts with this label will synced: string
                                                                                • Label to sync: string
                                                                                • Login: string
                                                                                • Login with Google: string
                                                                                • manual: string
                                                                                • Note template: string
                                                                                • Open Google's auth page in your browser: string
                                                                                • Paste code here: string
                                                                                • Paste the code from Google after login: string
                                                                                • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                                • Please enter your client ID first.: string
                                                                                • Prefix to add to the beginning of each contact file name: string
                                                                                • Prefix to add to the beginning of each contact property name: string
                                                                                • Property name prefix: string
                                                                                • Sync on startup: string
                                                                                • Template to insert below the metadata block for new contact notes: string
                                                                                • Tokens saved!: string
                                                                                • Vault folder where contact notes will be stored: string
                                                                                • diff --git a/docs/variables/i18n_translations.ru.html b/docs/variables/i18n_translations.ru.html index be38259..9105028 100644 --- a/docs/variables/i18n_translations.ru.html +++ b/docs/variables/i18n_translations.ru.html @@ -1,4 +1,4 @@ ru | Documentation
                                                                                  Documentation
                                                                                    Preparing search index...

                                                                                    Variable ruConst

                                                                                    ru: {
                                                                                        "Authorization code": string;
                                                                                        "Auto sync period": string;
                                                                                        "Automatically sync contacts when the plugin is loaded.": string;
                                                                                        "Client ID and secret required.": string;
                                                                                        "Contacts folder": string;
                                                                                        "e.g. # Notes\n\nWrite something here...": string;
                                                                                        "e.g. 1440": string;
                                                                                        "e.g. Contacts": string;
                                                                                        "e.g. obsidian": string;
                                                                                        "e.g. p ": string;
                                                                                        "e.g. s_": string;
                                                                                        "Enter your client ID": string;
                                                                                        "Enter your client secret": string;
                                                                                        "Failed to obtain access token. Please re-authenticate.": string;
                                                                                        "File name prefix": string;
                                                                                        "Google auth": string;
                                                                                        "Google client ID": string;
                                                                                        "Google client secret": string;
                                                                                        "Google contacts synced!": string;
                                                                                        "Here is the manual about creating your own client:": string;
                                                                                        "If not empty, then only contacts with this label will synced": string;
                                                                                        "Label to sync": string;
                                                                                        Login: string;
                                                                                        "Login with Google": string;
                                                                                        manual: string;
                                                                                        "Note template": string;
                                                                                        "Open Google's auth page in your browser": string;
                                                                                        "Paste code here": string;
                                                                                        "Paste the code from Google after login": string;
                                                                                        "Period in minutes. If 0, then never. 1 day = 1440": string;
                                                                                        "Please enter your client ID first.": string;
                                                                                        "Prefix to add to the beginning of each contact file name": string;
                                                                                        "Prefix to add to the beginning of each contact property name": string;
                                                                                        "Property name prefix": string;
                                                                                        "Sync on startup": string;
                                                                                        "Template to insert below the metadata block for new contact notes": string;
                                                                                        "Tokens saved!": string;
                                                                                        "Vault folder where contact notes will be stored": string;
                                                                                    } = ...

                                                                                    Language dictionaries for Russian translations.

                                                                                    Type declaration

                                                                                    • Authorization code: string
                                                                                    • Auto sync period: string
                                                                                    • Automatically sync contacts when the plugin is loaded.: string
                                                                                    • Client ID and secret required.: string
                                                                                    • Contacts folder: string
                                                                                    • e.g. # Notes -Write something here...: string
                                                                                    • e.g. 1440: string
                                                                                    • e.g. Contacts: string
                                                                                    • e.g. obsidian: string
                                                                                    • e.g. p : string
                                                                                    • e.g. s_: string
                                                                                    • Enter your client ID: string
                                                                                    • Enter your client secret: string
                                                                                    • Failed to obtain access token. Please re-authenticate.: string
                                                                                    • File name prefix: string
                                                                                    • Google auth: string
                                                                                    • Google client ID: string
                                                                                    • Google client secret: string
                                                                                    • Google contacts synced!: string
                                                                                    • Here is the manual about creating your own client:: string
                                                                                    • If not empty, then only contacts with this label will synced: string
                                                                                    • Label to sync: string
                                                                                    • Login: string
                                                                                    • Login with Google: string
                                                                                    • manual: string
                                                                                    • Note template: string
                                                                                    • Open Google's auth page in your browser: string
                                                                                    • Paste code here: string
                                                                                    • Paste the code from Google after login: string
                                                                                    • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                                    • Please enter your client ID first.: string
                                                                                    • Prefix to add to the beginning of each contact file name: string
                                                                                    • Prefix to add to the beginning of each contact property name: string
                                                                                    • Property name prefix: string
                                                                                    • Sync on startup: string
                                                                                    • Template to insert below the metadata block for new contact notes: string
                                                                                    • Tokens saved!: string
                                                                                    • Vault folder where contact notes will be stored: string
                                                                                    +Write something here...: string
                                                                                  • e.g. 1440: string
                                                                                  • e.g. Contacts: string
                                                                                  • e.g. obsidian: string
                                                                                  • e.g. p : string
                                                                                  • e.g. s_: string
                                                                                  • Enter your client ID: string
                                                                                  • Enter your client secret: string
                                                                                  • Failed to obtain access token. Please re-authenticate.: string
                                                                                  • File name prefix: string
                                                                                  • Google auth: string
                                                                                  • Google client ID: string
                                                                                  • Google client secret: string
                                                                                  • Google contacts synced!: string
                                                                                  • Here is the manual about creating your own client:: string
                                                                                  • If not empty, then only contacts with this label will synced: string
                                                                                  • Label to sync: string
                                                                                  • Login: string
                                                                                  • Login with Google: string
                                                                                  • manual: string
                                                                                  • Note template: string
                                                                                  • Open Google's auth page in your browser: string
                                                                                  • Paste code here: string
                                                                                  • Paste the code from Google after login: string
                                                                                  • Period in minutes. If 0, then never. 1 day = 1440: string
                                                                                  • Please enter your client ID first.: string
                                                                                  • Prefix to add to the beginning of each contact file name: string
                                                                                  • Prefix to add to the beginning of each contact property name: string
                                                                                  • Property name prefix: string
                                                                                  • Sync on startup: string
                                                                                  • Template to insert below the metadata block for new contact notes: string
                                                                                  • Tokens saved!: string
                                                                                  • Vault folder where contact notes will be stored: string
                                                                                  • diff --git a/docs/variables/i18n_translator.translator.html b/docs/variables/i18n_translator.translator.html index b1dcac6..fee16f2 100644 --- a/docs/variables/i18n_translator.translator.html +++ b/docs/variables/i18n_translator.translator.html @@ -1 +1 @@ -translator | Documentation
                                                                                    Documentation
                                                                                      Preparing search index...

                                                                                      Variable translatorConst

                                                                                      translator: Translator = ...
                                                                                      +translator | Documentation
                                                                                      Documentation
                                                                                        Preparing search index...

                                                                                        Variable translatorConst

                                                                                        translator: Translator = ...
                                                                                        diff --git a/manifest.json b/manifest.json index 014c927..fc93e83 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "google-contacts", "name": "Google Contacts", - "version": "1.0.0", + "version": "1.0.1", "minAppVersion": "1.8.0", "description": "Synchronize your Google contacts with separate contact-notes", "author": "aleksejs1", diff --git a/package-lock.json b/package-lock.json index 5c7ecb5..af2cf21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "google-contacts", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "google-contacts", - "version": "1.0.0", + "version": "1.0.1", "license": "ISC", "dependencies": { "ts-node": "^10.9.2", @@ -61,30 +61,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz", - "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", + "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -109,15 +109,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -149,6 +149,15 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", @@ -216,25 +225,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", "dev": true, "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -480,36 +489,27 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -536,9 +536,9 @@ } }, "node_modules/@codemirror/view": { - "version": "6.37.2", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.37.2.tgz", - "integrity": "sha512-XD3LdgQpxQs5jhOOZ2HRVT+Rj59O4Suc7g2ULvZ+Yi8eCkickrkZ5JFuoDhs2ST1mNI5zSsNYgR3NGa4OUrbnw==", + "version": "6.38.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.38.1.tgz", + "integrity": "sha512-RmTOkE7hRU3OVREqFVITWHz6ocgBjv08GoePscAakgVQfciA3SGCEk7mb9IzwW61cKKmlTpHXG6DUE5Ubx+MGQ==", "dev": true, "peer": true, "dependencies": { @@ -596,9 +596,9 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "dependencies": { "@eslint/object-schema": "^2.1.6", @@ -632,18 +632,18 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.3.tgz", - "integrity": "sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz", - "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.15" @@ -707,9 +707,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.31.0.tgz", + "integrity": "sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -728,40 +728,28 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.2.tgz", - "integrity": "sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", "dev": true, "dependencies": { - "@eslint/core": "^0.15.0", + "@eslint/core": "^0.15.1", "levn": "^0.4.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.0.tgz", - "integrity": "sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, "node_modules/@gerrit0/mini-shiki": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.6.0.tgz", - "integrity": "sha512-KaeJvPNofTEZR9EzVNp/GQzbQqkGfjiu6k3CXKvhVTX+8OoAKSX/k7qxLKOX3B0yh2XqVAc93rsOu48CGt2Qug==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.8.1.tgz", + "integrity": "sha512-HVZW+8pxoOExr5ZMPK15U79jQAZTO/S6i5byQyyZGjtNj+qaYd82cizTncwFzTQgiLo8uUBym6vh+/1tfJklTw==", "dev": true, "dependencies": { - "@shikijs/engine-oniguruma": "^3.6.0", - "@shikijs/langs": "^3.6.0", - "@shikijs/themes": "^3.6.0", - "@shikijs/types": "^3.6.0", + "@shikijs/engine-oniguruma": "^3.8.1", + "@shikijs/langs": "^3.8.1", + "@shikijs/themes": "^3.8.1", + "@shikijs/types": "^3.8.1", "@shikijs/vscode-textmate": "^10.0.2" } }, @@ -1213,17 +1201,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -1234,24 +1218,15 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1325,9 +1300,9 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "12.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.3.tgz", - "integrity": "sha512-gAx0AYwkyjqOw4JrZV34N/abvAobLhczyLkZ7FVL2UXPrO4zv8oqTfYT3DLBRan1EXasp4SUuEJXqPTk0gnJzw==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.4.tgz", + "integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.1.0", @@ -1373,9 +1348,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.0.tgz", - "integrity": "sha512-xEiEE5oDW6tK4jXCAyliuntGR+amEMO7HLtdSshVuhFnKTYoeYMyXQK7pLouAJJj5KHdwdn87bfHAR2nSdNAUA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", "cpu": [ "arm" ], @@ -1386,9 +1361,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.0.tgz", - "integrity": "sha512-uNSk/TgvMbskcHxXYHzqwiyBlJ/lGcv8DaUfcnNwict8ba9GTTNxfn3/FAoFZYgkaXXAdrAA+SLyKplyi349Jw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", "cpu": [ "arm64" ], @@ -1399,9 +1374,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.0.tgz", - "integrity": "sha512-VGF3wy0Eq1gcEIkSCr8Ke03CWT+Pm2yveKLaDvq51pPpZza3JX/ClxXOCmTYYq3us5MvEuNRTaeyFThCKRQhOA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", "cpu": [ "arm64" ], @@ -1412,9 +1387,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.0.tgz", - "integrity": "sha512-fBkyrDhwquRvrTxSGH/qqt3/T0w5Rg0L7ZIDypvBPc1/gzjJle6acCpZ36blwuwcKD/u6oCE/sRWlUAcxLWQbQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", "cpu": [ "x64" ], @@ -1425,9 +1400,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.0.tgz", - "integrity": "sha512-u5AZzdQJYJXByB8giQ+r4VyfZP+walV+xHWdaFx/1VxsOn6eWJhK2Vl2eElvDJFKQBo/hcYIBg/jaKS8ZmKeNQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", "cpu": [ "arm64" ], @@ -1438,9 +1413,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.0.tgz", - "integrity": "sha512-qC0kS48c/s3EtdArkimctY7h3nHicQeEUdjJzYVJYR3ct3kWSafmn6jkNCA8InbUdge6PVx6keqjk5lVGJf99g==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", "cpu": [ "x64" ], @@ -1451,9 +1426,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.0.tgz", - "integrity": "sha512-x+e/Z9H0RAWckn4V2OZZl6EmV0L2diuX3QB0uM1r6BvhUIv6xBPL5mrAX2E3e8N8rEHVPwFfz/ETUbV4oW9+lQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", "cpu": [ "arm" ], @@ -1464,9 +1439,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.0.tgz", - "integrity": "sha512-1exwiBFf4PU/8HvI8s80icyCcnAIB86MCBdst51fwFmH5dyeoWVPVgmQPcKrMtBQ0W5pAs7jBCWuRXgEpRzSCg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", "cpu": [ "arm" ], @@ -1477,9 +1452,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.0.tgz", - "integrity": "sha512-ZTR2mxBHb4tK4wGf9b8SYg0Y6KQPjGpR4UWwTFdnmjB4qRtoATZ5dWn3KsDwGa5Z2ZBOE7K52L36J9LueKBdOQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", "cpu": [ "arm64" ], @@ -1490,9 +1465,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.0.tgz", - "integrity": "sha512-GFWfAhVhWGd4r6UxmnKRTBwP1qmModHtd5gkraeW2G490BpFOZkFtem8yuX2NyafIP/mGpRJgTJ2PwohQkUY/Q==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", "cpu": [ "arm64" ], @@ -1503,9 +1478,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.0.tgz", - "integrity": "sha512-xw+FTGcov/ejdusVOqKgMGW3c4+AgqrfvzWEVXcNP6zq2ue+lsYUgJ+5Rtn/OTJf7e2CbgTFvzLW2j0YAtj0Gg==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", "cpu": [ "loong64" ], @@ -1516,9 +1491,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.0.tgz", - "integrity": "sha512-bKGibTr9IdF0zr21kMvkZT4K6NV+jjRnBoVMt2uNMG0BYWm3qOVmYnXKzx7UhwrviKnmK46IKMByMgvpdQlyJQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", "cpu": [ "ppc64" ], @@ -1529,9 +1504,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.0.tgz", - "integrity": "sha512-vV3cL48U5kDaKZtXrti12YRa7TyxgKAIDoYdqSIOMOFBXqFj2XbChHAtXquEn2+n78ciFgr4KIqEbydEGPxXgA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", "cpu": [ "riscv64" ], @@ -1542,9 +1517,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.0.tgz", - "integrity": "sha512-TDKO8KlHJuvTEdfw5YYFBjhFts2TR0VpZsnLLSYmB7AaohJhM8ctDSdDnUGq77hUh4m/djRafw+9zQpkOanE2Q==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", "cpu": [ "riscv64" ], @@ -1555,9 +1530,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.0.tgz", - "integrity": "sha512-8541GEyktXaw4lvnGp9m84KENcxInhAt6vPWJ9RodsB/iGjHoMB2Pp5MVBCiKIRxrxzJhGCxmNzdu+oDQ7kwRA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", "cpu": [ "s390x" ], @@ -1568,9 +1543,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.0.tgz", - "integrity": "sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", "cpu": [ "x64" ], @@ -1581,9 +1556,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.0.tgz", - "integrity": "sha512-PQUobbhLTQT5yz/SPg116VJBgz+XOtXt8D1ck+sfJJhuEsMj2jSej5yTdp8CvWBSceu+WW+ibVL6dm0ptG5fcA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", "cpu": [ "x64" ], @@ -1594,9 +1569,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.0.tgz", - "integrity": "sha512-M0CpcHf8TWn+4oTxJfh7LQuTuaYeXGbk0eageVjQCKzYLsajWS/lFC94qlRqOlyC2KvRT90ZrfXULYmukeIy7w==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", "cpu": [ "arm64" ], @@ -1607,9 +1582,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.0.tgz", - "integrity": "sha512-3XJ0NQtMAXTWFW8FqZKcw3gOQwBtVWP/u8TpHP3CRPXD7Pd6s8lLdH3sHWh8vqKCyyiI8xW5ltJScQmBU9j7WA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", "cpu": [ "ia32" ], @@ -1620,9 +1595,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.0.tgz", - "integrity": "sha512-Q2Mgwt+D8hd5FIPUuPDsvPR7Bguza6yTkJxspDGkZj7tBRn2y4KSWYuIXpftFSjBra76TbKerCV7rgFPQrn+wQ==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", "cpu": [ "x64" ], @@ -1633,37 +1608,37 @@ ] }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.6.0.tgz", - "integrity": "sha512-nmOhIZ9yT3Grd+2plmW/d8+vZ2pcQmo/UnVwXMUXAKTXdi+LK0S08Ancrz5tQQPkxvjBalpMW2aKvwXfelauvA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.8.1.tgz", + "integrity": "sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g==", "dev": true, "dependencies": { - "@shikijs/types": "3.6.0", + "@shikijs/types": "3.8.1", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.6.0.tgz", - "integrity": "sha512-IdZkQJaLBu1LCYCwkr30hNuSDfllOT8RWYVZK1tD2J03DkiagYKRxj/pDSl8Didml3xxuyzUjgtioInwEQM/TA==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.8.1.tgz", + "integrity": "sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ==", "dev": true, "dependencies": { - "@shikijs/types": "3.6.0" + "@shikijs/types": "3.8.1" } }, "node_modules/@shikijs/themes": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.6.0.tgz", - "integrity": "sha512-Fq2j4nWr1DF4drvmhqKq8x5vVQ27VncF8XZMBuHuQMZvUSS3NBgpqfwz/FoGe36+W6PvniZ1yDlg2d4kmYDU6w==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.8.1.tgz", + "integrity": "sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ==", "dev": true, "dependencies": { - "@shikijs/types": "3.6.0" + "@shikijs/types": "3.8.1" } }, "node_modules/@shikijs/types": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.6.0.tgz", - "integrity": "sha512-cLWFiToxYu0aAzJqhXTQsFiJRTFDAGl93IrMSBNaGSzs7ixkLfdG6pH11HipuWFGW5vyx4X47W8HDQ7eSrmBUg==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.8.1.tgz", + "integrity": "sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg==", "dev": true, "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", @@ -1835,9 +1810,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "24.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.3.tgz", - "integrity": "sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==", + "version": "24.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", + "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", "dependencies": { "undici-types": "~7.8.0" } @@ -1885,16 +1860,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.34.1.tgz", - "integrity": "sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/type-utils": "8.34.1", - "@typescript-eslint/utils": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1908,21 +1883,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.34.1", + "@typescript-eslint/parser": "^8.38.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.34.1.tgz", - "integrity": "sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4" }, "engines": { @@ -1938,13 +1913,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.34.1.tgz", - "integrity": "sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", "dev": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.34.1", - "@typescript-eslint/types": "^8.34.1", + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", "debug": "^4.3.4" }, "engines": { @@ -1959,13 +1934,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.34.1.tgz", - "integrity": "sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1" + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1976,9 +1951,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.34.1.tgz", - "integrity": "sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1992,13 +1967,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.34.1.tgz", - "integrity": "sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "8.34.1", - "@typescript-eslint/utils": "8.34.1", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2015,9 +1991,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.34.1.tgz", - "integrity": "sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2028,15 +2004,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.34.1.tgz", - "integrity": "sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", "dev": true, "dependencies": { - "@typescript-eslint/project-service": "8.34.1", - "@typescript-eslint/tsconfig-utils": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/visitor-keys": "8.34.1", + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2056,15 +2032,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.34.1.tgz", - "integrity": "sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.34.1", - "@typescript-eslint/types": "8.34.1", - "@typescript-eslint/typescript-estree": "8.34.1" + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2079,12 +2055,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.34.1.tgz", - "integrity": "sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "8.34.1", + "@typescript-eslint/types": "8.38.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2382,9 +2358,9 @@ } }, "node_modules/browserslist": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz", - "integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -2401,8 +2377,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001718", - "electron-to-chromium": "^1.5.160", + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -2459,9 +2435,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001723", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz", - "integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==", + "version": "1.0.30001727", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", + "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", "dev": true, "funding": [ { @@ -2811,9 +2787,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.171", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz", - "integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==", + "version": "1.5.190", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.190.tgz", + "integrity": "sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==", "dev": true }, "node_modules/emittery": { @@ -2889,18 +2865,18 @@ } }, "node_modules/eslint": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.31.0.tgz", + "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.1", - "@eslint/config-helpers": "^0.2.1", - "@eslint/core": "^0.14.0", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.29.0", + "@eslint/js": "9.31.0", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -2949,9 +2925,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", - "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -5186,9 +5162,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "engines": { "node": ">=12" @@ -5292,9 +5268,9 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -5533,9 +5509,9 @@ "dev": true }, "node_modules/rollup": { - "version": "4.44.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.0.tgz", - "integrity": "sha512-qHcdEzLCiktQIfwBq420pn2dP+30uzqYxv9ETm91wdt2R9AFcWfjNAmje4NWlnCIQ5RMTzVf0ZyisOKqHR6RwA==", + "version": "4.45.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", "dev": true, "dependencies": { "@types/estree": "1.0.8" @@ -5548,26 +5524,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.44.0", - "@rollup/rollup-android-arm64": "4.44.0", - "@rollup/rollup-darwin-arm64": "4.44.0", - "@rollup/rollup-darwin-x64": "4.44.0", - "@rollup/rollup-freebsd-arm64": "4.44.0", - "@rollup/rollup-freebsd-x64": "4.44.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.44.0", - "@rollup/rollup-linux-arm-musleabihf": "4.44.0", - "@rollup/rollup-linux-arm64-gnu": "4.44.0", - "@rollup/rollup-linux-arm64-musl": "4.44.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.44.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.44.0", - "@rollup/rollup-linux-riscv64-gnu": "4.44.0", - "@rollup/rollup-linux-riscv64-musl": "4.44.0", - "@rollup/rollup-linux-s390x-gnu": "4.44.0", - "@rollup/rollup-linux-x64-gnu": "4.44.0", - "@rollup/rollup-linux-x64-musl": "4.44.0", - "@rollup/rollup-win32-arm64-msvc": "4.44.0", - "@rollup/rollup-win32-ia32-msvc": "4.44.0", - "@rollup/rollup-win32-x64-msvc": "4.44.0", + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", "fsevents": "~2.3.2" } }, @@ -6072,16 +6048,16 @@ } }, "node_modules/typedoc": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.5.tgz", - "integrity": "sha512-5PzUddaA9FbaarUzIsEc4wNXCiO4Ot3bJNeMF2qKpYlTmM9TTaSHQ7162w756ERCkXER/+o2purRG6YOAv6EMA==", + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.7.tgz", + "integrity": "sha512-lpz0Oxl6aidFkmS90VQDQjk/Qf2iw0IUvFqirdONBdj7jPSN9mGXhy66BcGNDxx5ZMyKKiBVAREvPEzT6Uxipw==", "dev": true, "dependencies": { - "@gerrit0/mini-shiki": "^3.2.2", + "@gerrit0/mini-shiki": "^3.7.0", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "yaml": "^2.7.1" + "yaml": "^2.8.0" }, "bin": { "typedoc": "bin/typedoc" @@ -6107,14 +6083,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.34.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.34.1.tgz", - "integrity": "sha512-XjS+b6Vg9oT1BaIUfkW3M3LvqZE++rbzAMEHuccCfO/YkP43ha6w3jTEMilQxMF92nVOYCcdjv1ZUhAa1D/0ow==", + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.34.1", - "@typescript-eslint/parser": "8.34.1", - "@typescript-eslint/utils": "8.34.1" + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/package.json b/package.json index cfc33da..99c939c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "google-contacts", - "version": "1.0.0", + "version": "1.0.1", "description": "", "main": "rollup.config.js", "type": "module", diff --git a/src/__tests__/core/GoogleContactsService.test.ts b/src/__tests__/core/GoogleContactsService.test.ts index 483e58a..fada07b 100644 --- a/src/__tests__/core/GoogleContactsService.test.ts +++ b/src/__tests__/core/GoogleContactsService.test.ts @@ -1,6 +1,10 @@ import { GoogleContactsService } from '../../core/GoogleContactsService'; import { requestUrl } from 'obsidian'; -import { URL_PEOPLE_API, URL_CONTACT_GROUPS } from '../../config'; +import { + URL_PEOPLE_CONNECTIONS, + PERSONAL_FIELDS, + URL_CONTACT_GROUPS, +} from '../../config'; import type { GoogleContact, GoogleContactGroup } from '../../types/Contact'; jest.mock('obsidian', () => ({ @@ -43,7 +47,7 @@ describe('GoogleContactsService', () => { const result = await googleContactsService.fetchGoogleContacts(mockToken); expect(requestUrl).toHaveBeenCalledWith({ - url: URL_PEOPLE_API, + url: `${URL_PEOPLE_CONNECTIONS}?personFields=${PERSONAL_FIELDS}&pageSize=1000`, headers: { Authorization: `Bearer ${mockToken}`, }, diff --git a/src/config/index.ts b/src/config/index.ts index eb93ec0..b513c72 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -5,7 +5,8 @@ export const URL_OAUTH_TOKEN = 'https://oauth2.googleapis.com/token'; /** Google People API endpoints */ export const URL_PEOPLE_BASE = 'https://people.googleapis.com/v1'; export const URL_PEOPLE_CONNECTIONS = `${URL_PEOPLE_BASE}/people/me/connections`; -export const URL_PEOPLE_API = `${URL_PEOPLE_CONNECTIONS}?personFields=names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations&pageSize=2000`; +export const PERSONAL_FIELDS = `names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations`; +export const URL_PEOPLE_API = `${URL_PEOPLE_CONNECTIONS}?personFields=names,emailAddresses,phoneNumbers,birthdays,memberships,metadata,addresses,biographies,organizations&pageSize=1000`; export const URL_CONTACT_GROUPS = `${URL_PEOPLE_BASE}/contactGroups`; /** OAuth2 defaults */ diff --git a/src/core/GoogleContactsService.ts b/src/core/GoogleContactsService.ts index e9364c7..6a99a6d 100644 --- a/src/core/GoogleContactsService.ts +++ b/src/core/GoogleContactsService.ts @@ -1,5 +1,9 @@ import { requestUrl } from 'obsidian'; -import { URL_CONTACT_GROUPS, URL_PEOPLE_API } from '../config'; +import { + URL_CONTACT_GROUPS, + URL_PEOPLE_CONNECTIONS, + PERSONAL_FIELDS, +} from '../config'; import type { GoogleContact, GoogleContactGroup } from '../types/Contact'; /** @@ -18,15 +22,25 @@ export class GoogleContactsService { * @returns An array of Google contact objects. */ async fetchGoogleContacts(token: string): Promise { - const res = await requestUrl({ - url: URL_PEOPLE_API, - headers: { - Authorization: `Bearer ${token}`, - }, - }); + let allContacts: GoogleContact[] = []; + let nextPageToken: string | undefined = undefined; - const data = await res.json; - return data.connections || []; + do { + const url = `${URL_PEOPLE_CONNECTIONS}?personFields=${PERSONAL_FIELDS}&pageSize=1000${nextPageToken ? `&pageToken=${nextPageToken}` : ''}`; + + const res = await requestUrl({ + url, + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + const data = await res.json; + allContacts = allContacts.concat(data.connections || []); + nextPageToken = data.nextPageToken; + } while (nextPageToken); + + return allContacts; } /**