snow-flow 8.31.25 → 8.31.27

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-flow",
3
- "version": "8.31.25",
3
+ "version": "8.31.27",
4
4
  "description": "ServiceNow development with SnowCode - 75+ LLM providers (Claude, GPT, Gemini, Llama, Mistral, DeepSeek, Groq, Ollama) • 393 Optimized Tools • 2 MCP Servers • Multi-agent orchestration • Use ANY AI coding assistant (ML tools moved to Enterprise)",
5
5
  "main": "dist/index.js",
6
6
  "type": "commonjs",
@@ -0,0 +1,224 @@
1
+ diff --git a/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts b/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
2
+ index ce6bfbd..3d09618 100644
3
+ --- a/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
4
+ +++ b/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
5
+ @@ -1074,6 +1074,39 @@ export const AuthLoginCommand = cmd({
6
+ // Silently skip enterprise MCP configuration errors
7
+ }
8
+
9
+ + // 🔐 SYNC CREDENTIALS TO PORTAL (if provided)
10
+ + if (authData && authData.token && jiraBaseUrl && jiraEmail && jiraApiToken) {
11
+ + try {
12
+ + prompts.log.message("")
13
+ + prompts.log.step("Syncing credentials to portal...")
14
+ +
15
+ + const syncResponse = await fetch(`${enterpriseUrl}/api/credentials/store`, {
16
+ + method: "POST",
17
+ + headers: {
18
+ + "Content-Type": "application/json",
19
+ + "Authorization": `Bearer ${authData.token}`
20
+ + },
21
+ + body: JSON.stringify({
22
+ + service: "jira",
23
+ + username: jiraEmail,
24
+ + apiToken: jiraApiToken,
25
+ + instanceUrl: jiraBaseUrl
26
+ + })
27
+ + })
28
+ +
29
+ + const syncResult = await syncResponse.json()
30
+ +
31
+ + if (syncResponse.ok && syncResult.success) {
32
+ + prompts.log.success("✓ Jira credentials synced to portal")
33
+ + } else {
34
+ + prompts.log.warn("⚠ Credentials saved locally but sync to portal failed")
35
+ + }
36
+ + } catch (syncError: any) {
37
+ + // Silently continue - credentials are still saved locally
38
+ + prompts.log.warn("⚠ Credentials saved locally (portal sync unavailable)")
39
+ + }
40
+ + }
41
+ +
42
+ prompts.log.message("")
43
+ prompts.log.success("Enterprise configuration saved")
44
+ prompts.log.info("Credentials saved to .env file")
45
+ @@ -2067,6 +2100,39 @@ export const AuthLoginCommand = cmd({
46
+ // Silently skip enterprise MCP configuration errors
47
+ }
48
+
49
+ + // 🔐 SYNC CREDENTIALS TO PORTAL (if provided)
50
+ + if (enterpriseAuthData && enterpriseAuthData.token && enterpriseJiraBaseUrl && enterpriseJiraEmail && enterpriseJiraApiToken) {
51
+ + try {
52
+ + prompts.log.message("")
53
+ + prompts.log.step("Syncing credentials to portal...")
54
+ +
55
+ + const syncResponse = await fetch(`${enterpriseServerUrl}/api/credentials/store`, {
56
+ + method: "POST",
57
+ + headers: {
58
+ + "Content-Type": "application/json",
59
+ + "Authorization": `Bearer ${enterpriseAuthData.token}`
60
+ + },
61
+ + body: JSON.stringify({
62
+ + service: "jira",
63
+ + username: enterpriseJiraEmail,
64
+ + apiToken: enterpriseJiraApiToken,
65
+ + instanceUrl: enterpriseJiraBaseUrl
66
+ + })
67
+ + })
68
+ +
69
+ + const syncResult = await syncResponse.json()
70
+ +
71
+ + if (syncResponse.ok && syncResult.success) {
72
+ + prompts.log.success("✓ Jira credentials synced to portal")
73
+ + } else {
74
+ + prompts.log.warn("⚠ Credentials saved locally but sync to portal failed")
75
+ + }
76
+ + } catch (syncError: any) {
77
+ + // Silently continue - credentials are still saved locally
78
+ + prompts.log.warn("⚠ Credentials saved locally (portal sync unavailable)")
79
+ + }
80
+ + }
81
+ +
82
+ prompts.log.message("")
83
+ prompts.log.success("Enterprise configuration saved")
84
+ prompts.log.info("Credentials saved to .env file")
85
+ @@ -2479,41 +2545,104 @@ export const AuthLoginCommand = cmd({
86
+ // Silently skip enterprise MCP configuration errors
87
+ }
88
+
89
+ - // Sync integration settings to enterprise backend
90
+ - try {
91
+ - const enterpriseApiUrl = enterpriseUrl || "https://portal.snow-flow.dev"
92
+ - await fetch(`${enterpriseApiUrl}/api/integrations`, {
93
+ - method: "POST",
94
+ - headers: {
95
+ - "Content-Type": "application/json",
96
+ - Authorization: `Bearer ${licenseKey}`,
97
+ - },
98
+ - body: JSON.stringify({
99
+ - jira: jiraBaseUrl
100
+ - ? {
101
+ - baseUrl: jiraBaseUrl,
102
+ - email: jiraEmail,
103
+ - // API token is NOT sent - kept local for security
104
+ - }
105
+ - : undefined,
106
+ - azure: azureOrg
107
+ - ? {
108
+ - organization: azureOrg,
109
+ - project: azureProject,
110
+ - // PAT is NOT sent - kept local for security
111
+ - }
112
+ - : undefined,
113
+ - confluence: confluenceUrl
114
+ - ? {
115
+ - baseUrl: confluenceUrl,
116
+ - email: confluenceEmail,
117
+ - // API token is NOT sent - kept local for security
118
+ - }
119
+ - : undefined,
120
+ - }),
121
+ - })
122
+ - } catch (error) {
123
+ - // Silently fail - integrations are still saved locally
124
+ + // 🔐 SYNC CREDENTIALS TO PORTAL (secure encrypted storage)
125
+ + // Note: Credentials are encrypted with AES-256-GCM in the portal database
126
+ + if (authData && authData.token) {
127
+ + try {
128
+ + const enterpriseApiUrl = enterpriseUrl || "https://portal.snow-flow.dev"
129
+ + prompts.log.message("")
130
+ + prompts.log.step("Syncing credentials to portal...")
131
+ +
132
+ + let syncCount = 0
133
+ +
134
+ + // Sync Jira credentials
135
+ + if (jiraBaseUrl && jiraEmail && jiraApiToken) {
136
+ + try {
137
+ + const jiraResponse = await fetch(`${enterpriseApiUrl}/api/credentials/store`, {
138
+ + method: "POST",
139
+ + headers: {
140
+ + "Content-Type": "application/json",
141
+ + "Authorization": `Bearer ${authData.token}`
142
+ + },
143
+ + body: JSON.stringify({
144
+ + service: "jira",
145
+ + username: jiraEmail,
146
+ + apiToken: jiraApiToken,
147
+ + instanceUrl: jiraBaseUrl
148
+ + })
149
+ + })
150
+ +
151
+ + const jiraResult = await jiraResponse.json()
152
+ + if (jiraResponse.ok && jiraResult.success) {
153
+ + prompts.log.success("✓ Jira credentials synced to portal")
154
+ + syncCount++
155
+ + }
156
+ + } catch (e) {
157
+ + // Continue with other services
158
+ + }
159
+ + }
160
+ +
161
+ + // Sync Azure DevOps credentials
162
+ + if (azureOrg && azurePat) {
163
+ + try {
164
+ + const azureResponse = await fetch(`${enterpriseApiUrl}/api/credentials/store`, {
165
+ + method: "POST",
166
+ + headers: {
167
+ + "Content-Type": "application/json",
168
+ + "Authorization": `Bearer ${authData.token}`
169
+ + },
170
+ + body: JSON.stringify({
171
+ + service: "azdo",
172
+ + username: azureOrg,
173
+ + apiToken: azurePat,
174
+ + instanceUrl: `https://dev.azure.com/${azureOrg}`
175
+ + })
176
+ + })
177
+ +
178
+ + const azureResult = await azureResponse.json()
179
+ + if (azureResponse.ok && azureResult.success) {
180
+ + prompts.log.success("✓ Azure DevOps credentials synced to portal")
181
+ + syncCount++
182
+ + }
183
+ + } catch (e) {
184
+ + // Continue with other services
185
+ + }
186
+ + }
187
+ +
188
+ + // Sync Confluence credentials
189
+ + if (confluenceUrl && confluenceEmail && confluenceApiToken) {
190
+ + try {
191
+ + const confluenceResponse = await fetch(`${enterpriseApiUrl}/api/credentials/store`, {
192
+ + method: "POST",
193
+ + headers: {
194
+ + "Content-Type": "application/json",
195
+ + "Authorization": `Bearer ${authData.token}`
196
+ + },
197
+ + body: JSON.stringify({
198
+ + service: "confluence",
199
+ + username: confluenceEmail,
200
+ + apiToken: confluenceApiToken,
201
+ + instanceUrl: confluenceUrl
202
+ + })
203
+ + })
204
+ +
205
+ + const confluenceResult = await confluenceResponse.json()
206
+ + if (confluenceResponse.ok && confluenceResult.success) {
207
+ + prompts.log.success("✓ Confluence credentials synced to portal")
208
+ + syncCount++
209
+ + }
210
+ + } catch (e) {
211
+ + // Continue
212
+ + }
213
+ + }
214
+ +
215
+ + if (syncCount === 0) {
216
+ + prompts.log.warn("⚠ Credentials saved locally (portal sync unavailable)")
217
+ + }
218
+ + } catch (error) {
219
+ + // Silently fail - integrations are still saved locally
220
+ + prompts.log.warn("⚠ Credentials saved locally (portal sync unavailable)")
221
+ + }
222
+ }
223
+
224
+ prompts.log.success("Enterprise configuration saved")
@@ -1,44 +0,0 @@
1
- diff --git a/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts b/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
2
- index ae91a87..81bdb1c 100644
3
- --- a/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
4
- +++ b/node_modules/@groeimetai/snow-code/src/cli/cmd/auth.ts
5
- @@ -1992,6 +1992,39 @@ export const AuthLoginCommand = cmd({
6
- // Silently skip enterprise MCP configuration errors
7
- }
8
-
9
- + // 🔐 SYNC CREDENTIALS TO PORTAL (if provided)
10
- + if (enterpriseAuthData && enterpriseAuthData.token && enterpriseJiraBaseUrl && enterpriseJiraEmail && enterpriseJiraApiToken) {
11
- + try {
12
- + prompts.log.message("")
13
- + prompts.log.step("Syncing credentials to portal...")
14
- +
15
- + const syncResponse = await fetch(`${enterpriseServerUrl}/api/credentials/store`, {
16
- + method: "POST",
17
- + headers: {
18
- + "Content-Type": "application/json",
19
- + "Authorization": `Bearer ${enterpriseAuthData.token}`
20
- + },
21
- + body: JSON.stringify({
22
- + service: "jira",
23
- + username: enterpriseJiraEmail,
24
- + apiToken: enterpriseJiraApiToken,
25
- + instanceUrl: enterpriseJiraBaseUrl
26
- + })
27
- + })
28
- +
29
- + const syncResult = await syncResponse.json()
30
- +
31
- + if (syncResponse.ok && syncResult.success) {
32
- + prompts.log.success("✓ Jira credentials synced to portal")
33
- + } else {
34
- + prompts.log.warn("⚠ Credentials saved locally but sync to portal failed")
35
- + }
36
- + } catch (syncError: any) {
37
- + // Silently continue - credentials are still saved locally
38
- + prompts.log.warn("⚠ Credentials saved locally (portal sync unavailable)")
39
- + }
40
- + }
41
- +
42
- prompts.log.message("")
43
- prompts.log.success("Enterprise configuration saved")
44
- prompts.log.info("Credentials saved to .env file")