@wix/cli-app 1.1.39 → 1.1.41

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 (116) hide show
  1. package/build/CreateVersionCommand-NJC6EUQ6.js +4 -0
  2. package/build/CreateVersionCommand-NJC6EUQ6.js.map +1 -0
  3. package/build/DevCommand-7VFOSZMO.js +4 -0
  4. package/build/DevCommand-7VFOSZMO.js.map +1 -0
  5. package/build/{GenerateCommand-7ZGIGNPF.js → GenerateCommand-VISY3267.js} +21 -21
  6. package/build/GenerateCommand-VISY3267.js.map +1 -0
  7. package/build/LogsCommand-5HFJDCHS.js +4 -0
  8. package/build/LogsCommand-5HFJDCHS.js.map +1 -0
  9. package/build/PreviewCommand-R3AOKI4K.js +4 -0
  10. package/build/{ServeCommand-T5PQKB57.js → ServeCommand-QS4FDP4T.js} +2 -2
  11. package/build/build-BFTLTFIN.js +4 -0
  12. package/build/build-BFTLTFIN.js.map +1 -0
  13. package/build/{chunk-KLTGX7JQ.js → chunk-3HELHIBJ.js} +2 -2
  14. package/build/chunk-3OFSARA2.js +4 -0
  15. package/build/chunk-3OFSARA2.js.map +1 -0
  16. package/build/{chunk-TRE6G7GA.js → chunk-5YVFVF4T.js} +2 -2
  17. package/build/chunk-62SRA77S.js +4 -0
  18. package/build/{chunk-35BUZ7CK.js.map → chunk-62SRA77S.js.map} +1 -1
  19. package/build/{chunk-6QCQALVT.js → chunk-6MMLDNFM.js} +2 -2
  20. package/build/{chunk-IBNMP32R.js → chunk-7RL4TN6T.js} +2 -2
  21. package/build/chunk-B2BRLGRZ.js +4 -0
  22. package/build/{chunk-7OVUUUVH.js → chunk-GF543SV4.js} +2 -2
  23. package/build/chunk-IZOKP4UZ.js +4 -0
  24. package/build/chunk-IZOKP4UZ.js.map +1 -0
  25. package/build/chunk-L7P6I5SY.js +4 -0
  26. package/build/{chunk-BW3SDDV3.js.map → chunk-L7P6I5SY.js.map} +1 -1
  27. package/build/chunk-LRONHC7Z.js +10 -0
  28. package/build/chunk-LRONHC7Z.js.map +1 -0
  29. package/build/{chunk-4YU6J2EW.js → chunk-NCYXC7TY.js} +2 -2
  30. package/build/chunk-RL3KEEB6.js +11 -0
  31. package/build/{chunk-QT3P4FJP.js.map → chunk-RL3KEEB6.js.map} +1 -1
  32. package/build/{chunk-3Q7TAN43.js → chunk-RUZJ2NCD.js} +2 -2
  33. package/build/chunk-SQGBFWJ2.js +114 -0
  34. package/build/chunk-SQGBFWJ2.js.map +1 -0
  35. package/build/{chunk-PBBKM3Z3.js → chunk-T3UD2OLT.js} +51 -51
  36. package/build/chunk-T3UD2OLT.js.map +1 -0
  37. package/build/chunk-UGTXCT5B.js +100 -0
  38. package/build/chunk-UGTXCT5B.js.map +1 -0
  39. package/build/chunk-ZTW5IT5T.js +4 -0
  40. package/build/chunk-ZTW5IT5T.js.map +1 -0
  41. package/build/cloudflare-runtime/entry.js +365 -0
  42. package/build/cloudflare-runtime/getRegisteredExtensions.js +166 -0
  43. package/build/devtools-4JFNYU2B.js +10 -0
  44. package/build/devtools-4JFNYU2B.js.map +1 -0
  45. package/build/index.js +2 -2
  46. package/build/index.js.map +1 -1
  47. package/build/miniflare/worker-entry.js +2767 -0
  48. package/build/platform-sdk/chunk-DGX4CFXG.js +2 -0
  49. package/build/platform-sdk/chunk-DGX4CFXG.js.map +1 -0
  50. package/build/platform-sdk/chunk-UZ376HBX.js +2 -0
  51. package/build/platform-sdk/chunk-UZ376HBX.js.map +1 -0
  52. package/build/platform-sdk/dashboard.js +1 -1
  53. package/build/platform-sdk/dashboard.js.map +1 -1
  54. package/build/platform-sdk/editor.js +1 -1
  55. package/build/platform-sdk/site.js +1 -1
  56. package/build/{preview-HS2NEMQI.js → preview-KSI26ITH.js} +2 -2
  57. package/build/render-command-D47LZ2TZ.js +4 -0
  58. package/build/render-command-D47LZ2TZ.js.map +1 -0
  59. package/client.d.ts +2 -3
  60. package/package.json +10 -10
  61. package/templates/api/files/api.ts.ejs +8 -8
  62. package/templates/event/dependencies.json +5 -0
  63. package/templates/event/files/event.ts.ejs +2 -2
  64. package/templates/service-plugin/ecom-additional-fees/files/plugin.ts.ejs +1 -1
  65. package/templates/service-plugin/ecom-discounts-trigger/files/plugin.ts.ejs +2 -2
  66. package/templates/service-plugin/ecom-payment-settings/files/plugin.ts.ejs +2 -2
  67. package/templates/service-plugin/ecom-shipping-rates/files/plugin.ts.ejs +1 -1
  68. package/templates/service-plugin/ecom-validations/files/plugin.ts.ejs +2 -2
  69. package/build/CreateVersionCommand-C6UP5ORQ.js +0 -4
  70. package/build/CreateVersionCommand-C6UP5ORQ.js.map +0 -1
  71. package/build/DevCommand-BO6KQHRP.js +0 -4
  72. package/build/DevCommand-BO6KQHRP.js.map +0 -1
  73. package/build/GenerateCommand-7ZGIGNPF.js.map +0 -1
  74. package/build/LogsCommand-W5CRI6WA.js +0 -4
  75. package/build/LogsCommand-W5CRI6WA.js.map +0 -1
  76. package/build/PreviewCommand-DWQCCBBZ.js +0 -4
  77. package/build/build-CNTVWU2X.js +0 -4
  78. package/build/build-CNTVWU2X.js.map +0 -1
  79. package/build/chunk-35BUZ7CK.js +0 -4
  80. package/build/chunk-BW3SDDV3.js +0 -4
  81. package/build/chunk-GK5AZX2F.js +0 -4
  82. package/build/chunk-I2Z6OIJW.js +0 -4
  83. package/build/chunk-I2Z6OIJW.js.map +0 -1
  84. package/build/chunk-JVH77HC6.js +0 -4
  85. package/build/chunk-JVH77HC6.js.map +0 -1
  86. package/build/chunk-MIBBNKYS.js +0 -116
  87. package/build/chunk-MIBBNKYS.js.map +0 -1
  88. package/build/chunk-PBBKM3Z3.js.map +0 -1
  89. package/build/chunk-QDPEZ5A2.js +0 -4
  90. package/build/chunk-QDPEZ5A2.js.map +0 -1
  91. package/build/chunk-QT3P4FJP.js +0 -11
  92. package/build/chunk-R3JUFM5X.js +0 -100
  93. package/build/chunk-R3JUFM5X.js.map +0 -1
  94. package/build/chunk-RZI5OJAA.js +0 -10
  95. package/build/chunk-RZI5OJAA.js.map +0 -1
  96. package/build/chunk-VAOLKVA2.js +0 -4
  97. package/build/chunk-VAOLKVA2.js.map +0 -1
  98. package/build/devtools-LGJXFI3T.js +0 -10
  99. package/build/devtools-LGJXFI3T.js.map +0 -1
  100. package/build/platform-sdk/chunk-OSR2I5MY.js +0 -2
  101. package/build/platform-sdk/chunk-OSR2I5MY.js.map +0 -1
  102. package/build/platform-sdk/chunk-SHVQ4QZG.js +0 -2
  103. package/build/platform-sdk/chunk-SHVQ4QZG.js.map +0 -1
  104. package/build/render-command-FB3VVOAQ.js +0 -4
  105. package/build/render-command-FB3VVOAQ.js.map +0 -1
  106. /package/build/{PreviewCommand-DWQCCBBZ.js.map → PreviewCommand-R3AOKI4K.js.map} +0 -0
  107. /package/build/{ServeCommand-T5PQKB57.js.map → ServeCommand-QS4FDP4T.js.map} +0 -0
  108. /package/build/{chunk-KLTGX7JQ.js.map → chunk-3HELHIBJ.js.map} +0 -0
  109. /package/build/{chunk-TRE6G7GA.js.map → chunk-5YVFVF4T.js.map} +0 -0
  110. /package/build/{chunk-6QCQALVT.js.map → chunk-6MMLDNFM.js.map} +0 -0
  111. /package/build/{chunk-IBNMP32R.js.map → chunk-7RL4TN6T.js.map} +0 -0
  112. /package/build/{chunk-GK5AZX2F.js.map → chunk-B2BRLGRZ.js.map} +0 -0
  113. /package/build/{chunk-7OVUUUVH.js.map → chunk-GF543SV4.js.map} +0 -0
  114. /package/build/{chunk-4YU6J2EW.js.map → chunk-NCYXC7TY.js.map} +0 -0
  115. /package/build/{chunk-3Q7TAN43.js.map → chunk-RUZJ2NCD.js.map} +0 -0
  116. /package/build/{preview-HS2NEMQI.js.map → preview-KSI26ITH.js.map} +0 -0
