cliodot 1.2.2 → 1.2.4

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 (147) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +81 -0
  3. package/dist/AuthAppClient.d.ts +1 -0
  4. package/dist/AuthAppClient.d.ts.map +1 -1
  5. package/dist/AuthAppClient.js +199 -1
  6. package/dist/CommercialAppClient.d.ts +178 -0
  7. package/dist/CommercialAppClient.d.ts.map +1 -0
  8. package/dist/CommercialAppClient.js +576 -0
  9. package/dist/ConnectorBuilder.js +104 -1
  10. package/dist/Events.d.ts +2 -0
  11. package/dist/Events.d.ts.map +1 -1
  12. package/dist/Events.js +325 -1
  13. package/dist/Flosync.js +296 -1
  14. package/dist/FlosyncClient.js +429 -1
  15. package/dist/FunctionBuilder.js +65 -1
  16. package/dist/IdentityAppClient.d.ts +23 -0
  17. package/dist/IdentityAppClient.d.ts.map +1 -0
  18. package/dist/IdentityAppClient.js +197 -0
  19. package/dist/MemoryAppClient.d.ts +28 -0
  20. package/dist/MemoryAppClient.d.ts.map +1 -0
  21. package/dist/MemoryAppClient.js +149 -0
  22. package/dist/MemoryClient.d.ts +8 -0
  23. package/dist/MemoryClient.d.ts.map +1 -0
  24. package/dist/MemoryClient.js +20 -0
  25. package/dist/OAuthAppClient.d.ts +1 -0
  26. package/dist/OAuthAppClient.d.ts.map +1 -1
  27. package/dist/OAuthAppClient.js +269 -1
  28. package/dist/ProviderServicesClient.d.ts +24 -0
  29. package/dist/ProviderServicesClient.d.ts.map +1 -0
  30. package/dist/ProviderServicesClient.js +158 -0
  31. package/dist/Surface.d.ts +2 -0
  32. package/dist/Surface.d.ts.map +1 -1
  33. package/dist/Surface.js +255 -1
  34. package/dist/ValidatorBuilder.js +24 -1
  35. package/dist/Webhooks.d.ts +20 -0
  36. package/dist/Webhooks.d.ts.map +1 -0
  37. package/dist/Webhooks.js +61 -0
  38. package/dist/WorkflowBuilder.js +279 -1
  39. package/dist/__tests__/CommercialAppClient.test.d.ts +2 -0
  40. package/dist/__tests__/CommercialAppClient.test.d.ts.map +1 -0
  41. package/dist/__tests__/CommercialAppClient.test.js +217 -0
  42. package/dist/__tests__/Events.test.js +191 -1
  43. package/dist/__tests__/IdentityAppClient.test.d.ts +2 -0
  44. package/dist/__tests__/IdentityAppClient.test.d.ts.map +1 -0
  45. package/dist/__tests__/IdentityAppClient.test.js +232 -0
  46. package/dist/__tests__/OAuthAppClient.test.js +300 -1
  47. package/dist/__tests__/ProviderServicesClient.test.d.ts +2 -0
  48. package/dist/__tests__/ProviderServicesClient.test.d.ts.map +1 -0
  49. package/dist/__tests__/ProviderServicesClient.test.js +131 -0
  50. package/dist/__tests__/Surface.test.js +150 -1
  51. package/dist/__tests__/errors.test.js +54 -1
  52. package/dist/__tests__/function.test.js +58 -1
  53. package/dist/__tests__/helpers.d.ts +5 -0
  54. package/dist/__tests__/helpers.d.ts.map +1 -0
  55. package/dist/__tests__/helpers.js +10 -0
  56. package/dist/__tests__/localhost-lookup.test.d.ts +2 -0
  57. package/dist/__tests__/localhost-lookup.test.d.ts.map +1 -0
  58. package/dist/__tests__/localhost-lookup.test.js +26 -0
  59. package/dist/__tests__/parse-api-error.test.js +26 -1
  60. package/dist/__tests__/runner.test.js +156 -1
  61. package/dist/connectors/builtin.js +354 -1
  62. package/dist/connectors/registry.js +300 -1
  63. package/dist/decorators/build.js +105 -1
  64. package/dist/decorators/connector.js +56 -1
  65. package/dist/decorators/index.js +34 -1
  66. package/dist/decorators/metadata.js +338 -1
  67. package/dist/decorators/steps.js +220 -1
  68. package/dist/decorators/workflow.js +52 -1
  69. package/dist/errors.js +76 -1
  70. package/dist/http/__tests__/cliodot-request.environment.test.d.ts +2 -0
  71. package/dist/http/__tests__/cliodot-request.environment.test.d.ts.map +1 -0
  72. package/dist/http/__tests__/cliodot-request.environment.test.js +37 -0
  73. package/dist/http/__tests__/cliodot-result.test.d.ts +2 -0
  74. package/dist/http/__tests__/cliodot-result.test.d.ts.map +1 -0
  75. package/dist/http/__tests__/cliodot-result.test.js +57 -0
  76. package/dist/http/__tests__/events-instance-id.test.d.ts +2 -0
  77. package/dist/http/__tests__/events-instance-id.test.d.ts.map +1 -0
  78. package/dist/http/__tests__/events-instance-id.test.js +45 -0
  79. package/dist/http/cliodot-request.d.ts +35 -0
  80. package/dist/http/cliodot-request.d.ts.map +1 -0
  81. package/dist/http/cliodot-request.js +105 -0
  82. package/dist/http/cliodot-result.d.ts +40 -0
  83. package/dist/http/cliodot-result.d.ts.map +1 -0
  84. package/dist/http/cliodot-result.js +139 -0
  85. package/dist/http/create-client.d.ts +3 -0
  86. package/dist/http/create-client.d.ts.map +1 -0
  87. package/dist/http/create-client.js +14 -0
  88. package/dist/http/events-instance-id.d.ts +11 -0
  89. package/dist/http/events-instance-id.d.ts.map +1 -0
  90. package/dist/http/events-instance-id.js +86 -0
  91. package/dist/http/localhost-lookup.d.ts +12 -0
  92. package/dist/http/localhost-lookup.d.ts.map +1 -0
  93. package/dist/http/localhost-lookup.js +67 -0
  94. package/dist/http/parse-api-error.js +56 -1
  95. package/dist/http/sanitize-execution-headers.js +79 -1
  96. package/dist/identity-offline-verify.d.ts +6 -0
  97. package/dist/identity-offline-verify.d.ts.map +1 -0
  98. package/dist/identity-offline-verify.js +174 -0
  99. package/dist/identity-token-cache.d.ts +6 -0
  100. package/dist/identity-token-cache.d.ts.map +1 -0
  101. package/dist/identity-token-cache.js +51 -0
  102. package/dist/index.d.ts +10 -0
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +108 -1
  105. package/dist/runner/ProcessorEngine.js +1311 -1
  106. package/dist/runner/connector.executor.js +1786 -1
  107. package/dist/runner/utilities/math.executor.js +153 -1
  108. package/dist/runner/utilities/random.executor.js +151 -1
  109. package/dist/runner/utilities/string.executor.js +825 -1
  110. package/dist/template.js +127 -1
  111. package/dist/transformers/StepsToNodesTransformer.js +214 -1
  112. package/dist/transformers/WorkflowTransformer.js +189 -1
  113. package/dist/types/auth-app.api.d.ts +2 -0
  114. package/dist/types/auth-app.api.d.ts.map +1 -1
  115. package/dist/types/auth-app.api.js +2 -1
  116. package/dist/types/builtin.js +2 -1
  117. package/dist/types/client.api.js +2 -1
  118. package/dist/types/commercial-app.api.d.ts +963 -0
  119. package/dist/types/commercial-app.api.d.ts.map +1 -0
  120. package/dist/types/commercial-app.api.js +2 -0
  121. package/dist/types/connector.js +2 -1
  122. package/dist/types/context.js +2 -1
  123. package/dist/types/event-app.api.d.ts +8 -0
  124. package/dist/types/event-app.api.d.ts.map +1 -1
  125. package/dist/types/event-app.api.js +2 -1
  126. package/dist/types/function.js +2 -1
  127. package/dist/types/identity-app.api.d.ts +99 -0
  128. package/dist/types/identity-app.api.d.ts.map +1 -0
  129. package/dist/types/identity-app.api.js +2 -0
  130. package/dist/types/index.js +23 -1
  131. package/dist/types/memory-app.api.d.ts +140 -0
  132. package/dist/types/memory-app.api.d.ts.map +1 -0
  133. package/dist/types/memory-app.api.js +2 -0
  134. package/dist/types/oauth-app.api.d.ts +2 -0
  135. package/dist/types/oauth-app.api.d.ts.map +1 -1
  136. package/dist/types/oauth-app.api.js +105 -1
  137. package/dist/types/provider-services.api.d.ts +98 -0
  138. package/dist/types/provider-services.api.d.ts.map +1 -0
  139. package/dist/types/provider-services.api.js +2 -0
  140. package/dist/types/validator.js +2 -1
  141. package/dist/types/webhook-app.api.d.ts +2 -0
  142. package/dist/types/webhook-app.api.d.ts.map +1 -0
  143. package/dist/types/webhook-app.api.js +2 -0
  144. package/dist/types/workflow.js +33 -1
  145. package/dist/validators/validators.js +478 -1
  146. package/dist/variable.js +37 -1
  147. package/package.json +3 -2
