snow-flow 10.0.1-dev.474 → 10.0.1-dev.475

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
  "$schema": "https://json.schemastore.org/package.json",
3
- "version": "10.0.1-dev.474",
3
+ "version": "10.0.1-dev.475",
4
4
  "name": "snow-flow",
5
5
  "description": "Snow-Flow - ServiceNow Multi-Agent Development Framework powered by AI",
6
6
  "license": "Elastic-2.0",
@@ -1204,45 +1204,57 @@ async function getFlowTriggerInfo(
1204
1204
  debug.error = e.message;
1205
1205
  }
1206
1206
 
1207
- // Fallback: if version payload didn't have trigger, try reading from GraphQL flow state
1207
+ // Fallback 1: no-op GraphQL mutation to read current flow state (same API as our INSERT/UPDATE)
1208
+ // Sending just flowId with no changes returns the current state including trigger instances
1208
1209
  if (!triggerName || !table) {
1209
- debug.fallback_graphql = 'attempting';
1210
+ debug.fallback_noop_mutation = 'attempting';
1210
1211
  try {
1211
- var gqlQuery = 'query { global { snFlowDesigner { designTimeFlow(sysId: "' + flowId + '") { triggerInstances { name type inputs { name value { value } } } __typename } __typename } __typename } }';
1212
- var gqlResp = await client.post('/api/now/graphql', { variables: {}, query: gqlQuery });
1213
- var dtFlow = gqlResp.data?.data?.global?.snFlowDesigner?.designTimeFlow;
1214
- var gqlTriggers = dtFlow?.triggerInstances || [];
1215
- debug.fallback_graphql_triggers = gqlTriggers.length;
1216
- if (gqlTriggers.length > 0) {
1217
- var gqlTrig = gqlTriggers[0];
1218
- debug.fallback_graphql_trigger = { name: gqlTrig.name, type: gqlTrig.type, inputCount: gqlTrig.inputs?.length };
1219
- if (!triggerName && gqlTrig.name) triggerName = gqlTrig.name;
1220
- if (!table && gqlTrig.inputs) {
1221
- for (var gi = 0; gi < gqlTrig.inputs.length; gi++) {
1222
- if (gqlTrig.inputs[gi].name === 'table') {
1223
- table = gqlTrig.inputs[gi].value?.value || '';
1212
+ var noopMutation = 'mutation { global { snFlowDesigner { flow(flowPatch: {flowId: "' + flowId + '"}) { id triggerInstances { name type inputs { name value { value } } __typename } __typename } __typename } __typename } }';
1213
+ var noopResp = await client.post('/api/now/graphql', { variables: {}, query: noopMutation });
1214
+ var noopFlow = noopResp.data?.data?.global?.snFlowDesigner?.flow;
1215
+ debug.fallback_noop_response_keys = noopFlow ? Object.keys(noopFlow) : 'null';
1216
+ var noopTriggers = noopFlow?.triggerInstances || [];
1217
+ debug.fallback_noop_triggers = Array.isArray(noopTriggers) ? noopTriggers.length : noopTriggers;
1218
+ if (Array.isArray(noopTriggers) && noopTriggers.length > 0) {
1219
+ var nt = noopTriggers[0];
1220
+ debug.fallback_noop_trigger = { name: nt.name, type: nt.type, inputCount: nt.inputs?.length };
1221
+ if (!triggerName && nt.name) triggerName = nt.name;
1222
+ if (!table && nt.inputs) {
1223
+ for (var ni = 0; ni < nt.inputs.length; ni++) {
1224
+ if (nt.inputs[ni].name === 'table') {
1225
+ table = nt.inputs[ni].value?.value || '';
1224
1226
  break;
1225
1227
  }
1226
1228
  }
1227
1229
  }
1228
1230
  }
1229
- } catch (gqlErr: any) {
1230
- debug.fallback_graphql = 'error: ' + gqlErr.message;
1231
+ } catch (noopErr: any) {
1232
+ debug.fallback_noop_mutation = 'error: ' + noopErr.message;
1231
1233
  }
1232
1234
  }
1233
1235
 
1234
- // Fallback 2: look up trigger definition that belongs to this flow
1235
- if (!triggerName) {
1236
- debug.fallback_trigdef = 'attempting';
1236
+ // Fallback 2: query sys_hub_flow for table + trigger definition for name
1237
+ if (!triggerName || !table) {
1238
+ debug.fallback_flow_table = 'attempting';
1237
1239
  try {
1238
- // Query sys_hub_trigger_type_definition to find triggers available for this flow
1239
- // The trigger name in the definition matches the data pill prefix
1240
- var trigResp = await client.get('/api/now/table/sys_hub_flow', {
1241
- params: { sysparm_query: 'sys_id=' + flowId, sysparm_fields: 'sys_id,name,table', sysparm_limit: 1 }
1240
+ var flowResp = await client.get('/api/now/table/sys_hub_flow', {
1241
+ params: { sysparm_query: 'sys_id=' + flowId, sysparm_fields: 'sys_id,name,table,trigger_type', sysparm_limit: 1 }
1242
1242
  });
1243
- var flowRec = trigResp.data.result?.[0];
1244
- debug.fallback_flow_record = { table: flowRec?.table };
1245
- if (flowRec?.table && !table) table = str(flowRec.table);
1243
+ var flowRec = flowResp.data.result?.[0];
1244
+ debug.fallback_flow_record = { table: str(flowRec?.table), trigger_type: str(flowRec?.trigger_type) };
1245
+ if (!table && flowRec?.table) table = str(flowRec.table);
1246
+ // Try to resolve trigger name from trigger_type reference
1247
+ var trigTypeId = str(flowRec?.trigger_type);
1248
+ if (!triggerName && trigTypeId) {
1249
+ try {
1250
+ var trigDefResp = await client.get('/api/now/table/sys_hub_trigger_definition', {
1251
+ params: { sysparm_query: 'sys_id=' + trigTypeId, sysparm_fields: 'name,type', sysparm_limit: 1 }
1252
+ });
1253
+ var trigDef = trigDefResp.data.result?.[0];
1254
+ if (trigDef?.name) triggerName = str(trigDef.name);
1255
+ debug.fallback_trigger_def = { name: str(trigDef?.name), type: str(trigDef?.type) };
1256
+ } catch (_) {}
1257
+ }
1246
1258
  } catch (_) {}
1247
1259
  }
1248
1260