@@ -0,0 +1,4 @@
1
+ import { createRequire as _createRequire } from 'node:module';
2
+ const require = _createRequire(import.meta.url);
3
+ import{v as u,w as a}from"./chunk-SQGBFWJ2.js";import{g as l,h as f,w as N}from"./chunk-UGTXCT5B.js";import{e as k,h as i}from"./chunk-V4TR6DCM.js";i();import{randomUUID as U}from"node:crypto";function L(r,t){r.updateDefaults(V(t))}function V(r){return r?{_client_id:r,_uuid:r,logged_user_id:r,logged_account_id:r,target_account_id:r}:{_client_id:U()}}i();import{uptime as R}from"node:process";i();var w=k(N(),1);import b from"node:os";import{platform as B,version as F}from"node:process";function x({cliVersion:r,flow:t}){return{...t?{flow:t}:{},cliVersion:r,isCI:w.default,nodeVersion:F,osName:J(),osVersion:b.release()}}function J(){switch(B){case"darwin":return"mac";case"win32":return"windows";default:return"linux"}}var y=()=>Math.round(R()*1e3);function h({biLogger:r,command:t,flow:S,cliVersion:E,projectId:p,extensions:o,extraFields:c}){let v=t.opts(),C=t.args,O=new Set(["apiKey"]),d=Object.fromEntries(Object.entries(v).map(([e,s])=>{let _=O.has(e)?"<censored>":s;return[e,_]})),n={command:t.name(),arguments:C.join(","),flags:Object.keys(d).length?JSON.stringify(d):""};return r.report(u({...x({cliVersion:E,flow:S}),...n,...p?{projectId:p}:{},...c?{extraFields:JSON.stringify(c)}:{},isValid:!0})),{succeed(){r.report(a({...n,...o?{extensions:JSON.stringify(o)}:{},duration:y(),isSuccess:!0,isValid:!0}))},failed(e){let s=l(e)?{errorType:f(e)?"SystemError":"UserError",errorName:e.name,errorMessage:e.message}:e instanceof Error?{errorType:"UnknownError",errorName:e.name,errorMessage:e.message}:{errorType:"UnknownError",errorMessage:JSON.stringify(e)};r.report(a({...n,...s,...o?{extensions:JSON.stringify(o)}:{},duration:y(),isSuccess:!1,isValid:!0}))}}}i();export{L as a,h as b};
4
+ //# sourceMappingURL=chunk-ZTW5IT5T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../cli-telemetry/src/add-user-fields.ts","../../cli-telemetry/src/command-bi-event.ts","../../cli-telemetry/src/environment.ts","../../cli-telemetry/src/index.ts"],"sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { BiLogger } from '@wix/wix-bi-logger-client';\n\nexport function addUserFields(logger: BiLogger, userId: string) {\n logger.updateDefaults(resolveUserFields(userId));\n}\n\nexport function resolveUserFields(userId?: string): Record<string, string> {\n if (!userId) {\n // anonymous users need to have an identifier for the bi platform to accept the event\n return {\n _client_id: randomUUID(),\n };\n }\n\n return {\n _client_id: userId,\n _uuid: userId,\n logged_user_id: userId,\n logged_account_id: userId,\n target_account_id: userId,\n };\n}\n","import type { BiLogger } from '@wix/wix-bi-logger-client';\nimport {\n wixCliCliCommand,\n wixCliCliCommandStatus,\n} from '@wix/bi-logger-wix-cli/v2';\nimport { isCliError, isCliSystemError } from '@wix/cli-error';\nimport { uptime } from 'node:process';\nimport { getEnvironmentInfo } from './environment.js';\n\ninterface CommandLike {\n name: () => string;\n args: string[];\n opts: () => Record<string, unknown>;\n}\n\nconst getDuration = () => Math.round(uptime() * 1000);\n\nexport function reportCommandStartEvent({\n biLogger,\n command,\n flow,\n cliVersion,\n projectId,\n extensions,\n extraFields,\n}: {\n biLogger: BiLogger;\n command: CommandLike;\n flow: 'Apps' | 'Sites' | null;\n cliVersion: string;\n projectId?: string;\n extensions?: Record<string, number>;\n extraFields?: Record<string, unknown>;\n}) {\n const options = command.opts();\n const args = command.args;\n\n const privateOptions = new Set(['apiKey']);\n const sanitizedOptions = Object.fromEntries(\n Object.entries(options).map(([flagName, flagValue]) => {\n const value = privateOptions.has(flagName) ? '<censored>' : flagValue;\n return [flagName, value];\n })\n );\n\n const commandFields = {\n command: command.name(),\n arguments: args.join(','),\n flags: Object.keys(sanitizedOptions).length\n ? JSON.stringify(sanitizedOptions)\n : '',\n };\n\n void biLogger.report(\n wixCliCliCommand({\n ...getEnvironmentInfo({ cliVersion, flow }),\n ...commandFields,\n ...(projectId ? { projectId } : {}),\n ...(extraFields ? { extraFields: JSON.stringify(extraFields) } : {}),\n isValid: true,\n })\n );\n\n return {\n succeed() {\n void biLogger.report(\n wixCliCliCommandStatus({\n ...commandFields,\n ...(extensions ? { extensions: JSON.stringify(extensions) } : {}),\n duration: getDuration(),\n isSuccess: true,\n isValid: true,\n })\n );\n },\n failed(error: unknown) {\n const errorFields = isCliError(error)\n ? {\n errorType: isCliSystemError(error) ? 'SystemError' : 'UserError',\n errorName: error.name,\n errorMessage: error.message,\n }\n : error instanceof Error\n ? {\n errorType: 'UnknownError',\n errorName: error.name,\n errorMessage: error.message,\n }\n : {\n errorType: 'UnknownError',\n errorMessage: JSON.stringify(error),\n };\n\n void biLogger.report(\n wixCliCliCommandStatus({\n ...commandFields,\n ...errorFields,\n ...(extensions ? { extensions: JSON.stringify(extensions) } : {}),\n duration: getDuration(),\n isSuccess: false,\n isValid: true,\n })\n );\n },\n };\n}\n","import os from 'node:os';\nimport { platform, version as nodeVersion } from 'node:process';\nimport isCI from 'is-ci';\n\nexport function getEnvironmentInfo({\n cliVersion,\n flow,\n}: {\n cliVersion: string;\n flow: 'Sites' | 'Apps' | null;\n}) {\n return {\n ...(flow ? { flow } : {}),\n cliVersion,\n isCI,\n nodeVersion,\n osName: getOsName(),\n osVersion: os.release(),\n };\n}\n\nexport type EnvironmentInfo = ReturnType<typeof getEnvironmentInfo>;\n\n// https://stackoverflow.com/a/8684009\nfunction getOsName() {\n switch (platform) {\n case 'darwin':\n return 'mac';\n case 'win32':\n return 'windows';\n default:\n return 'linux';\n }\n}\n","export type { BiLogger } from '@wix/wix-bi-logger-client';\nexport { createBiLogger } from './create-bi-logger.js';\nexport { reportCommandStartEvent } from './command-bi-event.js';\nexport { addUserFields } from './add-user-fields.js';\n"],"mappings":";;oJAAAA,IAAA,OAAS,cAAAC,MAAkB,cAGpB,SAASC,EAAcC,EAAkBC,EAAgB,CAC9DD,EAAO,eAAeE,EAAkBD,CAAM,CAAC,CACjD,CAEO,SAASC,EAAkBD,EAAyC,CACzE,OAAKA,EAOE,CACL,WAAYA,EACZ,MAAOA,EACP,eAAgBA,EAChB,kBAAmBA,EACnB,kBAAmBA,CACrB,EAXS,CACL,WAAYH,EAAW,CACzB,CAUJ,CCtBAK,IAMA,OAAS,UAAAC,MAAc,eCNvBC,IAEA,IAAAC,EAAiB,SAFjB,OAAOC,MAAQ,UACf,OAAS,YAAAC,EAAU,WAAWC,MAAmB,eAG1C,SAASC,EAAmB,CACjC,WAAAC,EACA,KAAAC,CACF,EAGG,CACD,MAAO,CACL,GAAIA,EAAO,CAAE,KAAAA,CAAK,EAAI,CAAC,EACvB,WAAAD,EACA,OAAAE,QACA,YAAAJ,EACA,OAAQK,EAAU,EAClB,UAAWP,EAAG,QAAQ,CACxB,CACF,CAKA,SAASO,GAAY,CACnB,OAAQN,EAAU,CAChB,IAAK,SACH,MAAO,MACT,IAAK,QACH,MAAO,UACT,QACE,MAAO,OACX,CACF,CDlBA,IAAMO,EAAc,IAAM,KAAK,MAAMC,EAAO,EAAI,GAAI,EAE7C,SAASC,EAAwB,CACtC,SAAAC,EACA,QAAAC,EACA,KAAAC,EACA,WAAAC,EACA,UAAAC,EACA,WAAAC,EACA,YAAAC,CACF,EAQG,CACD,IAAMC,EAAUN,EAAQ,KAAK,EACvBO,EAAOP,EAAQ,KAEfQ,EAAiB,IAAI,IAAI,CAAC,QAAQ,CAAC,EACnCC,EAAmB,OAAO,YAC9B,OAAO,QAAQH,CAAO,EAAE,IAAI,CAAC,CAACI,EAAUC,CAAS,IAAM,CACrD,IAAMC,EAAQJ,EAAe,IAAIE,CAAQ,EAAI,aAAeC,EAC5D,MAAO,CAACD,EAAUE,CAAK,CACzB,CAAC,CACH,EAEMC,EAAgB,CACpB,QAASb,EAAQ,KAAK,EACtB,UAAWO,EAAK,KAAK,GAAG,EACxB,MAAO,OAAO,KAAKE,CAAgB,EAAE,OACjC,KAAK,UAAUA,CAAgB,EAC/B,EACN,EAEA,OAAKV,EAAS,OACZe,EAAiB,CACf,GAAGC,EAAmB,CAAE,WAAAb,EAAY,KAAAD,CAAK,CAAC,EAC1C,GAAGY,EACH,GAAIV,EAAY,CAAE,UAAAA,CAAU,EAAI,CAAC,EACjC,GAAIE,EAAc,CAAE,YAAa,KAAK,UAAUA,CAAW,CAAE,EAAI,CAAC,EAClE,QAAS,EACX,CAAC,CACH,EAEO,CACL,SAAU,CACHN,EAAS,OACZiB,EAAuB,CACrB,GAAGH,EACH,GAAIT,EAAa,CAAE,WAAY,KAAK,UAAUA,CAAU,CAAE,EAAI,CAAC,EAC/D,SAAUR,EAAY,EACtB,UAAW,GACX,QAAS,EACX,CAAC,CACH,CACF,EACA,OAAOqB,EAAgB,CACrB,IAAMC,EAAcC,EAAWF,CAAK,EAChC,CACE,UAAWG,EAAiBH,CAAK,EAAI,cAAgB,YACrD,UAAWA,EAAM,KACjB,aAAcA,EAAM,OACtB,EACAA,aAAiB,MACjB,CACE,UAAW,eACX,UAAWA,EAAM,KACjB,aAAcA,EAAM,OACtB,EACA,CACE,UAAW,eACX,aAAc,KAAK,UAAUA,CAAK,CACpC,EAEClB,EAAS,OACZiB,EAAuB,CACrB,GAAGH,EACH,GAAGK,EACH,GAAId,EAAa,CAAE,WAAY,KAAK,UAAUA,CAAU,CAAE,EAAI,CAAC,EAC/D,SAAUR,EAAY,EACtB,UAAW,GACX,QAAS,EACX,CAAC,CACH,CACF,CACF,CACF,CEzGAyB","names":["init_esm_shims","randomUUID","addUserFields","logger","userId","resolveUserFields","init_esm_shims","uptime","init_esm_shims","import_is_ci","os","platform","nodeVersion","getEnvironmentInfo","cliVersion","flow","isCI","getOsName","getDuration","uptime","reportCommandStartEvent","biLogger","command","flow","cliVersion","projectId","extensions","extraFields","options","args","privateOptions","sanitizedOptions","flagName","flagValue","value","commandFields","wixCliCliCommand","getEnvironmentInfo","wixCliCliCommandStatus","error","errorFields","isCliError","isCliSystemError","init_esm_shims"]}
@@ -0,0 +1,365 @@
1
+ // src/utils.ts
2
+ import { dirname, sep } from "node:path";
3
+ import { AppStrategy } from "@wix/sdk";
4
+ var supportedMethods = ["GET", "POST", "PUT", "DELETE"];
5
+ function deriveTagName(elementPath) {
6
+ return dirname(elementPath).split(sep).at(-1);
7
+ }
8
+ function createAppStrategy(opts = {}) {
9
+ return AppStrategy({
10
+ ...opts,
11
+ appId: import.meta.env.APP_ID,
12
+ appSecret: import.meta.env.APP_SECRET,
13
+ publicKey: import.meta.env.PUBLIC_KEY
14
+ });
15
+ }
16
+ function isMethodSupported(method) {
17
+ return supportedMethods.includes(method);
18
+ }
19
+ function isAPI(value) {
20
+ return typeof value === "object" && value !== null && supportedMethods.some((method) => method in value);
21
+ }
22
+ function formatError(error) {
23
+ if (import.meta.env.DEV && error instanceof Error) {
24
+ return error.stack;
25
+ }
26
+ return "internal server error";
27
+ }
28
+
29
+ // src/apiHandler.ts
30
+ var ApiHandler = class {
31
+ constructor(apis2, callsHandler) {
32
+ this.callsHandler = callsHandler;
33
+ this.apis = Object.entries(apis2).reduce(
34
+ (acc, [key, value]) => {
35
+ return {
36
+ ...acc,
37
+ [deriveTagName(key)]: value
38
+ };
39
+ },
40
+ {}
41
+ );
42
+ }
43
+ apis;
44
+ async handle(name, request) {
45
+ const { method } = request;
46
+ if (!isMethodSupported(method)) {
47
+ return null;
48
+ }
49
+ if (!name) {
50
+ return null;
51
+ }
52
+ const mod = this.apis[name];
53
+ if (!mod) {
54
+ return null;
55
+ }
56
+ const api = await mod();
57
+ if (!isAPI(api)) {
58
+ return null;
59
+ }
60
+ const handler = api[method];
61
+ if (!handler) {
62
+ return null;
63
+ }
64
+ if (!this.callsHandler) {
65
+ throw new Error("passing a `callsHandler` is required for running APIs");
66
+ }
67
+ const accessToken = request.headers.get("Authorization");
68
+ return this.callsHandler.run(accessToken, null, () => handler(request));
69
+ }
70
+ };
71
+
72
+ // src/eventsHandler.ts
73
+ import { createClient } from "@wix/sdk";
74
+ var EventHandler = class {
75
+ constructor(events2, callsHandler) {
76
+ this.events = events2;
77
+ this.callsHandler = callsHandler;
78
+ this.wixClient = createClient({
79
+ auth: createAppStrategy()
80
+ });
81
+ }
82
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
+ wixClient;
84
+ registeredEvents = /* @__PURE__ */ new Map();
85
+ async initialize() {
86
+ this.wixClient.enableContext("global");
87
+ for (const [eventFilename, loadEventFile] of Object.entries(this.events)) {
88
+ const unbind = this.wixClient.webhooks.on(
89
+ "registered",
90
+ (eventDefinition) => {
91
+ const existingRegisteredEvents = this.registeredEvents.get(eventFilename) ?? [];
92
+ this.registeredEvents.set(eventFilename, [
93
+ ...existingRegisteredEvents,
94
+ eventDefinition.type
95
+ ]);
96
+ }
97
+ );
98
+ try {
99
+ await loadEventFile();
100
+ } finally {
101
+ unbind();
102
+ }
103
+ }
104
+ }
105
+ async handle(request) {
106
+ if (!this.callsHandler) {
107
+ throw new Error(
108
+ "passing a `callsHandler` is required for running events"
109
+ );
110
+ }
111
+ const processedEvent = await this.wixClient.webhooks.parseRequest(request);
112
+ return this.callsHandler.run(
113
+ null,
114
+ processedEvent.instanceId,
115
+ () => this.wixClient.webhooks.executeHandlers(processedEvent)
116
+ );
117
+ }
118
+ getRegisteredEvents() {
119
+ const entries = Array.from(this.registeredEvents.entries());
120
+ return entries.reduce(
121
+ (acc, [filename, registeredEvents]) => {
122
+ return {
123
+ ...acc,
124
+ [filename]: registeredEvents
125
+ };
126
+ },
127
+ {}
128
+ );
129
+ }
130
+ };
131
+
132
+ // src/servicePluginHandler.ts
133
+ import { createClient as createClient2 } from "@wix/sdk";
134
+ var ServicePluginHandler = class {
135
+ constructor(servicePlugins2, callsHandler) {
136
+ this.servicePlugins = servicePlugins2;
137
+ this.callsHandler = callsHandler;
138
+ this.wixClient = createClient2({
139
+ auth: createAppStrategy()
140
+ });
141
+ }
142
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
143
+ wixClient;
144
+ registeredServicePlugins = /* @__PURE__ */ new Map();
145
+ async initialize() {
146
+ this.wixClient.enableContext("global");
147
+ for (const [servicePluginFilename, loadServicePluginFile] of Object.entries(
148
+ this.servicePlugins
149
+ )) {
150
+ const unbind = this.wixClient.servicePlugins.on(
151
+ "registered",
152
+ (servicePluginDefinition) => {
153
+ this.registeredServicePlugins.set(
154
+ servicePluginFilename,
155
+ servicePluginDefinition.componentType
156
+ );
157
+ }
158
+ );
159
+ try {
160
+ await loadServicePluginFile();
161
+ } finally {
162
+ unbind();
163
+ }
164
+ }
165
+ }
166
+ getRegisteredServicePlugins() {
167
+ const entries = Array.from(this.registeredServicePlugins.entries());
168
+ return entries.reduce(
169
+ (acc, [filename, registeredServicePlugin]) => {
170
+ return {
171
+ ...acc,
172
+ [filename]: registeredServicePlugin
173
+ };
174
+ },
175
+ {}
176
+ );
177
+ }
178
+ async handle(request) {
179
+ if (!this.callsHandler) {
180
+ throw new Error(
181
+ "passing a `callsHandler` is required for running service plugins"
182
+ );
183
+ }
184
+ const processedRequest = await this.wixClient.servicePlugins.parseRequest(
185
+ request
186
+ );
187
+ const { instanceId } = processedRequest.metadata;
188
+ const servicePluginData = await this.callsHandler.run(
189
+ null,
190
+ instanceId,
191
+ () => this.wixClient.servicePlugins.executeHandler(
192
+ processedRequest,
193
+ request.url
194
+ )
195
+ );
196
+ return Response.json(servicePluginData);
197
+ }
198
+ };
199
+
200
+ // src/callsHandler.ts
201
+ import { AsyncLocalStorage } from "node:async_hooks";
202
+ import { createClient as createClient3 } from "@wix/sdk";
203
+
204
+ // ../cli-test-overrides/src/unsafe.ts
205
+ import process from "node:process";
206
+
207
+ // ../cli-test-overrides/src/constants.ts
208
+ var TEST_OVERRIDES_ENV_VAR = "WIX_CLI_TEST_OVERRIDES";
209
+
210
+ // ../cli-test-overrides/src/unsafe.ts
211
+ function getTestOverrides() {
212
+ const rawOverrides = process.env[TEST_OVERRIDES_ENV_VAR];
213
+ if (!rawOverrides) {
214
+ return {};
215
+ }
216
+ return JSON.parse(rawOverrides);
217
+ }
218
+
219
+ // src/callsHandler.ts
220
+ var CallsHandler = class {
221
+ wixClient;
222
+ elevatedWixClient;
223
+ asyncLocalStorage = new AsyncLocalStorage();
224
+ constructor() {
225
+ this.wixClient = createClient3({
226
+ auth: {
227
+ getAuthHeaders: (host) => {
228
+ const store = this.asyncLocalStorage.getStore();
229
+ if (!store || !store.auth) {
230
+ throw new Error("Cannot find an authentication strategy");
231
+ }
232
+ return store.auth.getAuthHeaders(host);
233
+ }
234
+ }
235
+ });
236
+ this.elevatedWixClient = createClient3({
237
+ auth: {
238
+ getAuthHeaders: async (host) => {
239
+ const store = this.asyncLocalStorage.getStore();
240
+ if (!store) {
241
+ throw new Error("Cannot find an authentication strategy");
242
+ }
243
+ if (store.elevatedAuth) {
244
+ return store.elevatedAuth.getAuthHeaders(host);
245
+ }
246
+ if (!store.auth) {
247
+ throw new Error("Cannot find an elevated authentication strategy");
248
+ }
249
+ return store.auth.elevated().then((elevatedAuth) => elevatedAuth.getAuthHeaders(host));
250
+ }
251
+ }
252
+ });
253
+ }
254
+ async initialize() {
255
+ this.wixClient.enableContext("global");
256
+ this.elevatedWixClient.enableContext("global", { elevated: true });
257
+ }
258
+ async run(accessToken, instanceId, fn) {
259
+ const { sdkAuthServerBaseUrl: authServerBaseUrl } = getTestOverrides();
260
+ const auth = accessToken ? createAppStrategy({ accessToken, authServerBaseUrl }) : null;
261
+ const elevatedAuth = instanceId ? createAppStrategy({ instanceId, authServerBaseUrl }) : null;
262
+ return this.asyncLocalStorage.run({ auth, elevatedAuth }, fn);
263
+ }
264
+ };
265
+
266
+ // src/initialize.ts
267
+ var logError = (error) => {
268
+ console.error(error instanceof Error ? error.stack : error);
269
+ };
270
+ async function initialize({
271
+ apis: apis2,
272
+ events: events2,
273
+ servicePlugins: servicePlugins2
274
+ }) {
275
+ const callsHandler = new CallsHandler();
276
+ const apiHandler = new ApiHandler(apis2, callsHandler);
277
+ const eventsHandler = new EventHandler(events2, callsHandler);
278
+ const servicePluginHandler = new ServicePluginHandler(
279
+ servicePlugins2,
280
+ callsHandler
281
+ );
282
+ await eventsHandler.initialize();
283
+ await servicePluginHandler.initialize();
284
+ await callsHandler.initialize();
285
+ return {
286
+ async fetch(request) {
287
+ if (request.method === "OPTIONS") {
288
+ return new Response("{}", {
289
+ status: 200,
290
+ headers: {
291
+ "Access-Control-Allow-Origin": "*",
292
+ "Access-Control-Allow-Methods": "*",
293
+ "Access-Control-Allow-Headers": "Authorization,Content-Type"
294
+ }
295
+ });
296
+ }
297
+ const url = new URL(request.url);
298
+ const [endpointName, pathName] = url.pathname.split("/").filter(Boolean);
299
+ if (import.meta.env.DEV) {
300
+ if (endpointName === "__get-registered-events") {
301
+ return Response.json(eventsHandler.getRegisteredEvents());
302
+ }
303
+ if (endpointName === "__get-registered-service-plugins") {
304
+ return Response.json(
305
+ servicePluginHandler.getRegisteredServicePlugins()
306
+ );
307
+ }
308
+ }
309
+ if (endpointName === "service-plugins") {
310
+ return servicePluginHandler.handle(request).catch((error) => {
311
+ logError(error);
312
+ return new Response(formatError(error), { status: 500 });
313
+ });
314
+ }
315
+ if (endpointName === "webhooks") {
316
+ return eventsHandler.handle(request).then(() => {
317
+ return new Response("ok");
318
+ }).catch((error) => {
319
+ logError(error);
320
+ return new Response(formatError(error), { status: 500 });
321
+ });
322
+ }
323
+ if (endpointName === "functions") {
324
+ const response = await apiHandler.handle(pathName, request).catch((error) => {
325
+ logError(error);
326
+ return new Response(formatError(error), { status: 500 });
327
+ }).then((response2) => {
328
+ if (response2) {
329
+ response2.headers.append("Access-Control-Allow-Origin", "*");
330
+ response2.headers.append("Access-Control-Allow-Methods", "*");
331
+ response2.headers.append("Access-Control-Allow-Headers", "*");
332
+ return response2;
333
+ }
334
+ });
335
+ if (response) {
336
+ return response;
337
+ }
338
+ }
339
+ return new Response("not found", { status: 404 });
340
+ }
341
+ };
342
+ }
343
+
344
+ // src/globPatterns.ts
345
+ var apis = import.meta.glob("/src/backend/api/*/api.ts", {
346
+ eager: false
347
+ });
348
+ var events = import.meta.glob("/src/backend/events/*/event.ts", {
349
+ eager: false
350
+ });
351
+ var servicePlugins = import.meta.glob(
352
+ "/src/backend/service-plugins/*/*/plugin.ts",
353
+ {
354
+ eager: false
355
+ }
356
+ );
357
+
358
+ // src/entry.ts
359
+ var entry_default = await initialize({ apis, events, servicePlugins });
360
+ if (import.meta.hot) {
361
+ import.meta.hot.accept();
362
+ }
363
+ export {
364
+ entry_default as default
365
+ };
@@ -0,0 +1,166 @@
1
+ // src/eventsHandler.ts
2
+ import { createClient } from "@wix/sdk";
3
+
4
+ // src/utils.ts
5
+ import { AppStrategy } from "@wix/sdk";
6
+ function createAppStrategy(opts = {}) {
7
+ return AppStrategy({
8
+ ...opts,
9
+ appId: import.meta.env.APP_ID,
10
+ appSecret: import.meta.env.APP_SECRET,
11
+ publicKey: import.meta.env.PUBLIC_KEY
12
+ });
13
+ }
14
+
15
+ // src/eventsHandler.ts
16
+ var EventHandler = class {
17
+ constructor(events2, callsHandler) {
18
+ this.events = events2;
19
+ this.callsHandler = callsHandler;
20
+ this.wixClient = createClient({
21
+ auth: createAppStrategy()
22
+ });
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ wixClient;
26
+ registeredEvents = /* @__PURE__ */ new Map();
27
+ async initialize() {
28
+ this.wixClient.enableContext("global");
29
+ for (const [eventFilename, loadEventFile] of Object.entries(this.events)) {
30
+ const unbind = this.wixClient.webhooks.on(
31
+ "registered",
32
+ (eventDefinition) => {
33
+ const existingRegisteredEvents = this.registeredEvents.get(eventFilename) ?? [];
34
+ this.registeredEvents.set(eventFilename, [
35
+ ...existingRegisteredEvents,
36
+ eventDefinition.type
37
+ ]);
38
+ }
39
+ );
40
+ try {
41
+ await loadEventFile();
42
+ } finally {
43
+ unbind();
44
+ }
45
+ }
46
+ }
47
+ async handle(request) {
48
+ if (!this.callsHandler) {
49
+ throw new Error(
50
+ "passing a `callsHandler` is required for running events"
51
+ );
52
+ }
53
+ const processedEvent = await this.wixClient.webhooks.parseRequest(request);
54
+ return this.callsHandler.run(
55
+ null,
56
+ processedEvent.instanceId,
57
+ () => this.wixClient.webhooks.executeHandlers(processedEvent)
58
+ );
59
+ }
60
+ getRegisteredEvents() {
61
+ const entries = Array.from(this.registeredEvents.entries());
62
+ return entries.reduce(
63
+ (acc, [filename, registeredEvents]) => {
64
+ return {
65
+ ...acc,
66
+ [filename]: registeredEvents
67
+ };
68
+ },
69
+ {}
70
+ );
71
+ }
72
+ };
73
+
74
+ // src/servicePluginHandler.ts
75
+ import { createClient as createClient2 } from "@wix/sdk";
76
+ var ServicePluginHandler = class {
77
+ constructor(servicePlugins2, callsHandler) {
78
+ this.servicePlugins = servicePlugins2;
79
+ this.callsHandler = callsHandler;
80
+ this.wixClient = createClient2({
81
+ auth: createAppStrategy()
82
+ });
83
+ }
84
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85
+ wixClient;
86
+ registeredServicePlugins = /* @__PURE__ */ new Map();
87
+ async initialize() {
88
+ this.wixClient.enableContext("global");
89
+ for (const [servicePluginFilename, loadServicePluginFile] of Object.entries(
90
+ this.servicePlugins
91
+ )) {
92
+ const unbind = this.wixClient.servicePlugins.on(
93
+ "registered",
94
+ (servicePluginDefinition) => {
95
+ this.registeredServicePlugins.set(
96
+ servicePluginFilename,
97
+ servicePluginDefinition.componentType
98
+ );
99
+ }
100
+ );
101
+ try {
102
+ await loadServicePluginFile();
103
+ } finally {
104
+ unbind();
105
+ }
106
+ }
107
+ }
108
+ getRegisteredServicePlugins() {
109
+ const entries = Array.from(this.registeredServicePlugins.entries());
110
+ return entries.reduce(
111
+ (acc, [filename, registeredServicePlugin]) => {
112
+ return {
113
+ ...acc,
114
+ [filename]: registeredServicePlugin
115
+ };
116
+ },
117
+ {}
118
+ );
119
+ }
120
+ async handle(request) {
121
+ if (!this.callsHandler) {
122
+ throw new Error(
123
+ "passing a `callsHandler` is required for running service plugins"
124
+ );
125
+ }
126
+ const processedRequest = await this.wixClient.servicePlugins.parseRequest(
127
+ request
128
+ );
129
+ const { instanceId } = processedRequest.metadata;
130
+ const servicePluginData = await this.callsHandler.run(
131
+ null,
132
+ instanceId,
133
+ () => this.wixClient.servicePlugins.executeHandler(
134
+ processedRequest,
135
+ request.url
136
+ )
137
+ );
138
+ return Response.json(servicePluginData);
139
+ }
140
+ };
141
+
142
+ // src/globPatterns.ts
143
+ var apis = import.meta.glob("/src/backend/api/*/api.ts", {
144
+ eager: false
145
+ });
146
+ var events = import.meta.glob("/src/backend/events/*/event.ts", {
147
+ eager: false
148
+ });
149
+ var servicePlugins = import.meta.glob(
150
+ "/src/backend/service-plugins/*/*/plugin.ts",
151
+ {
152
+ eager: false
153
+ }
154
+ );
155
+
156
+ // src/getRegisteredExtensions.ts
157
+ var eventsHandler = new EventHandler(events);
158
+ var servicePluginHandler = new ServicePluginHandler(servicePlugins);
159
+ await eventsHandler.initialize();
160
+ await servicePluginHandler.initialize();
161
+ var getRegisteredEvents = async () => eventsHandler.getRegisteredEvents();
162
+ var getRegisteredServicePlugins = async () => servicePluginHandler.getRegisteredServicePlugins();
163
+ export {
164
+ getRegisteredEvents,
165
+ getRegisteredServicePlugins
166
+ };