@srafis/zsync 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -96
- package/docs/clockify-setup.md +35 -0
- package/docs/zoho-setup.md +41 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,43 +1,54 @@
|
|
|
1
1
|
# zsync
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Copy selected Clockify time entries to Zoho People.
|
|
4
4
|
|
|
5
|
-
zsync
|
|
5
|
+
zsync runs in an interactive terminal. It reads completed entries for one Clockify user and workspace. You choose the entries to create or update in Zoho People. It can also find entries deleted from Clockify and offer the related Zoho logs for deletion. It runs only when you start it.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Install
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
You need:
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
- Node.js 22 or newer
|
|
12
|
+
- An interactive terminal
|
|
13
|
+
- A Clockify account with time entries
|
|
14
|
+
- A Zoho People account with Time Tracker access and at least one assigned job
|
|
12
15
|
|
|
13
|
-
|
|
16
|
+
Install the published package:
|
|
14
17
|
|
|
15
18
|
```sh
|
|
16
|
-
|
|
17
|
-
bun run dev --demo
|
|
19
|
+
npm i -g @srafis/zsync
|
|
18
20
|
```
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
Check the installation:
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
```sh
|
|
25
|
+
zsync --help
|
|
26
|
+
```
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
To try zsync without credentials, run:
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
```sh
|
|
31
|
+
zsync --demo
|
|
32
|
+
```
|
|
27
33
|
|
|
28
|
-
|
|
34
|
+
The demo uses fictional entries and sends no requests to Clockify or Zoho People.
|
|
29
35
|
|
|
30
|
-
|
|
36
|
+
## Set up your accounts
|
|
31
37
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
38
|
+
Follow the [Clockify setup guide](docs/clockify-setup.md) and the [Zoho People setup guide](docs/zoho-setup.md) to create the required credentials.
|
|
39
|
+
|
|
40
|
+
Before you configure zsync, collect these values:
|
|
41
|
+
|
|
42
|
+
- A Clockify API key, user ID, and workspace ID
|
|
43
|
+
- A Zoho client ID and client secret
|
|
44
|
+
- Access to Zoho People Time Tracker
|
|
45
|
+
- A Zoho job assigned to your employee record
|
|
35
46
|
|
|
36
|
-
|
|
47
|
+
Use the same Clockify user and workspace that own the entries you want to sync. zsync checks both values before it reads your time entries.
|
|
37
48
|
|
|
38
|
-
|
|
49
|
+
## Configure zsync
|
|
39
50
|
|
|
40
|
-
|
|
51
|
+
Set the required values in the terminal where you will run zsync:
|
|
41
52
|
|
|
42
53
|
```sh
|
|
43
54
|
export CLOCKIFY_API_KEY='your-clockify-api-key'
|
|
@@ -47,143 +58,175 @@ export ZOHO_CLIENT_ID='your-zoho-client-id'
|
|
|
47
58
|
export ZOHO_CLIENT_SECRET='your-zoho-client-secret'
|
|
48
59
|
```
|
|
49
60
|
|
|
50
|
-
|
|
61
|
+
The example uses a POSIX shell. In PowerShell, set each variable with `$env:NAME = 'value'`.
|
|
62
|
+
|
|
63
|
+
Keep these values private. Do not commit them to a repository. The published command reads environment variables from its process. It does not read a project `.env` file.
|
|
64
|
+
|
|
65
|
+
### Optional variables
|
|
51
66
|
|
|
52
|
-
|
|
67
|
+
|
|
68
|
+
| Variable | Use | Default |
|
|
69
|
+
| -------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------- |
|
|
70
|
+
| `ZOHO_REGION` | Zoho data center code: `com`, `eu`, `in`, `au`, `cn`, `jp`, `ca`, `sa`, or `uk` | Saved region, otherwise `com` |
|
|
71
|
+
| `ZSYNC_TIMEZONE` | Time zone used for entry dates, such as `Asia/Kolkata` | System time zone |
|
|
72
|
+
| `ZOHO_DATE_FORMAT` | Date format used by your Zoho organization | `yyyy-MM-dd` |
|
|
73
|
+
| `ZSYNC_STATE_DIR` | Folder for saved authentication and job mappings | See [Saved files](#saved-files) |
|
|
74
|
+
| `ZOHO_REFRESH_TOKEN` | Use an existing Zoho refresh token | Saved token |
|
|
75
|
+
| `ZOHO_EMPLOYEE_ID` | Set the Zoho employee record ID, also called `ERECNO` | Saved ID, otherwise looked up after authorization |
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Supported values for `ZOHO_DATE_FORMAT` are `yyyy-MM-dd`, `dd-MM-yyyy`, `MM-dd-yyyy`, `yyyy/MM/dd`, `dd/MM/yyyy`, and `MM/dd/yyyy`.
|
|
79
|
+
|
|
80
|
+
Set `ZOHO_REGION` for a non-US Zoho data center. For example:
|
|
53
81
|
|
|
54
82
|
```sh
|
|
55
83
|
export ZOHO_REGION='in'
|
|
56
84
|
```
|
|
57
85
|
|
|
58
|
-
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
## Authorize Zoho People
|
|
89
|
+
|
|
90
|
+
Run zsync after you set the required variables:
|
|
59
91
|
|
|
60
92
|
```sh
|
|
61
|
-
|
|
93
|
+
zsync
|
|
62
94
|
```
|
|
63
95
|
|
|
64
|
-
On the first run, zsync
|
|
96
|
+
On the first run, zsync:
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
1. Opens your browser for Zoho authorization.
|
|
99
|
+
2. Waits for Zoho to send the result to `http://localhost:8765/callback`.
|
|
100
|
+
3. Finds your Zoho People employee record from your email address.
|
|
101
|
+
4. Asks for your numeric employee record ID, `ERECNO`, if the lookup fails.
|
|
102
|
+
5. Saves the refresh token and employee record ID for later runs.
|
|
67
103
|
|
|
68
|
-
|
|
69
|
-
- `ZOHOPEOPLE.forms.READ`
|
|
70
|
-
- `AaaServer.profile.READ`
|
|
104
|
+
If the browser does not open, copy the URL shown in the terminal and open it yourself. Port 8765 must be free. The authorization step times out after five minutes.
|
|
71
105
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
The refresh token and employee record ID are saved locally for later runs. To authorize again:
|
|
106
|
+
To authorize again, run:
|
|
75
107
|
|
|
76
108
|
```sh
|
|
77
|
-
|
|
109
|
+
zsync --connect
|
|
78
110
|
```
|
|
79
111
|
|
|
80
|
-
Reconnecting
|
|
112
|
+
Reconnecting keeps saved job mappings for the same account.
|
|
81
113
|
|
|
82
114
|
## Sync your time
|
|
83
115
|
|
|
84
|
-
Track time in Clockify
|
|
116
|
+
Track time in Clockify and stop any timers you want to sync. Then run:
|
|
85
117
|
|
|
86
118
|
```sh
|
|
87
|
-
|
|
119
|
+
zsync
|
|
88
120
|
```
|
|
89
121
|
|
|
122
|
+
Use the prompts in this order:
|
|
123
|
+
|
|
90
124
|
1. Choose Today, Yesterday, This week, Last week, or This month.
|
|
91
|
-
2. Use the arrow keys to move through entries
|
|
92
|
-
3. Choose a Zoho job for each
|
|
93
|
-
4. Review the create
|
|
125
|
+
2. Use the arrow keys to move through the entries. Press Space to select or clear an entry. Press Enter to continue. Press Esc to cancel.
|
|
126
|
+
3. Choose a Zoho job for each Clockify project that has no saved match. zsync selects a unique project or job with the same name when it can.
|
|
127
|
+
4. Review the create, update, and delete counts.
|
|
128
|
+
5. Choose Yes to write the changes.
|
|
129
|
+
|
|
130
|
+
New, changed, and deleted entries start selected. Unchanged entries that zsync already synced are not selected. Changed entries show `[updated]` before the description. Deleted entries show `[deleted]`.
|
|
94
131
|
|
|
95
|
-
|
|
132
|
+
The final prompt defaults to Yes when it only creates or updates entries. It defaults to No when it includes a deletion. zsync makes no Zoho changes before this final confirmation. It may save job mappings before you confirm.
|
|
96
133
|
|
|
97
|
-
|
|
134
|
+
Weeks start on Monday. Today, This week, and This month end at the time you start zsync. zsync uses `ZSYNC_TIMEZONE` for local dates.
|
|
98
135
|
|
|
99
|
-
## What
|
|
136
|
+
## What zsync copies
|
|
100
137
|
|
|
101
|
-
| Clockify field | Zoho field or behavior |
|
|
102
|
-
| ------------------------------------------------------ | --------------------------------------------------------- |
|
|
103
|
-
| Description | Work Item |
|
|
104
|
-
| Project | The Zoho job you selected or matched |
|
|
105
|
-
| Duration | Hours, rounded to the nearest minute |
|
|
106
|
-
| Start date | Work date in your configured timezone |
|
|
107
|
-
| Billable flag | Billing status |
|
|
108
|
-
| Entry ID, project, tags, start/end times, billing flag | Readable YAML metadata in Description, with a sync marker |
|
|
109
138
|
|
|
110
|
-
|
|
139
|
+
| Clockify data | Zoho People result |
|
|
140
|
+
| ---------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
141
|
+
| Description | Work Item |
|
|
142
|
+
| Project | The Zoho job you select or zsync matches |
|
|
143
|
+
| Duration | Hours, rounded to the nearest minute |
|
|
144
|
+
| Start date | Work date in your configured time zone |
|
|
145
|
+
| Billable flag | Billing status |
|
|
146
|
+
| Entry ID, project, tags, timestamps, billing flag, workspace ID, and user ID | Readable metadata in Description, with a sync marker |
|
|
111
147
|
|
|
112
|
-
Entries belong to their local start date. A timer that crosses midnight is copied whole to that date. Entries longer than 24 hours or shorter than the duration that rounds to one minute must be corrected in Clockify first.
|
|
113
148
|
|
|
114
|
-
zsync creates duration-based logs.
|
|
149
|
+
Only completed entries are included. zsync creates duration-based logs. It does not create Zoho projects or jobs.
|
|
115
150
|
|
|
116
|
-
|
|
151
|
+
An entry belongs to the local date of its start time. If an entry crosses midnight, zsync copies the full duration to that start date. Entries longer than 24 hours or entries that round to less than one minute must be corrected in Clockify first.
|
|
117
152
|
|
|
118
|
-
|
|
153
|
+
## Run a sync again
|
|
119
154
|
|
|
120
|
-
|
|
155
|
+
zsync writes readable source metadata and a marker such as `[zsync-source:...]` in each Zoho log description. It uses this data to find the log that belongs to a Clockify entry. Keep the metadata and marker in the description.
|
|
121
156
|
|
|
122
|
-
|
|
157
|
+
If a Clockify entry changed, select its `[updated]` row. zsync then writes the current Clockify values to the matching Zoho log. A Zoho log that you entered by hand has no source metadata, so zsync does not treat it as a match. If you delete a synced Zoho log, its Clockify entry appears as new on the next run.
|
|
123
158
|
|
|
124
|
-
Before
|
|
159
|
+
Before each write, zsync checks both services again. It verifies the result after the write. A run can finish with both successful and failed entries. If a result is uncertain, inspect Zoho People before you retry it.
|
|
125
160
|
|
|
126
161
|
## Review deleted entries
|
|
127
162
|
|
|
128
|
-
Before
|
|
163
|
+
Before it shows the selection table, zsync checks synced Zoho logs in the selected date range. If the source entry no longer exists in Clockify, the Zoho log appears with `[deleted]` and is selected by default.
|
|
164
|
+
|
|
165
|
+
You can clear a deletion to keep the Zoho log. zsync checks each selected deletion and its Clockify source again before it deletes the log. It does not offer an entry that still exists in Clockify, even if the entry moved to another date. It also excludes manual, locked, and ambiguous Zoho logs.
|
|
166
|
+
|
|
167
|
+
An authentication or lookup error stops deletion review. zsync does not count that error as a deletion. Deletion review also runs when the selected period has no completed Clockify entries.
|
|
168
|
+
|
|
169
|
+
zsync applies creates and updates before deletions. A failed operation does not undo operations that already succeeded.
|
|
170
|
+
|
|
171
|
+
## Limits and safety
|
|
129
172
|
|
|
130
|
-
|
|
173
|
+
- Sync works from Clockify to Zoho People. It does not copy Zoho edits back to Clockify or submit or approve timesheets.
|
|
174
|
+
- Locked or approved Zoho logs, and multiple Zoho logs for one Clockify entry, are conflicts. Clear those entries or fix the logs before you continue.
|
|
175
|
+
- If you move a synced entry outside the selected date range, include the old Zoho log date in a later run when you clean it up.
|
|
176
|
+
- Run one sync at a time. zsync does not coordinate runs from different terminals or machines.
|
|
177
|
+
- zsync uses `api.clockify.me`. Clockify regional API endpoints are not supported.
|
|
178
|
+
- Zoho attendance rules, date rules, and job permissions can reject a write.
|
|
131
179
|
|
|
132
|
-
Logs need Clockify source metadata, an entry ID and a valid sync marker. Explicit workspace/user IDs must match your configuration. Deletion checks use the configured Clockify workspace. Use the same workspace for tracking and syncing. Manual logs and locked logs are excluded.
|
|
133
180
|
|
|
134
|
-
Deletion review also runs when the selected period has no completed Clockify entries. After confirmation, the app applies creations and updates, then deletions. A failure does not roll back successful operations. A deletion failure is reported per entry and produces a nonzero exit status.
|
|
135
181
|
|
|
136
|
-
##
|
|
182
|
+
## Saved files
|
|
137
183
|
|
|
138
|
-
|
|
139
|
-
- Locked or approved logs and multiple Zoho logs identifying the same Clockify entry are conflicts. Resolve them or deselect those entries before continuing.
|
|
140
|
-
- Lookup covers the selected entries' date span. If you move a previously synced entry to a date outside that span, reconcile its old Zoho log before syncing again.
|
|
141
|
-
- Run one sync at a time. There is no protection against simultaneous runs across terminals or machines.
|
|
142
|
-
- Clockify regional API endpoints are not supported. The app uses `api.clockify.me`.
|
|
143
|
-
- Zoho attendance, leave, date restrictions, and job permissions still apply and may cause a write to be rejected.
|
|
184
|
+
zsync stores authentication and job mappings on your computer. It stores them per account.
|
|
144
185
|
|
|
145
|
-
For your first real sync, select a few entries and check the resulting logs in Zoho.
|
|
146
186
|
|
|
147
|
-
|
|
187
|
+
| System | Default folder |
|
|
188
|
+
| ------- | ------------------------------------------------- |
|
|
189
|
+
| Linux | `$XDG_DATA_HOME/zsync`, or `~/.local/share/zsync` |
|
|
190
|
+
| macOS | `~/Library/Application Support/zsync` |
|
|
191
|
+
| Windows | `%APPDATA%/zsync`, with a local AppData fallback |
|
|
148
192
|
|
|
149
|
-
| Variable | Purpose | Default |
|
|
150
|
-
| -------------------- | -------------------------------------------------------------------------- | --------------------------------- |
|
|
151
|
-
| `ZOHO_REGION` | Zoho data center: `com`, `eu`, `in`, `au`, `cn`, `jp`, `ca`, `sa`, or `uk` | Saved region, otherwise `com` |
|
|
152
|
-
| `ZSYNC_TIMEZONE` | IANA timezone, such as `Asia/Kolkata` | System timezone |
|
|
153
|
-
| `ZOHO_DATE_FORMAT` | Date format used by your Zoho organization | `yyyy-MM-dd` |
|
|
154
|
-
| `ZSYNC_STATE_DIR` | Directory for saved authentication and job mappings | Platform-specific directory below |
|
|
155
|
-
| `ZOHO_REFRESH_TOKEN` | Override the saved refresh token | Saved token |
|
|
156
|
-
| `ZOHO_EMPLOYEE_ID` | Override the saved employee record ID, `ERECNO` | Saved employee ID |
|
|
157
193
|
|
|
158
|
-
|
|
194
|
+
The authentication file contains a refresh token and employee record ID. zsync creates it with owner-only permissions (`0600`). It does not save the Zoho client secret. Set `ZSYNC_STATE_DIR` to use another folder.
|
|
159
195
|
|
|
160
|
-
|
|
196
|
+
## Troubleshooting
|
|
197
|
+
|
|
198
|
+
- `Missing required environment variable`: set all five required variables in the current terminal.
|
|
199
|
+
- `Clockify API key does not belong to CLOCKIFY_USER_ID`: use the user ID that belongs to the API key.
|
|
200
|
+
- `No eligible Zoho jobs`: ask your Zoho People administrator to assign an active job to your employee record.
|
|
201
|
+
- `Port 8765 may be in use`: stop the other local process and run zsync again.
|
|
202
|
+
- `Zoho authorization expired or was revoked`: run `zsync --connect`.
|
|
161
203
|
|
|
162
|
-
Default storage locations:
|
|
163
204
|
|
|
164
|
-
- Linux: `$XDG_DATA_HOME/zsync`, or `~/.local/share/zsync`
|
|
165
|
-
- macOS: `~/Library/Application Support/zsync`
|
|
166
|
-
- Windows: `%APPDATA%/zsync`, with a local AppData fallback
|
|
167
205
|
|
|
168
206
|
## Development
|
|
169
207
|
|
|
170
|
-
Use Bun
|
|
208
|
+
The published package does not need Bun. Use Bun only when you run the source checkout.
|
|
171
209
|
|
|
172
210
|
```sh
|
|
211
|
+
git clone https://github.com/srafis/zoho-clockify-sync.git
|
|
212
|
+
cd zoho-clockify-sync
|
|
173
213
|
bun install
|
|
174
|
-
bun run dev --
|
|
175
|
-
bun run typecheck
|
|
176
|
-
bun test
|
|
177
|
-
bun run build
|
|
178
|
-
bun pm pack
|
|
214
|
+
bun run dev --demo
|
|
179
215
|
```
|
|
180
216
|
|
|
181
|
-
|
|
217
|
+
For a real source run, copy `.env.example` to `.env`, fill in the values, and run:
|
|
182
218
|
|
|
183
|
-
|
|
219
|
+
```sh
|
|
220
|
+
bun run dev
|
|
221
|
+
```
|
|
184
222
|
|
|
185
|
-
|
|
223
|
+
Run the checks with:
|
|
186
224
|
|
|
187
|
-
|
|
225
|
+
```sh
|
|
226
|
+
bun run typecheck
|
|
227
|
+
bun test
|
|
228
|
+
bun run build
|
|
229
|
+
bun pm pack
|
|
230
|
+
```
|
|
188
231
|
|
|
189
|
-
|
|
232
|
+
The build creates `dist/zsync.js`, a Node.js 22 or newer executable. Tests use fictional API responses and do not create real time logs.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Set up Clockify
|
|
2
|
+
|
|
3
|
+
zsync needs a Clockify API key, user ID, and workspace ID.
|
|
4
|
+
|
|
5
|
+
Use the same user, API key, and workspace together. zsync reads entries for that user only.
|
|
6
|
+
|
|
7
|
+
## Create an API key
|
|
8
|
+
|
|
9
|
+
1. Sign in to Clockify.
|
|
10
|
+
2. Open your account menu.
|
|
11
|
+
3. Select Preferences, then Advanced.
|
|
12
|
+
4. In the API Key section, select Generate.
|
|
13
|
+
5. Copy the key and store it in a safe place. Clockify does not show it again after you close the window.
|
|
14
|
+
|
|
15
|
+
See Clockify's [API and webhook settings](https://clockify.me/help/administration/api-webhook-settings) for the current menu names.
|
|
16
|
+
|
|
17
|
+
## Find your user ID
|
|
18
|
+
|
|
19
|
+
The user ID is different from the API key. The endpoint below returns the user for the API key:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
curl -sS -H "X-Api-Key: $CLOCKIFY_API_KEY" https://api.clockify.me/api/v1/user
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Use the `id` value in the response as `CLOCKIFY_USER_ID`. See Clockify's [user ID instructions](https://clockify.me/help/troubleshooting/how-to-find-userid-in-the-api) for other ways to find it.
|
|
26
|
+
|
|
27
|
+
## Find your workspace ID
|
|
28
|
+
|
|
29
|
+
Open the workspace in Clockify. Its URL contains `/workspaces/<workspace-id>`. Copy the value after `/workspaces/` and use it as `CLOCKIFY_WORKSPACE_ID`.
|
|
30
|
+
|
|
31
|
+
Use the workspace where you track the time. zsync uses the default Clockify API endpoint, `https://api.clockify.me/api/v1`. Clockify regional API endpoints are not supported.
|
|
32
|
+
|
|
33
|
+
## Keep the key safe
|
|
34
|
+
|
|
35
|
+
Do not commit the API key to a repository. If you delete the key in Clockify, zsync cannot access your entries until you create and configure a new one.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Set up Zoho People
|
|
2
|
+
|
|
3
|
+
zsync needs a Zoho OAuth client, Time Tracker API access, and a job assigned to your employee record.
|
|
4
|
+
|
|
5
|
+
## Create an OAuth client
|
|
6
|
+
|
|
7
|
+
1. Open the [Zoho People OAuth instructions](https://www.zoho.com/people/api/oauth-steps.html).
|
|
8
|
+
2. Open the Zoho API Console from that page.
|
|
9
|
+
3. Create a server-based application. Zoho may call this client type Web-based.
|
|
10
|
+
4. Choose the data center that contains your Zoho People account.
|
|
11
|
+
5. Register this redirect URI exactly:
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
http://localhost:8765/callback
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
6. Copy the client ID and client secret. Use them as `ZOHO_CLIENT_ID` and `ZOHO_CLIENT_SECRET`.
|
|
18
|
+
|
|
19
|
+
zsync opens a local callback on port 8765 during the first authorization. The redirect URI must match exactly, including the scheme, port, and path.
|
|
20
|
+
|
|
21
|
+
## Request the required scopes
|
|
22
|
+
|
|
23
|
+
zsync requests these scopes during authorization:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
ZOHOPEOPLE.timetracker.ALL,ZOHOPEOPLE.forms.READ,AaaServer.profile.READ
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`ZOHOPEOPLE.timetracker.ALL` lets zsync read and change time logs and list assigned jobs. The forms and profile scopes let it find your employee record from your email address.
|
|
30
|
+
|
|
31
|
+
See Zoho's [OAuth scopes](https://www.zoho.com/people/api/scopes.html) page for scope details.
|
|
32
|
+
|
|
33
|
+
## Check your Zoho access
|
|
34
|
+
|
|
35
|
+
Your Zoho People role must allow Time Tracker API access. Your employee record must have an eligible, assigned job. Ask your People administrator if zsync reports that no jobs are available.
|
|
36
|
+
|
|
37
|
+
If zsync cannot find your employee record by email, it asks for the numeric `ERECNO`. This is the employee record ID. It is different from the employee number shown in the People interface. You can also set it with `ZOHO_EMPLOYEE_ID`.
|
|
38
|
+
|
|
39
|
+
## Keep credentials safe
|
|
40
|
+
|
|
41
|
+
Do not commit the client ID, client secret, or refresh token to a repository. zsync saves the Zoho refresh token locally after authorization. It does not save the client secret.
|
package/package.json
CHANGED
|
@@ -12,14 +12,15 @@
|
|
|
12
12
|
"@js-temporal/polyfill": "^0.5.1",
|
|
13
13
|
"fast-string-width": "3.0.2"
|
|
14
14
|
},
|
|
15
|
-
"version": "0.1.
|
|
15
|
+
"version": "0.1.6",
|
|
16
16
|
"description": "Interactively sync Clockify entries to Zoho People",
|
|
17
17
|
"bin": {
|
|
18
18
|
"zsync": "dist/zsync.js"
|
|
19
19
|
},
|
|
20
20
|
"files": [
|
|
21
21
|
"dist/zsync.js",
|
|
22
|
-
"README.md"
|
|
22
|
+
"README.md",
|
|
23
|
+
"docs"
|
|
23
24
|
],
|
|
24
25
|
"engines": {
|
|
25
26
|
"node": ">=22"
|