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.
|
|
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")
|