@@ -1 +1,279 @@
1
- 'use strict';function _0x12bc(){const _0x29cfde=['B2jQzwn0','D29YA2zSB3Djza','tufovufm','BxLZCwWUC3LZDgvT','mJq1otCYn2TfANHkAq','Bg9N','y29UBMvJDgLVBL9Pza','C3rLChm','ntKZmJmZoe52DxPwza','lI9KzwnVCMf0B3jZl21LDgfKyxrH','AMv4Ba','Bg9JyxrPB24','revmqvK','nJm1nZKZmK1pvfP3rW','lI9JB25Uzwn0B3jZl3jLz2LZDhj5','BM90Awz5','CgfYyw1Z','y29Kzq','ChvZAa','ywn0AxzL','BwfRzunVBM5Ly3rVCLn0zxa','te9h','yNvPBgq','BgvUz3rO','DgLTzw91Da','kIaQicOGkIaQ','vKfmsurbve9s','Aw5JBhvKzxm','v29YA2zSB3DtDgvWvhLWzq','CMvWBgfJzq','CMvXDwLYzwq','BwfW','nZK5mtqWmeTjvuX6ta','AxrLBq','zxHLy3v0zq','C2nOzwr1Bgu','ode5mtiWq2THvffU','Aw5KzxHFyxm','C3rLCe9YzgvY','vw5RBM93BIbHy3rPB24GA2v5ig9UignVBM5Ly3rVCIa','u0nirurvteu','AgvHzgvYCW','v29YA2zSB3DuCMLNz2vYvhLWzq','mZfhuvLRDu4','DMfSDwvZ','D2vIAg9VA01LDgHVza','nw5uA2LfqG','qvvusevoveLdqvrjt04','DgHLBG','sK9c','DMfSAwrHDg9Y','uKvtue9orevs','y2fSBa','AxnbCNjHEq','sfruua','mtiYnJy2mtn5q3HKzgq','zgvMAw5LuhjVCgvYDhK','q09oreLusu9o','zgf0ywjHC2u','vfjbtLngt1jn','DhjPz2DLCG','Ahr0Ca','y2fSBfDVCMTMBg93','y29UDgvUDfr5Cgu','x19LC01VzhvSzq','CMv0DxjU','yM9KEq','zw50CMLLCW','C3rHDhvZq29Kzq','C3rYAw5N','y29UBMvJDg9Y','mtmZmdzpB1bSrNa','DhjHBNnMB3jT','yxv0Aa','tK9usuzz','CMvZCg9UzgvY','q0fmtf9xt1jlrKXpvW','zwXZzq','D29YA2zSB3Doyw1L','ru5duLLqveLptG','v29YA2zSB3DcDwLSzgvY','AxnuExbLzenVBM5Ly3rVCKrLzG','q09erq','u3rLCej1AwXKzxi','C3rLCa','Aw5WDxrFzNjVBq','Bg9VCa','Bwf4x2L0zxjHDgLVBNm','Bw9Uz29KyI5ZExn0zw0'];_0x12bc=function(){return _0x29cfde;};return _0x12bc();}function _0x4819(_0x333525,_0x1550df){_0x333525=_0x333525-0x1ea;const _0x12bc13=_0x12bc();let _0x481944=_0x12bc13[_0x333525];if(_0x4819['WXiQWW']===undefined){var _0x1c97c3=function(_0x3cad47){const _0x432072='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x7b1361='',_0xce2c2d='';for(let _0x27d3c5=0x0,_0x8cbd9c,_0x44f890,_0x3c472e=0x0;_0x44f890=_0x3cad47['charAt'](_0x3c472e++);~_0x44f890&&(_0x8cbd9c=_0x27d3c5%0x4?_0x8cbd9c*0x40+_0x44f890:_0x44f890,_0x27d3c5++%0x4)?_0x7b1361+=String['fromCharCode'](0xff&_0x8cbd9c>>(-0x2*_0x27d3c5&0x6)):0x0){_0x44f890=_0x432072['indexOf'](_0x44f890);}for(let _0x1da639=0x0,_0x2f8488=_0x7b1361['length'];_0x1da639<_0x2f8488;_0x1da639++){_0xce2c2d+='%'+('00'+_0x7b1361['charCodeAt'](_0x1da639)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xce2c2d);};_0x4819['sbTUhi']=_0x1c97c3,_0x4819['cxtABS']={},_0x4819['WXiQWW']=!![];}const _0x4d9b95=_0x12bc13[0x0],_0x4e9c1d=_0x333525+_0x4d9b95,_0x1b160a=_0x4819['cxtABS'][_0x4e9c1d];return!_0x1b160a?(_0x481944=_0x4819['sbTUhi'](_0x481944),_0x4819['cxtABS'][_0x4e9c1d]=_0x481944):_0x481944=_0x1b160a,_0x481944;}const _0x1980a8=_0x4819;(function(_0x84b4a6,_0x4188ce){const _0x23dfb5=_0x4819,_0x52b91e=_0x84b4a6();while(!![]){try{const _0x48ec8f=parseInt(_0x23dfb5(0x235))/0x1*(-parseInt(_0x23dfb5(0x1f8))/0x2)+parseInt(_0x23dfb5(0x20e))/0x3+-parseInt(_0x23dfb5(0x22e))/0x4+-parseInt(_0x23dfb5(0x238))/0x5*(parseInt(_0x23dfb5(0x212))/0x6)+parseInt(_0x23dfb5(0x217))/0x7+-parseInt(_0x23dfb5(0x22a))/0x8+parseInt(_0x23dfb5(0x241))/0x9;if(_0x48ec8f===_0x4188ce)break;else _0x52b91e['push'](_0x52b91e['shift']());}catch(_0x5ec8d1){_0x52b91e['push'](_0x52b91e['shift']());}}}(_0x12bc,0xa90f7));Object[_0x1980a8(0x242)](exports,_0x1980a8(0x1f1),{'value':!![]}),exports['WorkflowBuilder']=exports[_0x1980a8(0x204)]=void 0x0;const workflow_1=require('./types/workflow'),metadata_1=require(_0x1980a8(0x213)),registry_1=require(_0x1980a8(0x218));function createStepResult(_0x7b1361){return{'step':_0x7b1361,'then'(_0xce2c2d){const _0x2a693b=_0x4819;return this[_0x2a693b(0x205)][_0x2a693b(0x23a)]=_0xce2c2d[_0x2a693b(0x227)](/[.\-\s]/g,'_'),this;},'else'(_0x27d3c5){const _0x30f6b9=_0x4819;return this[_0x30f6b9(0x205)][_0x30f6b9(0x1fe)]=_0x27d3c5[_0x30f6b9(0x227)](/[.\-\s]/g,'_'),this;}};}class StepBuilder{[_0x1980a8(0x1f7)](_0x8cbd9c,_0x44f890,_0x3c472e){const _0x1b14a6=_0x1980a8,_0x1da639=_0x3c472e??{};let _0x2f8488,_0x2caeac;if((0x0,registry_1[_0x1b14a6(0x202)])(_0x8cbd9c)){_0x2f8488=_0x8cbd9c['id'];const _0x432369=_0x44f890,_0x1da65f=_0x8cbd9c['actions'][_0x432369];if(typeof _0x1da65f!==_0x1b14a6(0x1f6))throw new Error(_0x1b14a6(0x231)+_0x2f8488+':\x20'+String(_0x44f890));_0x2caeac=_0x1da65f;}else _0x2f8488=_0x8cbd9c,_0x2caeac=_0x44f890;const _0x8c9996=(0x0,metadata_1[_0x1b14a6(0x21e)])('',_0x2f8488,_0x2caeac,_0x1da639);return createStepResult(_0x8c9996);}['db'](_0x3d5ac1,_0x4bb97e,_0x522af5){const _0x438c53=_0x1980a8,_0x3209d0=_0x3d5ac1==='mongodb'?_0x438c53(0x209):_0x438c53(0x20d),_0x175734={'id':'','type':workflow_1[_0x438c53(0x226)]['DB'],'connector_id':_0x3209d0,'action':_0x4bb97e,'body':_0x522af5,'params':_0x522af5[_0x438c53(0x21a)]};if(_0x522af5[_0x438c53(0x210)])_0x175734[_0x438c53(0x210)]=_0x522af5[_0x438c53(0x210)];if(_0x522af5[_0x438c53(0x1eb)])_0x175734[_0x438c53(0x1eb)]=_0x522af5[_0x438c53(0x1eb)];return createStepResult(_0x175734);}[_0x1980a8(0x23c)](_0x9861b5){const _0x4846b5=_0x1980a8;let _0x449f2f;Array['isArray'](_0x9861b5)?_0x449f2f=_0x9861b5:_0x449f2f=[{'fields':Object[_0x4846b5(0x236)](_0x9861b5),'validators':Object[_0x4846b5(0x1f4)](_0x9861b5)[_0x4846b5(0x229)](()=>({'name':_0x4846b5(0x228),'config':{}}))}];const _0x33200b={'id':'','type':workflow_1['WorkflowStepType'][_0x4846b5(0x224)],'validationGroups':_0x449f2f};return createStepResult(_0x33200b);}['condition'](_0x2336b0){const _0x5c0d58=_0x1980a8,_0x4103f9={'id':'','type':workflow_1[_0x5c0d58(0x226)][_0x5c0d58(0x1ea)],'mode':_0x5c0d58(0x214),'if':_0x2336b0};return createStepResult(_0x4103f9);}[_0x1980a8(0x207)](_0x537a66,_0x4f5626,_0x44350f){const _0x4e6cf5=_0x1980a8,_0x3fba4b={'id':'','type':workflow_1[_0x4e6cf5(0x226)]['LOOP'],'over':_0x537a66,'as':_0x44350f?.['as']??_0x4e6cf5(0x22b),'index_as':_0x44350f?.[_0x4e6cf5(0x22f)]??'index','steps':_0x4f5626,'max_iterations':_0x44350f?.[_0x4e6cf5(0x208)]??0x3e8};return createStepResult(_0x3fba4b);}[_0x1980a8(0x21b)](_0xc5f4c0,_0xa849e4,_0x1266dc,_0x4e1d68){const _0x14a193=_0x1980a8,_0x38ada0=!_0xa849e4&&!_0xc5f4c0[_0x14a193(0x225)](_0x14a193(0x1f2))&&!_0xc5f4c0['includes']('{{'),_0x4023e5={'id':'','type':workflow_1['WorkflowStepType'][_0x14a193(0x203)],..._0x38ada0?{'module_ref':_0xc5f4c0,'fn':_0xa849e4||_0x14a193(0x22c),'args':_0x1266dc||{}}:{'source':_0xc5f4c0,'args':_0x1266dc||{}},'input_from':_0x4e1d68?.[_0x14a193(0x206)],'timeout':_0x4e1d68?.[_0x14a193(0x222)]??0x3e8};return createStepResult(_0x4023e5);}[_0x1980a8(0x23e)](_0x3dcbe6,_0x580db2){const _0x1221a9=_0x1980a8,_0x342419={'id':'','type':workflow_1[_0x1221a9(0x226)]['FUNCTION'],'function_id':_0x3dcbe6,'function_slug':_0x3dcbe6,'args':_0x580db2};return createStepResult(_0x342419);}[_0x1980a8(0x1ef)](_0x17f9a8,_0x11d06b){const _0x39da79=_0x1980a8,_0xfce72c={'id':'','type':workflow_1[_0x39da79(0x226)][_0x39da79(0x1fd)],'workflow_id':_0x17f9a8,'payload':_0x11d06b??{}};return createStepResult(_0xfce72c);}[_0x1980a8(0x1fa)](_0x3270ef,_0x405969,_0x29c09c){const _0x12b22d=_0x1980a8,_0x1f2cc9={'id':'','type':workflow_1[_0x12b22d(0x226)][_0x12b22d(0x239)],'connector_id':_0x3270ef,'action':_0x405969,'params':_0x29c09c,'body':_0x29c09c};return createStepResult(_0x1f2cc9);}['util'](_0x522f48,_0x1a09dd,_0xaa8c50){const _0x5dc1ae=_0x1980a8;return this[_0x5dc1ae(0x1f7)](_0x522f48,_0x1a09dd,_0xaa8c50);}[_0x1980a8(0x1f9)](_0x268604){const _0x188b1e=_0x1980a8,_0x23ef37=!Array[_0x188b1e(0x23f)](_0x268604),_0x3ea9e0={'id':'','type':workflow_1[_0x188b1e(0x226)][_0x188b1e(0x1ec)],..._0x23ef37?{'mapping':_0x268604}:{'operations':_0x268604}};return createStepResult(_0x3ea9e0);}['encrypt'](_0x4d508e,_0x53cb33,_0xd95b77){const _0x448525=_0x1980a8,_0x5c0da3={'id':'','type':workflow_1[_0x448525(0x226)][_0x448525(0x200)],'connector_id':_0x4d508e,'action':_0x53cb33,'params':_0xd95b77,'body':_0xd95b77};return createStepResult(_0x5c0da3);}[_0x1980a8(0x1fc)](_0x3fc808,_0x5cf67a){const _0x33ffba=_0x1980a8,_0x6a0261={'id':'','type':workflow_1['WorkflowStepType'][_0x33ffba(0x23d)],'responder':_0x3fc808,'config':{'statusCode':_0x5cf67a[_0x33ffba(0x1f5)]??0xc8,'headers':_0x5cf67a[_0x33ffba(0x233)],'body':_0x5cf67a[_0x33ffba(0x1f3)],'contentType':_0x5cf67a[_0x33ffba(0x1f0)],'location':_0x5cf67a[_0x33ffba(0x215)]}};return createStepResult(_0x6a0261);}[_0x1980a8(0x20f)](_0x135d48){const _0x1faadb=_0x1980a8,_0x4eca0e={'id':'','type':workflow_1[_0x1faadb(0x226)][_0x1faadb(0x21f)],'message':_0x135d48};return createStepResult(_0x4eca0e);}['delay'](_0x46c572){const _0x18af0c=_0x1980a8,_0x20ca21={'id':'','type':workflow_1[_0x18af0c(0x226)][_0x18af0c(0x216)],'ms':_0x46c572};return createStepResult(_0x20ca21);}[_0x1980a8(0x219)](_0x182b35,_0x1c7406){const _0x13de84=_0x1980a8,_0x3136a5={'id':'','type':workflow_1[_0x13de84(0x226)][_0x13de84(0x1fb)],'channel':_0x182b35,'message':_0x1c7406};return createStepResult(_0x3136a5);}}exports['StepBuilder']=StepBuilder;function sanitizeStepId(_0x2bf81c){return _0x2bf81c['replace'](/[.\-\s]/g,'_');}class WorkflowBuilder{constructor(_0x203517,_0x3ad714){const _0x372e82=_0x1980a8;this['trigger']={'type':workflow_1[_0x372e82(0x234)][_0x372e82(0x20c)]},this[_0x372e82(0x211)]=[],this[_0x372e82(0x230)]=[],this[_0x372e82(0x20b)]=_0x203517,this[_0x372e82(0x1ff)]=_0x3ad714||_0x203517;}[_0x1980a8(0x1ee)](_0x10d2c3,_0x4ee854){const _0x5596cc=_0x1980a8;return this[_0x5596cc(0x1ed)]={'type':workflow_1[_0x5596cc(0x234)][_0x5596cc(0x240)],'webhook_url':_0x4ee854},this['trigger'][_0x5596cc(0x237)]=_0x10d2c3,this;}['webhook'](_0x143d36,_0x1f15c5){const _0x4dfa1f=_0x1980a8;return this[_0x4dfa1f(0x1ee)](_0x143d36,_0x1f15c5);}['job'](_0x37fd67,_0x2e1401){const _0x589dc9=_0x1980a8;return this[_0x589dc9(0x1ed)]={'type':workflow_1[_0x589dc9(0x234)][_0x589dc9(0x23b)],'cron':_0x37fd67??_0x589dc9(0x223),'timezone':_0x2e1401},this;}[_0x1980a8(0x22d)](_0x57525c,_0x2a0d2e){const _0x28b679=_0x1980a8;return this[_0x28b679(0x1ed)]={'type':workflow_1['WorkflowTriggerType'][_0x28b679(0x232)],'cron':_0x57525c,'timezone':_0x2a0d2e},this;}[_0x1980a8(0x205)](_0x8b4658,_0x50fade){const _0x23b289=_0x1980a8,_0x311fb8=new StepBuilder(),_0x5ab99c=_0x50fade(_0x311fb8),_0x14411a=_0x5ab99c[_0x23b289(0x205)]!==undefined?_0x5ab99c['step']:_0x5ab99c;if(!_0x14411a||typeof _0x14411a!==_0x23b289(0x20a))throw new Error('Step\x20'+_0x8b4658+'\x20did\x20not\x20produce\x20a\x20valid\x20step');const _0x3257cf=sanitizeStepId(_0x8b4658),_0x8f45b8={..._0x14411a,'id':_0x3257cf};return this[_0x23b289(0x211)]['push'](_0x8f45b8),this[_0x23b289(0x230)]['push'](_0x8b4658),this;}[_0x1980a8(0x220)](){const _0x5dd331=_0x1980a8,_0x1777b0=[];for(let _0x4b8a26=0x0;_0x4b8a26<this[_0x5dd331(0x211)][_0x5dd331(0x221)];_0x4b8a26++){const _0xeda03={...this['steps'][_0x4b8a26]};_0x4b8a26>0x0&&(_0xeda03['input_from']=sanitizeStepId(this[_0x5dd331(0x230)][_0x4b8a26-0x1])),_0x1777b0[_0x5dd331(0x21c)](_0xeda03);}return{'_id':sanitizeStepId(this[_0x5dd331(0x20b)]),'name':this[_0x5dd331(0x1ff)],'trigger':this['trigger'],'steps':_0x1777b0,'status':_0x5dd331(0x21d)};}}exports[_0x1980a8(0x201)]=WorkflowBuilder;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowBuilder = exports.StepBuilder = void 0;
4
+ const workflow_1 = require("./types/workflow");
5
+ const metadata_1 = require("./decorators/metadata");
6
+ const registry_1 = require("./connectors/registry");
7
+ function createStepResult(step) {
8
+ return {
9
+ step,
10
+ then(stepId) {
11
+ this.step.then = stepId.replace(/[.\-\s]/g, "_");
12
+ return this;
13
+ },
14
+ else(stepId) {
15
+ this.step.else = stepId.replace(/[.\-\s]/g, "_");
16
+ return this;
17
+ },
18
+ };
19
+ }
20
+ class StepBuilder {
21
+ connector(connectorIdOrDef, actionOrKey, config) {
22
+ const resolved = (config ?? {});
23
+ let connectorId;
24
+ let action;
25
+ if ((0, registry_1.isTypedConnectorDef)(connectorIdOrDef)) {
26
+ connectorId = connectorIdOrDef.id;
27
+ const key = actionOrKey;
28
+ const mapped = connectorIdOrDef.actions[key];
29
+ if (typeof mapped !== "string") {
30
+ throw new Error(`Unknown action key on connector ${connectorId}: ${String(actionOrKey)}`);
31
+ }
32
+ action = mapped;
33
+ }
34
+ else {
35
+ connectorId = connectorIdOrDef;
36
+ action = actionOrKey;
37
+ }
38
+ const step = (0, metadata_1.makeConnectorStep)("", connectorId, action, resolved);
39
+ return createStepResult(step);
40
+ }
41
+ db(engine, action, config) {
42
+ const connectorId = engine === "mongodb" ? "mongodb.system" : "mysql.system";
43
+ const step = {
44
+ id: "",
45
+ type: workflow_1.WorkflowStepType.DB,
46
+ connector_id: connectorId,
47
+ action,
48
+ body: config,
49
+ params: config.params,
50
+ };
51
+ if (config.connection_id)
52
+ step.connection_id = config.connection_id;
53
+ if (config.database)
54
+ step.database = config.database;
55
+ return createStepResult(step);
56
+ }
57
+ validator(fieldsOrGroups) {
58
+ let validationGroups;
59
+ if (Array.isArray(fieldsOrGroups)) {
60
+ validationGroups = fieldsOrGroups;
61
+ }
62
+ else {
63
+ validationGroups = [
64
+ {
65
+ fields: Object.values(fieldsOrGroups),
66
+ validators: Object.entries(fieldsOrGroups).map(() => ({ name: "required", config: {} })),
67
+ },
68
+ ];
69
+ }
70
+ const step = {
71
+ id: "",
72
+ type: workflow_1.WorkflowStepType.VALIDATOR,
73
+ validationGroups,
74
+ };
75
+ return createStepResult(step);
76
+ }
77
+ condition(expr) {
78
+ const step = {
79
+ id: "",
80
+ type: workflow_1.WorkflowStepType.CONDITION,
81
+ mode: "jexl",
82
+ if: expr,
83
+ };
84
+ return createStepResult(step);
85
+ }
86
+ loop(over, steps, config) {
87
+ const step = {
88
+ id: "",
89
+ type: workflow_1.WorkflowStepType.LOOP,
90
+ over,
91
+ as: config?.as ?? "item",
92
+ index_as: config?.index_as ?? "index",
93
+ steps,
94
+ max_iterations: config?.max_iterations ?? 1000,
95
+ };
96
+ return createStepResult(step);
97
+ }
98
+ code(sourceOrModule, fn, args, config) {
99
+ const isModule = !fn && !sourceOrModule.includes("return") && !sourceOrModule.includes("{{");
100
+ const step = {
101
+ id: "",
102
+ type: workflow_1.WorkflowStepType.CODE,
103
+ ...(isModule
104
+ ? { module_ref: sourceOrModule, fn: fn || "execute", args: args || {} }
105
+ : { source: sourceOrModule, args: args || {} }),
106
+ input_from: config?.input_from,
107
+ timeout: config?.timeout ?? 1000,
108
+ };
109
+ return createStepResult(step);
110
+ }
111
+ call(functionSlugOrId, args) {
112
+ const step = {
113
+ id: "",
114
+ type: workflow_1.WorkflowStepType.FUNCTION,
115
+ function_id: functionSlugOrId,
116
+ function_slug: functionSlugOrId,
117
+ args,
118
+ };
119
+ return createStepResult(step);
120
+ }
121
+ callWorkflow(workflowId, payload) {
122
+ const step = {
123
+ id: "",
124
+ type: workflow_1.WorkflowStepType.CALL_WORKFLOW,
125
+ workflow_id: workflowId,
126
+ payload: payload ?? {},
127
+ };
128
+ return createStepResult(step);
129
+ }
130
+ auth(connectorId, action, config) {
131
+ const step = {
132
+ id: "",
133
+ type: workflow_1.WorkflowStepType.AUTHENTICATION,
134
+ connector_id: connectorId,
135
+ action,
136
+ params: config,
137
+ body: config,
138
+ };
139
+ return createStepResult(step);
140
+ }
141
+ util(connectorId, action, config) {
142
+ return this.connector(connectorId, action, config);
143
+ }
144
+ transform(mappingOrOperations) {
145
+ const isMapping = !Array.isArray(mappingOrOperations);
146
+ const step = {
147
+ id: "",
148
+ type: workflow_1.WorkflowStepType.TRANSFORM,
149
+ ...(isMapping
150
+ ? { mapping: mappingOrOperations }
151
+ : { operations: mappingOrOperations }),
152
+ };
153
+ return createStepResult(step);
154
+ }
155
+ encrypt(connectorId, action, config) {
156
+ const step = {
157
+ id: "",
158
+ type: workflow_1.WorkflowStepType.ENCRYPTION,
159
+ connector_id: connectorId,
160
+ action,
161
+ params: config,
162
+ body: config,
163
+ };
164
+ return createStepResult(step);
165
+ }
166
+ responder(type, config) {
167
+ const step = {
168
+ id: "",
169
+ type: workflow_1.WorkflowStepType.RESPONDER,
170
+ responder: type,
171
+ config: {
172
+ statusCode: config.statusCode ?? 200,
173
+ headers: config.headers,
174
+ body: config.body,
175
+ contentType: config.contentType,
176
+ location: config.location,
177
+ },
178
+ };
179
+ return createStepResult(step);
180
+ }
181
+ log(message) {
182
+ const step = {
183
+ id: "",
184
+ type: workflow_1.WorkflowStepType.LOG,
185
+ message,
186
+ };
187
+ return createStepResult(step);
188
+ }
189
+ delay(ms) {
190
+ const step = {
191
+ id: "",
192
+ type: workflow_1.WorkflowStepType.DELAY,
193
+ ms,
194
+ };
195
+ return createStepResult(step);
196
+ }
197
+ notify(channel, message) {
198
+ const step = {
199
+ id: "",
200
+ type: workflow_1.WorkflowStepType.NOTIFY,
201
+ channel,
202
+ message,
203
+ };
204
+ return createStepResult(step);
205
+ }
206
+ }
207
+ exports.StepBuilder = StepBuilder;
208
+ function sanitizeStepId(id) {
209
+ return id.replace(/[.\-\s]/g, "_");
210
+ }
211
+ class WorkflowBuilder {
212
+ constructor(workflowId, workflowName) {
213
+ this.trigger = { type: workflow_1.WorkflowTriggerType.MANUAL };
214
+ this.steps = [];
215
+ this.stepOrder = [];
216
+ this.workflowId = workflowId;
217
+ this.workflowName = workflowName || workflowId;
218
+ }
219
+ http(method, path) {
220
+ this.trigger = {
221
+ type: workflow_1.WorkflowTriggerType.HTTP,
222
+ webhook_url: path,
223
+ };
224
+ this.trigger.webhookMethod = method;
225
+ return this;
226
+ }
227
+ webhook(method, path) {
228
+ return this.http(method, path);
229
+ }
230
+ job(cron, timezone) {
231
+ this.trigger = {
232
+ type: workflow_1.WorkflowTriggerType.JOB,
233
+ cron: cron ?? "* * * * *",
234
+ timezone,
235
+ };
236
+ return this;
237
+ }
238
+ schedule(cron, timezone) {
239
+ this.trigger = {
240
+ type: workflow_1.WorkflowTriggerType.SCHEDULE,
241
+ cron,
242
+ timezone,
243
+ };
244
+ return this;
245
+ }
246
+ step(stepId, fn) {
247
+ const s = new StepBuilder();
248
+ const result = fn(s);
249
+ const rawStep = result.step !== undefined ? result.step : result;
250
+ if (!rawStep || typeof rawStep !== "object")
251
+ throw new Error(`Step ${stepId} did not produce a valid step`);
252
+ const sanitizedId = sanitizeStepId(stepId);
253
+ const fullStep = {
254
+ ...rawStep,
255
+ id: sanitizedId,
256
+ };
257
+ this.steps.push(fullStep);
258
+ this.stepOrder.push(stepId);
259
+ return this;
260
+ }
261
+ build() {
262
+ const stepsWithInputFrom = [];
263
+ for (let i = 0; i < this.steps.length; i++) {
264
+ const step = { ...this.steps[i] };
265
+ if (i > 0) {
266
+ step.input_from = sanitizeStepId(this.stepOrder[i - 1]);
267
+ }
268
+ stepsWithInputFrom.push(step);
269
+ }
270
+ return {
271
+ _id: sanitizeStepId(this.workflowId),
272
+ name: this.workflowName,
273
+ trigger: this.trigger,
274
+ steps: stepsWithInputFrom,
275
+ status: "active",
276
+ };
277
+ }
278
+ }
279
+ exports.WorkflowBuilder = WorkflowBuilder;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CommercialAppClient.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommercialAppClient.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/CommercialAppClient.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const axios_1 = __importDefault(require("axios"));
7
+ const CommercialAppClient_1 = require("../CommercialAppClient");
8
+ const errors_1 = require("../errors");
9
+ jest.mock("axios");
10
+ const mockedAxios = axios_1.default;
11
+ describe("CommercialAppClient", () => {
12
+ const mockAxiosInstance = jest.fn();
13
+ beforeEach(() => {
14
+ jest.clearAllMocks();
15
+ mockedAxios.create.mockReturnValue(mockAxiosInstance);
16
+ });
17
+ function createClient(overrides) {
18
+ return new CommercialAppClient_1.CommercialAppClient({
19
+ baseUrl: "https://api.example.com",
20
+ appId: "com_app_test",
21
+ apiKey: "cak_test_key",
22
+ ...overrides,
23
+ });
24
+ }
25
+ it("requires baseUrl and appId", () => {
26
+ expect(() => new CommercialAppClient_1.CommercialAppClient({ baseUrl: "", appId: "com_app_test" })).toThrow(errors_1.CliodotApiError);
27
+ expect(() => new CommercialAppClient_1.CommercialAppClient({
28
+ baseUrl: "https://api.example.com",
29
+ appId: "",
30
+ })).toThrow(errors_1.CliodotApiError);
31
+ });
32
+ it("opens a renewal invoice on the current subscription", async () => {
33
+ mockAxiosInstance.mockResolvedValue({
34
+ data: {
35
+ ok: true,
36
+ created: true,
37
+ invoice: {
38
+ _id: "com_inv_ren_1",
39
+ status: "open",
40
+ currency: "USD",
41
+ amount: 4900,
42
+ total: 4900,
43
+ metadata: { kind: "renewal", renew_on_success: true },
44
+ },
45
+ subscription: {
46
+ _id: "com_sub_1",
47
+ status: "pending_renewal",
48
+ },
49
+ },
50
+ });
51
+ const client = createClient();
52
+ const result = await client.renewSubscription({
53
+ subscriptionId: "com_sub_1",
54
+ payment_method: "paystack",
55
+ });
56
+ expect(result.invoice._id).toBe("com_inv_ren_1");
57
+ expect(result.created).toBe(true);
58
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
59
+ method: "POST",
60
+ url: "/v1/subscriptions/com_sub_1/renew",
61
+ headers: {
62
+ "x-cliodot-app-id": "com_app_test",
63
+ Authorization: "Bearer cak_test_key",
64
+ },
65
+ data: { payment_method: "paystack" },
66
+ }));
67
+ });
68
+ it("renew aliases renewSubscription", async () => {
69
+ mockAxiosInstance.mockResolvedValue({
70
+ data: {
71
+ ok: true,
72
+ created: false,
73
+ invoice: { _id: "com_inv_ren_1", status: "open" },
74
+ subscription: { _id: "com_sub_1" },
75
+ },
76
+ });
77
+ const client = createClient();
78
+ await client.renew({ subscriptionId: "com_sub_1" });
79
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
80
+ method: "POST",
81
+ url: "/v1/subscriptions/com_sub_1/renew",
82
+ }));
83
+ });
84
+ it("requires subscriptionId for renew", () => {
85
+ const client = createClient();
86
+ expect(() => client.renewSubscription({ subscriptionId: " " })).toThrow("subscriptionId is required");
87
+ });
88
+ it("confirms a provider renewal against the invoice", async () => {
89
+ mockAxiosInstance.mockResolvedValue({
90
+ data: {
91
+ ok: true,
92
+ reference: "com_inv_ren_1",
93
+ invoice: { _id: "com_inv_ren_1", status: "paid", amount: 4900 },
94
+ payment: {
95
+ _id: "com_pay_1",
96
+ status: "succeeded",
97
+ provider_payment_id: "in_123",
98
+ },
99
+ },
100
+ });
101
+ const client = createClient();
102
+ const result = await client.confirmPayment({
103
+ reference: "com_inv_ren_1",
104
+ status: "succeeded",
105
+ provider_payment_id: "in_123",
106
+ });
107
+ expect(result.invoice.status).toBe("paid");
108
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
109
+ method: "POST",
110
+ url: "/v1/payments/confirm",
111
+ data: {
112
+ reference: "com_inv_ren_1",
113
+ status: "succeeded",
114
+ provider_payment_id: "in_123",
115
+ },
116
+ }));
117
+ });
118
+ it("lists and saves customer cards", async () => {
119
+ mockAxiosInstance.mockResolvedValue({
120
+ data: {
121
+ ok: true,
122
+ cards: [
123
+ {
124
+ _id: "com_card_1",
125
+ last4: "4242",
126
+ brand: "visa",
127
+ is_default: true,
128
+ status: "active",
129
+ },
130
+ ],
131
+ pagination: { totalDocs: 1, page: 1, limit: 20 },
132
+ },
133
+ });
134
+ const client = createClient();
135
+ const listed = await client.listCards("acme-corp");
136
+ expect(listed.cards[0].last4).toBe("4242");
137
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
138
+ method: "GET",
139
+ url: "/v1/customers/acme-corp/cards",
140
+ }));
141
+ mockAxiosInstance.mockResolvedValue({
142
+ data: {
143
+ ok: true,
144
+ card: {
145
+ _id: "com_card_2",
146
+ last4: "1111",
147
+ brand: "mastercard",
148
+ is_default: false,
149
+ status: "active",
150
+ },
151
+ },
152
+ });
153
+ const added = await client.addCard("acme-corp", {
154
+ token: "AUTH_ok",
155
+ last4: "1111",
156
+ brand: "mastercard",
157
+ });
158
+ expect(added.card._id).toBe("com_card_2");
159
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
160
+ method: "POST",
161
+ url: "/v1/customers/acme-corp/cards",
162
+ data: {
163
+ token: "AUTH_ok",
164
+ last4: "1111",
165
+ brand: "mastercard",
166
+ },
167
+ }));
168
+ });
169
+ it("sets default and removes a card", async () => {
170
+ mockAxiosInstance.mockResolvedValue({
171
+ data: {
172
+ ok: true,
173
+ card: { _id: "com_card_1", is_default: true, status: "active" },
174
+ },
175
+ });
176
+ const client = createClient();
177
+ await client.setDefaultCard("acme-corp", "com_card_1");
178
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
179
+ method: "POST",
180
+ url: "/v1/customers/acme-corp/cards/com_card_1/default",
181
+ }));
182
+ mockAxiosInstance.mockResolvedValue({
183
+ data: {
184
+ ok: true,
185
+ card: { _id: "com_card_1", status: "revoked" },
186
+ },
187
+ });
188
+ await client.removeCard("acme-corp", "com_card_1");
189
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
190
+ method: "DELETE",
191
+ url: "/v1/customers/acme-corp/cards/com_card_1",
192
+ }));
193
+ });
194
+ it("passes card_id on initiatePayment", async () => {
195
+ mockAxiosInstance.mockResolvedValue({
196
+ data: {
197
+ ok: true,
198
+ reference: "com_inv_1",
199
+ invoice: { _id: "com_inv_1", status: "processing" },
200
+ charge: {},
201
+ },
202
+ });
203
+ const client = createClient();
204
+ await client.initiatePayment({
205
+ customer: "acme-corp",
206
+ card_id: "com_card_1",
207
+ });
208
+ expect(mockAxiosInstance).toHaveBeenCalledWith(expect.objectContaining({
209
+ method: "POST",
210
+ url: "/v1/payments/initiate",
211
+ data: expect.objectContaining({
212
+ customer: "acme-corp",
213
+ card_id: "com_card_1",
214
+ }),
215
+ }));
216
+ });
217
+ });