@nordsym/apiclaw 1.5.18 → 1.6.0

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.
Files changed (141) hide show
  1. package/CODEBASE.md +42 -0
  2. package/CONCEPT.md +9 -0
  3. package/DASHBOARD_FIX.md +9 -0
  4. package/EARN-CREDITS-SPEC.md +9 -0
  5. package/HIVR-INTEGRATION.md +9 -0
  6. package/HTTP-API.md +9 -0
  7. package/PRD-ANALYTICS-AGENTS-TEAMS.md +9 -0
  8. package/PRD-API-CHAINING.md +9 -0
  9. package/PRD-HARDEN-SHELL.md +9 -0
  10. package/PRD-LOGS-SUBAGENTS-V2.md +9 -0
  11. package/VISION.md +9 -0
  12. package/{AGENTS.md → apiclaw-AGENTS.md} +9 -0
  13. package/{CHANGELOG.md → apiclaw-CHANGELOG.md} +31 -0
  14. package/{CONTRIBUTING.md → apiclaw-CONTRIBUTING.md} +9 -0
  15. package/{HEARTBEAT.md → apiclaw-HEARTBEAT.md} +9 -0
  16. package/{IDENTITY.md → apiclaw-IDENTITY.md} +9 -0
  17. package/{README.md → apiclaw-README.md} +9 -0
  18. package/{SOUL.md → apiclaw-SOUL.md} +9 -0
  19. package/{TOOLS.md → apiclaw-TOOLS.md} +9 -0
  20. package/{USER.md → apiclaw-USER.md} +9 -0
  21. package/convex/_generated/api.d.ts +2 -0
  22. package/convex/{README.md → apiclaw-convex-README.md} +9 -0
  23. package/convex/http.ts +315 -0
  24. package/convex/seedPratham.ts +161 -0
  25. package/dist/credentials.d.ts.map +1 -1
  26. package/dist/credentials.js +136 -2
  27. package/dist/credentials.js.map +1 -1
  28. package/dist/execute.d.ts.map +1 -1
  29. package/dist/execute.js +289 -1
  30. package/dist/execute.js.map +1 -1
  31. package/docs/PRD-BILLING.md +9 -0
  32. package/docs/PRD-EARN-SYSTEM.md +9 -0
  33. package/docs/PRD-MCP-AUTO-SETUP.md +9 -0
  34. package/docs/PRD-ORGANIC-DISTRIBUTION.md +9 -0
  35. package/docs/PRD-agent-first-billing.md +9 -0
  36. package/docs/PRD-customer-key-passthrough.md +9 -0
  37. package/docs/PRD-final-polish.md +9 -0
  38. package/docs/PRD-mobile-responsive.md +9 -0
  39. package/docs/PRD-navigation-expansion.md +9 -0
  40. package/docs/PRD-stripe-billing.md +9 -0
  41. package/docs/PRD-workspace-cleanup.md +9 -0
  42. package/docs/PRD-workspace-fixes.md +9 -0
  43. package/docs/SUBAGENT-NAMING.md +9 -0
  44. package/docs/enterprise-deployment.md +6 -0
  45. package/email-templates/{README.md → email-templates-README.md} +9 -0
  46. package/landing/DESIGN.md +9 -0
  47. package/package.json +2 -2
  48. package/scripts/SYMBOT-FIX.md +9 -0
  49. package/src/credentials.ts +150 -2
  50. package/src/execute.ts +306 -1
  51. package/test-legacy-apis.sh +51 -0
  52. package/convex/adminActivate.d.ts +0 -3
  53. package/convex/adminActivate.js +0 -47
  54. package/convex/adminActivate.js.map +0 -1
  55. package/convex/adminStats.d.ts +0 -3
  56. package/convex/adminStats.js +0 -42
  57. package/convex/adminStats.js.map +0 -1
  58. package/convex/agents.d.ts +0 -54
  59. package/convex/agents.js +0 -499
  60. package/convex/agents.js.map +0 -1
  61. package/convex/analytics.d.ts +0 -5
  62. package/convex/analytics.js +0 -166
  63. package/convex/analytics.js.map +0 -1
  64. package/convex/billing.d.ts +0 -88
  65. package/convex/billing.js +0 -655
  66. package/convex/billing.js.map +0 -1
  67. package/convex/capabilities.d.ts +0 -9
  68. package/convex/capabilities.js +0 -145
  69. package/convex/capabilities.js.map +0 -1
  70. package/convex/chains.d.ts +0 -67
  71. package/convex/chains.js +0 -1042
  72. package/convex/chains.js.map +0 -1
  73. package/convex/credits.d.ts +0 -25
  74. package/convex/credits.js +0 -186
  75. package/convex/credits.js.map +0 -1
  76. package/convex/crons.d.ts +0 -3
  77. package/convex/crons.js +0 -17
  78. package/convex/crons.js.map +0 -1
  79. package/convex/directCall.d.ts +0 -72
  80. package/convex/directCall.js +0 -627
  81. package/convex/directCall.js.map +0 -1
  82. package/convex/earnProgress.d.ts +0 -58
  83. package/convex/earnProgress.js +0 -649
  84. package/convex/earnProgress.js.map +0 -1
  85. package/convex/email.d.ts +0 -14
  86. package/convex/email.js +0 -300
  87. package/convex/email.js.map +0 -1
  88. package/convex/feedback.d.ts +0 -7
  89. package/convex/feedback.js +0 -227
  90. package/convex/feedback.js.map +0 -1
  91. package/convex/http.d.ts +0 -3
  92. package/convex/http.js +0 -1106
  93. package/convex/http.js.map +0 -1
  94. package/convex/http.ts.bak +0 -934
  95. package/convex/logs.d.ts +0 -38
  96. package/convex/logs.js +0 -487
  97. package/convex/logs.js.map +0 -1
  98. package/convex/mou.d.ts +0 -6
  99. package/convex/mou.js +0 -82
  100. package/convex/mou.js.map +0 -1
  101. package/convex/providerKeys.d.ts +0 -31
  102. package/convex/providerKeys.js +0 -257
  103. package/convex/providerKeys.js.map +0 -1
  104. package/convex/providers.d.ts +0 -29
  105. package/convex/providers.js +0 -756
  106. package/convex/providers.js.map +0 -1
  107. package/convex/purchases.d.ts +0 -7
  108. package/convex/purchases.js +0 -157
  109. package/convex/purchases.js.map +0 -1
  110. package/convex/ratelimit.d.ts +0 -4
  111. package/convex/ratelimit.js +0 -91
  112. package/convex/ratelimit.js.map +0 -1
  113. package/convex/searchLogs.d.ts +0 -4
  114. package/convex/searchLogs.js +0 -129
  115. package/convex/searchLogs.js.map +0 -1
  116. package/convex/spendAlerts.d.ts +0 -36
  117. package/convex/spendAlerts.js +0 -380
  118. package/convex/spendAlerts.js.map +0 -1
  119. package/convex/stripeActions.d.ts +0 -19
  120. package/convex/stripeActions.js +0 -411
  121. package/convex/stripeActions.js.map +0 -1
  122. package/convex/teams.d.ts +0 -21
  123. package/convex/teams.js +0 -215
  124. package/convex/teams.js.map +0 -1
  125. package/convex/telemetry.d.ts +0 -4
  126. package/convex/telemetry.js +0 -74
  127. package/convex/telemetry.js.map +0 -1
  128. package/convex/usage.d.ts +0 -27
  129. package/convex/usage.js +0 -229
  130. package/convex/usage.js.map +0 -1
  131. package/convex/waitlist.d.ts +0 -4
  132. package/convex/waitlist.js +0 -49
  133. package/convex/waitlist.js.map +0 -1
  134. package/convex/webhooks.d.ts +0 -12
  135. package/convex/webhooks.js +0 -410
  136. package/convex/webhooks.js.map +0 -1
  137. package/convex/workspaces.d.ts +0 -29
  138. package/convex/workspaces.js +0 -880
  139. package/convex/workspaces.js.map +0 -1
  140. package/dist/registry/apis.json.bak +0 -248811
  141. package/src/registry/apis.json.bak +0 -248811
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiLD,UAAU,YAAY;IACpB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAyLD;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,YAAY,CA8Dd;AAw5CD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/D;AAGD,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASnF;AAGD,wBAAgB,qBAAqB,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAKjF;AAGD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAkGxB"}
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../src/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,SAAS,EACT,cAAc,EACd,SAAS,EACT,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,aAAa;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiLD,UAAU,YAAY;IACpB,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAsND;;GAEG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,YAAY,CA8Dd;AA4qDD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/D;AAGD,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASnF;AAGD,wBAAgB,qBAAqB,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CAKjF;AAGD,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,CAAC,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAkGxB"}
package/dist/execute.js CHANGED
@@ -321,6 +321,7 @@ const apiEndpoints = {
321
321
  run_shell: { url: 'https://api.e2b.dev/v1/sandboxes', method: 'POST' },
322
322
  },
323
323
  apilayer: {
324
+ // Unified APILayer APIs (apilayer.com)
324
325
  exchange_rates: { url: 'https://api.apilayer.com/exchangerates_data/latest', method: 'GET' },
325
326
  market_data: { url: 'http://api.marketstack.com/v1/eod', method: 'GET' },
326
327
  aviation: { url: 'http://api.aviationstack.com/v1/flights', method: 'GET' },
@@ -335,6 +336,29 @@ const apiEndpoints = {
335
336
  image_crop: { url: 'https://api.apilayer.com/smart_crop/url', method: 'POST' },
336
337
  skills: { url: 'https://api.promptapi.com/skills', method: 'GET' },
337
338
  form_submit: { url: 'https://api.apilayer.com/form_api/{endpoint}', method: 'POST' },
339
+ // Legacy APIs (separate domains, each with own key)
340
+ // FINANCE
341
+ fixer_convert: { url: 'http://data.fixer.io/api/convert', method: 'GET' },
342
+ fixer_latest: { url: 'http://data.fixer.io/api/latest', method: 'GET' },
343
+ currencylayer_live: { url: 'http://api.currencylayer.com/live', method: 'GET' },
344
+ currencylayer_convert: { url: 'http://api.currencylayer.com/convert', method: 'GET' },
345
+ coinlayer_live: { url: 'http://api.coinlayer.com/live', method: 'GET' },
346
+ exchangeratehost_latest: { url: 'https://api.exchangerate.host/latest', method: 'GET' },
347
+ // GEOLOCATION
348
+ weatherstack_current: { url: 'http://api.weatherstack.com/current', method: 'GET' },
349
+ weatherstack_forecast: { url: 'http://api.weatherstack.com/forecast', method: 'GET' },
350
+ ipstack_lookup: { url: 'http://api.ipstack.com/{ip}', method: 'GET' },
351
+ ipapi_lookup: { url: 'https://ipapi.co/{ip}/json/', method: 'GET' },
352
+ positionstack_forward: { url: 'http://api.positionstack.com/v1/forward', method: 'GET' },
353
+ positionstack_reverse: { url: 'http://api.positionstack.com/v1/reverse', method: 'GET' },
354
+ languagelayer_detect: { url: 'https://api.languagelayer.com/detect', method: 'POST' },
355
+ // SCRAPING
356
+ scrapestack_scrape: { url: 'http://api.scrapestack.com/scrape', method: 'GET' },
357
+ serpstack_search: { url: 'http://api.serpstack.com/search', method: 'GET' },
358
+ // NEWS
359
+ mediastack_news: { url: 'http://api.mediastack.com/v1/news', method: 'GET' },
360
+ // DEVTOOLS
361
+ userstack_detect: { url: 'http://api.userstack.com/detect', method: 'GET' },
338
362
  },
339
363
  };
340
364
  /**
@@ -1621,12 +1645,276 @@ const handlers = {
1621
1645
  'Content-Type': 'application/json',
1622
1646
  },
1623
1647
  body: JSON.stringify(formData || {}),
1624
- }, { provider: 'apilayer', action: 'form_submit' });
1648
+ }, { provider: 'apilayer', 'action': 'form_submit' });
1625
1649
  const data = await response.json();
1626
1650
  if (!response.ok)
1627
1651
  return createErrorResult('apilayer', 'form_submit', 'Request failed', statusToErrorCode(response.status));
1628
1652
  return { success: true, provider: 'apilayer', action: 'form_submit', data };
1629
1653
  },
1654
+ // ========== LEGACY APIs (separate domains, each with own key) ==========
1655
+ // FINANCE
1656
+ fixer_convert: async (params, creds) => {
1657
+ const key = creds.FIXER_API_KEY || creds.api_key;
1658
+ const { from, to, amount, date } = params;
1659
+ if (!from || !to || !amount)
1660
+ return createErrorResult('apilayer', 'fixer_convert', 'Missing required params: from, to, amount', ERROR_CODES.INVALID_PARAMS);
1661
+ const url = new URL('http://data.fixer.io/api/convert');
1662
+ url.searchParams.set('access_key', key);
1663
+ url.searchParams.set('from', from);
1664
+ url.searchParams.set('to', to);
1665
+ url.searchParams.set('amount', amount.toString());
1666
+ if (date)
1667
+ url.searchParams.set('date', date);
1668
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'fixer_convert' });
1669
+ const data = await response.json();
1670
+ if (!response.ok)
1671
+ return createErrorResult('apilayer', 'fixer_convert', 'Request failed', statusToErrorCode(response.status));
1672
+ return { success: true, provider: 'apilayer', action: 'fixer_convert', data };
1673
+ },
1674
+ fixer_latest: async (params, creds) => {
1675
+ const key = creds.FIXER_API_KEY || creds.api_key;
1676
+ const { base = 'EUR', symbols } = params;
1677
+ const url = new URL('http://data.fixer.io/api/latest');
1678
+ url.searchParams.set('access_key', key);
1679
+ url.searchParams.set('base', base);
1680
+ if (symbols)
1681
+ url.searchParams.set('symbols', symbols);
1682
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'fixer_latest' });
1683
+ const data = await response.json();
1684
+ if (!response.ok)
1685
+ return createErrorResult('apilayer', 'fixer_latest', 'Request failed', statusToErrorCode(response.status));
1686
+ return { success: true, provider: 'apilayer', action: 'fixer_latest', data };
1687
+ },
1688
+ currencylayer_live: async (params, creds) => {
1689
+ const key = creds.CURRENCYLAYER_API_KEY || creds.api_key;
1690
+ const { currencies, source = 'USD' } = params;
1691
+ const url = new URL('http://api.currencylayer.com/live');
1692
+ url.searchParams.set('access_key', key);
1693
+ url.searchParams.set('source', source);
1694
+ if (currencies)
1695
+ url.searchParams.set('currencies', currencies);
1696
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'currencylayer_live' });
1697
+ const data = await response.json();
1698
+ if (!response.ok)
1699
+ return createErrorResult('apilayer', 'currencylayer_live', 'Request failed', statusToErrorCode(response.status));
1700
+ return { success: true, provider: 'apilayer', action: 'currencylayer_live', data };
1701
+ },
1702
+ currencylayer_convert: async (params, creds) => {
1703
+ const key = creds.CURRENCYLAYER_API_KEY || creds.api_key;
1704
+ const { from, to, amount, date } = params;
1705
+ if (!from || !to || !amount)
1706
+ return createErrorResult('apilayer', 'currencylayer_convert', 'Missing required params: from, to, amount', ERROR_CODES.INVALID_PARAMS);
1707
+ const url = new URL('http://api.currencylayer.com/convert');
1708
+ url.searchParams.set('access_key', key);
1709
+ url.searchParams.set('from', from);
1710
+ url.searchParams.set('to', to);
1711
+ url.searchParams.set('amount', amount.toString());
1712
+ if (date)
1713
+ url.searchParams.set('date', date);
1714
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'currencylayer_convert' });
1715
+ const data = await response.json();
1716
+ if (!response.ok)
1717
+ return createErrorResult('apilayer', 'currencylayer_convert', 'Request failed', statusToErrorCode(response.status));
1718
+ return { success: true, provider: 'apilayer', action: 'currencylayer_convert', data };
1719
+ },
1720
+ coinlayer_live: async (params, creds) => {
1721
+ const key = creds.COINLAYER_API_KEY || creds.api_key;
1722
+ const { symbols, target = 'USD' } = params;
1723
+ const url = new URL('http://api.coinlayer.com/live');
1724
+ url.searchParams.set('access_key', key);
1725
+ url.searchParams.set('target', target);
1726
+ if (symbols)
1727
+ url.searchParams.set('symbols', symbols);
1728
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'coinlayer_live' });
1729
+ const data = await response.json();
1730
+ if (!response.ok)
1731
+ return createErrorResult('apilayer', 'coinlayer_live', 'Request failed', statusToErrorCode(response.status));
1732
+ return { success: true, provider: 'apilayer', action: 'coinlayer_live', data };
1733
+ },
1734
+ exchangeratehost_latest: async (params, creds) => {
1735
+ const key = creds.EXCHANGERATEHOST_API_KEY || creds.api_key;
1736
+ const { base = 'EUR', symbols } = params;
1737
+ const url = new URL('https://api.exchangerate.host/latest');
1738
+ url.searchParams.set('access_key', key);
1739
+ url.searchParams.set('base', base);
1740
+ if (symbols)
1741
+ url.searchParams.set('symbols', symbols);
1742
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'exchangeratehost_latest' });
1743
+ const data = await response.json();
1744
+ if (!response.ok)
1745
+ return createErrorResult('apilayer', 'exchangeratehost_latest', 'Request failed', statusToErrorCode(response.status));
1746
+ return { success: true, provider: 'apilayer', action: 'exchangeratehost_latest', data };
1747
+ },
1748
+ // GEOLOCATION
1749
+ weatherstack_current: async (params, creds) => {
1750
+ const key = creds.WEATHERSTACK_API_KEY || creds.api_key;
1751
+ const { query, units = 'm' } = params;
1752
+ if (!query)
1753
+ return createErrorResult('apilayer', 'weatherstack_current', 'Missing required param: query (city name or coordinates)', ERROR_CODES.INVALID_PARAMS);
1754
+ const url = new URL('http://api.weatherstack.com/current');
1755
+ url.searchParams.set('access_key', key);
1756
+ url.searchParams.set('query', query);
1757
+ url.searchParams.set('units', units);
1758
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'weatherstack_current' });
1759
+ const data = await response.json();
1760
+ if (!response.ok)
1761
+ return createErrorResult('apilayer', 'weatherstack_current', 'Request failed', statusToErrorCode(response.status));
1762
+ return { success: true, provider: 'apilayer', action: 'weatherstack_current', data };
1763
+ },
1764
+ weatherstack_forecast: async (params, creds) => {
1765
+ const key = creds.WEATHERSTACK_API_KEY || creds.api_key;
1766
+ const { query, forecast_days = 1, units = 'm' } = params;
1767
+ if (!query)
1768
+ return createErrorResult('apilayer', 'weatherstack_forecast', 'Missing required param: query', ERROR_CODES.INVALID_PARAMS);
1769
+ const url = new URL('http://api.weatherstack.com/forecast');
1770
+ url.searchParams.set('access_key', key);
1771
+ url.searchParams.set('query', query);
1772
+ url.searchParams.set('forecast_days', forecast_days.toString());
1773
+ url.searchParams.set('units', units);
1774
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'weatherstack_forecast' });
1775
+ const data = await response.json();
1776
+ if (!response.ok)
1777
+ return createErrorResult('apilayer', 'weatherstack_forecast', 'Request failed', statusToErrorCode(response.status));
1778
+ return { success: true, provider: 'apilayer', action: 'weatherstack_forecast', data };
1779
+ },
1780
+ ipstack_lookup: async (params, creds) => {
1781
+ const key = creds.IPSTACK_API_KEY || creds.api_key;
1782
+ const { ip } = params;
1783
+ if (!ip)
1784
+ return createErrorResult('apilayer', 'ipstack_lookup', 'Missing required param: ip', ERROR_CODES.INVALID_PARAMS);
1785
+ const url = new URL(`http://api.ipstack.com/${ip}`);
1786
+ url.searchParams.set('access_key', key);
1787
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'ipstack_lookup' });
1788
+ const data = await response.json();
1789
+ if (!response.ok)
1790
+ return createErrorResult('apilayer', 'ipstack_lookup', 'Request failed', statusToErrorCode(response.status));
1791
+ return { success: true, provider: 'apilayer', action: 'ipstack_lookup', data };
1792
+ },
1793
+ ipapi_lookup: async (params, creds) => {
1794
+ const key = creds.IPAPI_API_KEY || creds.api_key;
1795
+ const { ip } = params;
1796
+ if (!ip)
1797
+ return createErrorResult('apilayer', 'ipapi_lookup', 'Missing required param: ip', ERROR_CODES.INVALID_PARAMS);
1798
+ const url = `https://ipapi.co/${ip}/json/?key=${key}`;
1799
+ const response = await fetchWithRetry(url, {}, { provider: 'apilayer', action: 'ipapi_lookup' });
1800
+ const data = await response.json();
1801
+ if (!response.ok)
1802
+ return createErrorResult('apilayer', 'ipapi_lookup', 'Request failed', statusToErrorCode(response.status));
1803
+ return { success: true, provider: 'apilayer', action: 'ipapi_lookup', data };
1804
+ },
1805
+ positionstack_forward: async (params, creds) => {
1806
+ const key = creds.POSITIONSTACK_API_KEY || creds.api_key;
1807
+ const { query, limit = 1 } = params;
1808
+ if (!query)
1809
+ return createErrorResult('apilayer', 'positionstack_forward', 'Missing required param: query (address)', ERROR_CODES.INVALID_PARAMS);
1810
+ const url = new URL('http://api.positionstack.com/v1/forward');
1811
+ url.searchParams.set('access_key', key);
1812
+ url.searchParams.set('query', query);
1813
+ url.searchParams.set('limit', limit.toString());
1814
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'positionstack_forward' });
1815
+ const data = await response.json();
1816
+ if (!response.ok)
1817
+ return createErrorResult('apilayer', 'positionstack_forward', 'Request failed', statusToErrorCode(response.status));
1818
+ return { success: true, provider: 'apilayer', action: 'positionstack_forward', data };
1819
+ },
1820
+ positionstack_reverse: async (params, creds) => {
1821
+ const key = creds.POSITIONSTACK_API_KEY || creds.api_key;
1822
+ const { query, limit = 1 } = params;
1823
+ if (!query)
1824
+ return createErrorResult('apilayer', 'positionstack_reverse', 'Missing required param: query (lat,lng)', ERROR_CODES.INVALID_PARAMS);
1825
+ const url = new URL('http://api.positionstack.com/v1/reverse');
1826
+ url.searchParams.set('access_key', key);
1827
+ url.searchParams.set('query', query);
1828
+ url.searchParams.set('limit', limit.toString());
1829
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'positionstack_reverse' });
1830
+ const data = await response.json();
1831
+ if (!response.ok)
1832
+ return createErrorResult('apilayer', 'positionstack_reverse', 'Request failed', statusToErrorCode(response.status));
1833
+ return { success: true, provider: 'apilayer', action: 'positionstack_reverse', data };
1834
+ },
1835
+ languagelayer_detect: async (params, creds) => {
1836
+ const key = creds.LANGUAGELAYER_API_KEY || creds.api_key;
1837
+ const { query } = params;
1838
+ if (!query)
1839
+ return createErrorResult('apilayer', 'languagelayer_detect', 'Missing required param: query (text to analyze)', ERROR_CODES.INVALID_PARAMS);
1840
+ const response = await fetchWithRetry('https://api.languagelayer.com/detect', {
1841
+ method: 'POST',
1842
+ headers: {
1843
+ 'Content-Type': 'application/x-www-form-urlencoded',
1844
+ },
1845
+ body: new URLSearchParams({ access_key: key, query }).toString(),
1846
+ }, { provider: 'apilayer', action: 'languagelayer_detect' });
1847
+ const data = await response.json();
1848
+ if (!response.ok)
1849
+ return createErrorResult('apilayer', 'languagelayer_detect', 'Request failed', statusToErrorCode(response.status));
1850
+ return { success: true, provider: 'apilayer', action: 'languagelayer_detect', data };
1851
+ },
1852
+ // SCRAPING
1853
+ scrapestack_scrape: async (params, creds) => {
1854
+ const key = creds.SCRAPESTACK_API_KEY || creds.api_key;
1855
+ const { url: targetUrl } = params;
1856
+ if (!targetUrl)
1857
+ return createErrorResult('apilayer', 'scrapestack_scrape', 'Missing required param: url', ERROR_CODES.INVALID_PARAMS);
1858
+ const url = new URL('http://api.scrapestack.com/scrape');
1859
+ url.searchParams.set('access_key', key);
1860
+ url.searchParams.set('url', targetUrl);
1861
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'scrapestack_scrape' });
1862
+ const data = await response.text();
1863
+ if (!response.ok)
1864
+ return createErrorResult('apilayer', 'scrapestack_scrape', 'Request failed', statusToErrorCode(response.status));
1865
+ return { success: true, provider: 'apilayer', action: 'scrapestack_scrape', data: { html: data } };
1866
+ },
1867
+ serpstack_search: async (params, creds) => {
1868
+ const key = creds.SERPSTACK_API_KEY || creds.api_key;
1869
+ const { query, num = 10 } = params;
1870
+ if (!query)
1871
+ return createErrorResult('apilayer', 'serpstack_search', 'Missing required param: query', ERROR_CODES.INVALID_PARAMS);
1872
+ const url = new URL('http://api.serpstack.com/search');
1873
+ url.searchParams.set('access_key', key);
1874
+ url.searchParams.set('query', query);
1875
+ url.searchParams.set('num', num.toString());
1876
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'serpstack_search' });
1877
+ const data = await response.json();
1878
+ if (!response.ok)
1879
+ return createErrorResult('apilayer', 'serpstack_search', 'Request failed', statusToErrorCode(response.status));
1880
+ return { success: true, provider: 'apilayer', action: 'serpstack_search', data };
1881
+ },
1882
+ // NEWS
1883
+ mediastack_news: async (params, creds) => {
1884
+ const key = creds.MEDIASTACK_API_KEY || creds.api_key;
1885
+ const { keywords, categories, countries, languages, limit = 25 } = params;
1886
+ const url = new URL('http://api.mediastack.com/v1/news');
1887
+ url.searchParams.set('access_key', key);
1888
+ if (keywords)
1889
+ url.searchParams.set('keywords', keywords);
1890
+ if (categories)
1891
+ url.searchParams.set('categories', categories);
1892
+ if (countries)
1893
+ url.searchParams.set('countries', countries);
1894
+ if (languages)
1895
+ url.searchParams.set('languages', languages);
1896
+ url.searchParams.set('limit', limit.toString());
1897
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'mediastack_news' });
1898
+ const data = await response.json();
1899
+ if (!response.ok)
1900
+ return createErrorResult('apilayer', 'mediastack_news', 'Request failed', statusToErrorCode(response.status));
1901
+ return { success: true, provider: 'apilayer', action: 'mediastack_news', data };
1902
+ },
1903
+ // DEVTOOLS
1904
+ userstack_detect: async (params, creds) => {
1905
+ const key = creds.USERSTACK_API_KEY || creds.api_key;
1906
+ const { ua } = params;
1907
+ if (!ua)
1908
+ return createErrorResult('apilayer', 'userstack_detect', 'Missing required param: ua (user agent string)', ERROR_CODES.INVALID_PARAMS);
1909
+ const url = new URL('http://api.userstack.com/detect');
1910
+ url.searchParams.set('access_key', key);
1911
+ url.searchParams.set('ua', ua);
1912
+ const response = await fetchWithRetry(url.toString(), {}, { provider: 'apilayer', action: 'userstack_detect' });
1913
+ const data = await response.json();
1914
+ if (!response.ok)
1915
+ return createErrorResult('apilayer', 'userstack_detect', 'Request failed', statusToErrorCode(response.status));
1916
+ return { success: true, provider: 'apilayer', action: 'userstack_detect', data };
1917
+ },
1630
1918
  },
1631
1919
  };
1632
1920
  // Get available actions for a provider (static handlers only)