@shoplineos/cli 1.0.0 → 1.0.2-beta.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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{isProd:()=>a,initSentry:()=>s,reportBug:()=>u,reportAndExit:()=>l,reportHttpRes:()=>d,default:()=>c});const e=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=o(t);if(n&&n.has(e))return n.get(e);var r={},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=i?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r.default=e,n&&n.set(e,r),r}(require("@sentry/node")),t=require("../services/extension/utils"),n=i(require("../../package.json"));require("../utils/ui/render");const r=i(require("../utils/winston"));function i(e){return e&&e.__esModule?e:{default:e}}function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(o=function(e){return e?n:t})(e)}const a=!0;function s(){e.init({dsn:"https://81320b4cb2cd4e26a1a10071d4345f9b@sentry-new.myshopline.com/482",release:n.default.version,environment:"production",enabled:a,tracesSampleRate:1,initialScope:{tags:{"shopline-cli":"external"}},beforeSend:e=>(e.tags={...e.tags,"cli-trace-id":r.default.getTraceId()},e)})}function u(n){e.setTag("date_time",Date.now()),e.setTag("date_human",(0,t.formatTime)()),e.setTag("time_zone",new Date().getTimezoneOffset()),"string"==typeof n?e.captureMessage(n):e.captureException(n)}function l(t){a?(u(t),e.close(2e3).then(()=>{process.exit(1)})):process.exit(1)}function d(t){var n,r,i,o,a,s,u,l,d;let c=null==t?void 0:null===(n=t.data)||void 0===n?void 0:n.success,f=null==t?void 0:null===(r=t.data)||void 0===r?void 0:r.code;(null==t?void 0:null===(i=t.data)||void 0===i?void 0:i.msg)||null==t||null===(o=t.data)||void 0===o||o.message,l=t.config.baseURL,d=t.config.url,l.endsWith("/")&&d.startsWith("/")?d.slice(1):l.endsWith("/")||d.startsWith("/");let p=(null==t?void 0:null===(a=t.data)||void 0===a?void 0:a.trace_id)||(null==t?void 0:null===(s=t.data)||void 0===s?void 0:s.traceid)||(null==t?void 0:null===(u=t.headers)||void 0===u?void 0:u["x-request-id"])||"";("boolean"==typeof c&&!1===c||200!==t.status)&&(e.setTags({error_code:f,trace_id:p}),e.setExtra("http_request",t.config),e.setExtra("http_response",t))}const c=e;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{isProd:()=>a,initSentry:()=>s,reportBug:()=>u,reportAndExit:()=>d,reportHttpRes:()=>l,default:()=>c});const e=function(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=i(t);if(n&&n.has(e))return n.get(e);var r={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in e)if("default"!==a&&Object.prototype.hasOwnProperty.call(e,a)){var s=o?Object.getOwnPropertyDescriptor(e,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=e[a]}return r.default=e,n&&n.set(e,r),r}(require("@sentry/node")),t=require("../services/extension/utils"),n=o(require("../../package.json")),r=o(require("../utils/winston"));function o(e){return e&&e.__esModule?e:{default:e}}function i(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(i=function(e){return e?n:t})(e)}const a=!0;function s(){e.init({dsn:"https://81320b4cb2cd4e26a1a10071d4345f9b@sentry-new.myshopline.com/482",release:n.default.version,environment:"production",enabled:a,tracesSampleRate:1,initialScope:{tags:{"shopline-cli":"external"}},beforeSend:e=>(e.tags={...e.tags,"cli-trace-id":r.default.getTraceId()},e)})}function u(n){e.setTag("date_time",Date.now()),e.setTag("date_human",(0,t.formatTime)()),e.setTag("time_zone",new Date().getTimezoneOffset()),"string"==typeof n?e.captureMessage(n):e.captureException(n)}function d(t){a?(u(t),e.close(2e3).then(()=>{process.exit(1)})):process.exit(1)}function l(t){var n,r,o,i,a,s;let u=(null==t?void 0:null===(n=t.data)||void 0===n?void 0:n.success)||(null==t?void 0:null===(r=t.data)||void 0===r?void 0:r.code)==="SUCCESS",d=null==t?void 0:null===(o=t.data)||void 0===o?void 0:o.code,l=(null==t?void 0:null===(i=t.data)||void 0===i?void 0:i.trace_id)||(null==t?void 0:null===(a=t.data)||void 0===a?void 0:a.traceid)||(null==t?void 0:null===(s=t.headers)||void 0===s?void 0:s["x-request-id"])||"";("boolean"==typeof u&&!1===u||200!==t.status)&&(e.setTags({error_code:d,trace_id:l}),e.setExtra("http_request",t.config),e.setExtra("http_response",t))}const c=e;
@@ -1,4 +1,6 @@
1
- "use strict";var e,t,r;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{ECategory:()=>e,ERegisterType:()=>t,EExtensionState:()=>r,http:()=>T,authHttp:()=>m,changeBaseURL:()=>O,createExtensionInstance:()=>R,pushExtension:()=>y,getAppList:()=>L,getAppExtList:()=>v,getPartnerList:()=>A,getStoreList:()=>N,getAccessToken:()=>U,getAppInfo:()=>b,getStoreInfo:()=>C,getFunctionTemplates:()=>q,registerFunction:()=>I,pushFunction:()=>H});const n=g(require("form-data")),s=g(require("axios")),o=g(require("../../helpers/config")),a=require("./const"),i=g(require("../../utils/debug")),u=require("../../utils/error"),p=require("../../utils/messages"),l=require("../../utils/misc"),c=require("../../helpers/sentry"),d=require("../../utils/const"),f=g(require("../../utils/winston"));function g(e){return e&&e.__esModule?e:{default:e}}function E(e){return`${e}/api/v1/cli/app/ext`}function h(e){return`${e}/api/v1/cli`}function _(e,t={}){let r=e=>{let{loginInfo:t,dfpToken:r,currentPartner:n}=o.default;if(t){n&&(t.a_dc_partnerid=n.id,Object.assign(e.headers,{dc_partner_f:"1"}));let s=Object.keys(t).map(e=>`${e}=${t[e]}`).join(";");Object.assign(e.headers,{cookie:s,"dfp-token":r||""})}};e.interceptors.request.use(e=>(i.default.printRequest(e),t.useThemeAuth&&r(e),e.data instanceof n.default&&Object.assign(e.headers,e.data.getHeaders()),f.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e),e=>Promise.reject(e)),e.interceptors.response.use(e=>{var t,r,n,s,d;let g=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,E=null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code,{config:h}=e,_=(0,l.getUrlOrigin)(h.baseURL);i.default.printResponse(h,e),(0,c.reportHttpRes)(e);let T=(null==e?void 0:null===(n=e.headers)||void 0===n?void 0:n.traceid)||"";if(f.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:T}),E===a.ERRORS.PARTNER_INFO_NOT_COMPLETE)throw o.default.deleteCurrentPartner(),new u.ApiError({code:E,message:e.data.message,tryMessage:_?(0,p.getMessage)("extension.create.connect.try_partner_info_not_complete_message",{link:`${_}/info/fill`}):void 0});if(E===a.ERRORS.USER_NOT_LOGIN)throw new u.ApiError({code:E,message:e.data.message,tryMessage:(0,p.getMessage)("core.whoami.not_logged_in")});if("boolean"==typeof g&&!1===g)throw new u.AbortError(`url: ${e.config.url}
2
- error code: ${E}
3
- error message: ${null==e?void 0:null===(d=e.data)||void 0===d?void 0:d.message}
4
- trace id: ${T}`);return null===(s=e.data)||void 0===s?void 0:s.data},e=>(e.response&&(0,c.reportHttpRes)(e.response),(0,c.reportBug)(e),Promise.reject(e)))}const T=s.default.create({baseURL:E(a.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json","User-Agent":d.CLI_USER_AGENT}});_(T);const m=s.default.create({baseURL:h(a.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json"}});function O(e){let t=a.EXTENSION_ENDPOINTS[e];T.defaults.baseURL=E(t),m.defaults.baseURL=h(t)}_(m,{useThemeAuth:!0}),function(e){e.CHECKOUT="CHECKOUT",e.THEME="THEME"}(e||(e={})),function(e){e.THEME_APP_BLOCK="THEME_APP_BLOCK",e.CHECKOUT_UI="CHECKOUT_UI"}(t||(t={})),function(e){e.DRAFT="DRAFT",e.WORKING_DRAFT="WORKING_DRAFT"}(r||(r={}));const R=e=>T.post("/register",JSON.stringify({...e})),y=e=>T.post("/push",e),L=e=>m.post("/auth/app/list",e),v=e=>m.post("/auth/app/ext/list",e),A=()=>m.get("/auth/partner/list");function N(e){return m.post("/auth/store/list",{partnerId:e})}function U(e){return m.post("/auth/generate/accessToken",e)}function b(e,t){return m.post("/auth/app/queryByAppKey",{partnerId:e,appKey:t})}function C(e,t){return m.post("/auth/store/queryByHandle",{partnerId:e,handle:t})}function q(){return m.post("/function/template/list")}function I(e){return m.post("/function/register",e)}function H(e){return m.post("/function/deploy",e)}
1
+ "use strict";var e,t,r;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{ECategory:()=>e,ERegisterType:()=>t,EExtensionState:()=>r,http:()=>L,authHttp:()=>O,changeBaseURL:()=>y,createExtensionInstance:()=>U,pushExtension:()=>A,getAppList:()=>C,getAppExtList:()=>I,getPartnerList:()=>b,getStoreList:()=>x,getAccessToken:()=>S,getAppInfo:()=>q,getStoreInfo:()=>P,getFunctionTemplates:()=>H,registerFunction:()=>$,pushFunction:()=>j});const n=E(require("form-data")),o=E(require("axios")),a=E(require("../../helpers/config")),s=require("./const"),i=E(require("../../utils/debug")),u=require("../../utils/error"),l=require("../../utils/ui/render"),d=require("../../utils/messages"),c=require("../../utils/misc"),p=require("../../helpers/sentry"),f=require("../../utils/const"),g=E(require("../../utils/winston"));function E(e){return e&&e.__esModule?e:{default:e}}function h(e){return`${e}/api/v1/cli/app/ext`}function v(e){return`${e}/api/v3/cli/app/ext`}function T(e){return`${e}/api/v1/cli`}function _(e){return`${e}/api/v3/cli`}function m(e,t={}){let r=e=>{let{loginInfo:t,dfpToken:r,currentPartner:n}=a.default;if(t){n&&(t.a_dc_partnerid=n.id,Object.assign(e.headers,{dc_partner_f:"1"}));let o=Object.keys(t).map(e=>`${e}=${t[e]}`).join(";");Object.assign(e.headers,{cookie:o,"dfp-token":r||""})}};e.interceptors.request.use(e=>(i.default.printRequest(e),t.useThemeAuth&&r(e),e.data instanceof n.default&&Object.assign(e.headers,e.data.getHeaders()),g.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e),e=>Promise.reject(e)),e.interceptors.response.use(e=>{var t,r,n,o,l,f,E,h;let v=(null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success)||(null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code)==="SUCCESS",T=null==e?void 0:null===(n=e.data)||void 0===n?void 0:n.code,{config:_}=e,m=(0,c.getUrlOrigin)(_.baseURL);i.default.printResponse(_,e),(0,p.reportHttpRes)(e);let L=(null==e?void 0:null===(o=e.headers)||void 0===o?void 0:o.traceid)||(null==e?void 0:null===(l=e.data)||void 0===l?void 0:l.trace_id)||(null==e?void 0:null===(f=e.data)||void 0===f?void 0:f.traceId)||"";if(g.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:L}),T===s.ERRORS.PARTNER_INFO_NOT_COMPLETE)throw a.default.deleteCurrentPartner(),new u.ApiError({code:T,message:e.data.message,tryMessage:m?(0,d.getMessage)("extension.create.connect.try_partner_info_not_complete_message",{link:`${m}/info/fill`}):void 0});if(T===s.ERRORS.USER_NOT_LOGIN)throw new u.ApiError({code:T,message:e.data.message,tryMessage:(0,d.getMessage)("core.whoami.not_logged_in")});if("boolean"==typeof v&&!1===v){let t="";try{t=JSON.stringify(e.data,null,2)}catch(r){t=`error code: ${T}
2
+ error message: ${null==e?void 0:null===(h=e.data)||void 0===h?void 0:h.message}
3
+ trace id: ${L}`}throw new u.AbortError(`url: ${e.config.baseURL+e.config.url}`,t)}return null===(E=e.data)||void 0===E?void 0:E.data},e=>{if((0,p.reportBug)(e),e.response){var t,r,n,o;(0,p.reportHttpRes)(e.response);let{response:a}=e,s=a.config.url,i=(null==a?void 0:null===(t=a.data)||void 0===t?void 0:t.trace_id)||(null==a?void 0:null===(r=a.data)||void 0===r?void 0:r.traceid)||(null==a?void 0:null===(n=a.data)||void 0===n?void 0:n.traceId)||(null==a?void 0:null===(o=a.headers)||void 0===o?void 0:o["x-request-id"])||"";(0,l.renderFatalError)(Error(`url: ${s}
4
+ status: ${a.status}
5
+ traceId: ${i}
6
+ ${e}`))}return Promise.reject(e)})}const L=o.default.create({baseURL:h(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json","User-Agent":f.CLI_USER_AGENT}}),R=o.default.create({baseURL:v(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json","User-Agent":f.CLI_USER_AGENT}});m(L),m(R);const O=o.default.create({baseURL:T(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json"}}),N=o.default.create({baseURL:_(s.DEFAULT_EXTENSION_ENDPOINT),maxBodyLength:1/0,maxContentLength:1/0,headers:{"Content-Type":"application/json"}});function y(e){let t=s.EXTENSION_ENDPOINTS[e];L.defaults.baseURL=h(t),O.defaults.baseURL=T(t),R.defaults.baseURL=v(t),N.defaults.baseURL=_(t)}m(O,{useThemeAuth:!0}),m(N,{useThemeAuth:!0}),function(e){e.CHECKOUT="CHECKOUT",e.THEME="THEME"}(e||(e={})),function(e){e.THEME_APP_BLOCK="THEME_APP_BLOCK",e.CHECKOUT_UI="CHECKOUT_UI"}(t||(t={})),function(e){e.DRAFT="DRAFT",e.WORKING_DRAFT="WORKING_DRAFT"}(r||(r={}));const U=e=>R.post("/register",JSON.stringify({...e})),A=e=>R.post("/push",e),C=e=>O.post("/auth/app/list",e),I=e=>N.post("/auth/app/ext/list",e),b=()=>O.get("/auth/partner/list");function x(e){return O.post("/auth/store/list",{partnerId:e})}function S(e){return O.post("/auth/generate/accessToken",e)}function q(e,t){return O.post("/auth/app/queryByAppKey",{partnerId:e,appKey:t})}function P(e,t){return O.post("/auth/store/queryByHandle",{partnerId:e,handle:t})}function H(){return N.post("/function/template/list")}function $(e){return N.post("/function/register",e)}function j(e){return N.post("/function/deploy",e)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,s){for(var o in s)Object.defineProperty(e,o,{enumerable:!0,get:s[o]})}(exports,{EXTENSION_ENDPOINTS:()=>o,DEFAULT_EXTENSION_ENDPOINT:()=>t,DEFAULT_EXTENSION_NAME:()=>r,ENVS:()=>_,TARGETS:()=>c,EXTENSION_LINK_PATH:()=>E,TAGS:()=>n,OPTION_TYPES:()=>i,EXTENSION_NAME_LENGTH_LIMIT:()=>a,MAX_ALL_FILE_SIZE:()=>l,MAX_BLOCKS_FILE_COUNT:()=>T,MAX_BLOCKS_FILE_SIZE:()=>p,MAX_BLOCKS_FILE_SIZE_3:()=>u,SUPPORTED_ASSET_EXTS:()=>N,SUPPORTED_ASSET_EXTS_3:()=>m,SUPPORTED_BUCKETS:()=>d,SUPPORTED_BUCKETS_3:()=>O,SUPPORTED_LOCALE_EXTS:()=>I,EXTENSION_CONFIG_FILE:()=>S,CHECKOUT_UI_CONFIG_FILE:()=>L,FUNCTION_CONFIG_FILE:()=>g,ERRORS:()=>A,ALL_TEMPLATES:()=>P,ALL_TEMPLATES_3:()=>h,EXTENSION_TYPES:()=>U,DEFAULT_EXTENSION_TYPE:()=>C,DEFAULT_CHECKOUT_UI_CUSTOMIZER_NAME:()=>M});const e=require("../../utils/messages"),s=require("./types"),o={dev:"https://devcenter.myshoplinedev.com",test:"https://opendoc.myshoplinestg.com",pre:"https://devcenter-pre.myshopline.com",prod:"https://developer.myshopline.com"},t=o.prod,r="shopline-app-extension",_=["dev","test","pre","prod"],c=["section","head","body"],E="app/edit-extension",n=["article","aside","div","footer","header","section"],i=["checkbox","radio","select"],a=50,l=10485760,T=25,p=102400,u=102400,N=[".jpg",".js",".css",".png",".svg",".hbs"],m=[".jpg",".js",".css",".png",".svg"],d=["assets","blocks","snippets","locales"],O=["blocks","components","i18n","public","compatibility"],I=[".json"],S=".shopline-cli.yml",L="shopline.ui.customizer.toml",g="shopline.function.extension.toml",A={EXTENSION_NAME_LENGTH_LIMIT:(0,e.getMessage)("extension.create.invalid_name",{limit:a}),ENV_INVALID:(0,e.getMessage)("extension.invalid_env",{envs:_.join(", ")}),ENV_FILE_NOT_FOUND:(0,e.getMessage)("extension.no_env_file"),SHOPLINE_CONFIG_NOT_FOUND:(0,e.getMessage)("extension.no_config_file",{config_name:S}),UNSUPPORTED_PROJECT_TYPE:(0,e.getMessage)("extension.invalid_type"),REPEAT_DIR_NAME:"The theme app extension directory already exists. Please rename or use another name.",INVALID_INTERPOLATION:"must be of the form {{ apps.metafields.<namespace>.<key>.value }}",PARTNER_INFO_NOT_COMPLETE:"PARTNER_INFO_NOT_COMPLETE",USER_NOT_LOGIN:"USER_NOT_LOGIN"},P=["index","collections_all","collection","products/detail","cart","blogs/list","blogs/detail","404","products/search","page","customers/login","customers/register","customers/account","customers/reset_password","customers/addresses","customers/order/list","customers/order/detail","password"],h=["index","collections_all","collection","product","cart","blog","article","404","search","page","policy","password","gift_card","customers/login","customers/register","customers/account","customers/reset_password","customers/addresses","customers/order/list","customers/orders","customers/order/detail","customers/order","customers/activate_account","customers/message","customers/forgot_password","customers/company","customers/logout","customers/bind_account","customers/unsub","customers/unsub_feedback"],U=[{label:"Theme App Extension",value:s.EExtensionTypes.themeAppExtension}];U.push({label:"Checkout UI Customizer",value:s.EExtensionTypes.checkoutUiCustomizer});const C="themeAppExtension",M="checkout-ui-customizer";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,s){for(var o in s)Object.defineProperty(e,o,{enumerable:!0,get:s[o]})}(exports,{EXTENSION_ENDPOINTS:()=>o,DEFAULT_EXTENSION_ENDPOINT:()=>t,DEFAULT_EXTENSION_NAME:()=>E,ENVS:()=>_,TARGETS:()=>i,EXTENSION_LINK_PATH:()=>n,TAGS:()=>r,OPTION_TYPES:()=>c,EXTENSION_NAME_LENGTH_LIMIT:()=>T,MAX_ALL_FILE_SIZE:()=>a,MAX_BLOCKS_FILE_COUNT:()=>l,MAX_BLOCKS_FILE_SIZE:()=>p,MAX_BLOCKS_FILE_SIZE_3:()=>N,SUPPORTED_ASSET_EXTS:()=>O,SUPPORTED_ASSET_EXTS_3:()=>m,SUPPORTED_BUCKETS:()=>I,SUPPORTED_BUCKETS_3:()=>d,SUPPORTED_LOCALE_EXTS:()=>u,EXTENSION_CONFIG_FILE:()=>S,CHECKOUT_UI_CONFIG_FILE:()=>L,FUNCTION_CONFIG_FILE:()=>A,ERRORS:()=>P,ALL_TEMPLATES:()=>g,ALL_TEMPLATES_3:()=>h,EXTENSION_TYPES:()=>U,DEFAULT_EXTENSION_TYPE:()=>C,DEFAULT_CHECKOUT_UI_CUSTOMIZER_NAME:()=>M});const e=require("../../utils/messages"),s=require("./types"),o={dev:"https://devcenter.myshoplinedev.com",test:"https://opendoc.myshoplinestg.com",pre:"https://devcenter-pre.myshopline.com",prod:"https://developer.myshopline.com"},t=o.prod,E="shopline-app-extension",_=["dev","test","pre","prod"],i=["section","head","body"],n="app/edit-extension",r=["article","aside","div","footer","header","section"],c=["checkbox","radio","select"],T=50,a=10485760,l=25,p=102400,N=102400,O=[".jpg",".js",".css",".png",".svg",".hbs"],m=[".jpg",".js",".css",".png",".svg"],I=["assets","blocks","snippets","locales"],d=["blocks","components","i18n","public","compatibility"],u=[".json"],S=".shopline-cli.yml",L="shopline.ui.customizer.toml",A="shopline.function.extension.toml",P={EXTENSION_NAME_LENGTH_LIMIT:(0,e.getMessage)("extension.create.invalid_name",{limit:T}),ENV_INVALID:(0,e.getMessage)("extension.invalid_env",{envs:_.join(", ")}),ENV_FILE_NOT_FOUND:(0,e.getMessage)("extension.no_env_file"),SHOPLINE_CONFIG_NOT_FOUND:(0,e.getMessage)("extension.no_config_file",{config_name:S}),UNSUPPORTED_PROJECT_TYPE:(0,e.getMessage)("extension.invalid_type"),REPEAT_DIR_NAME:"The theme app extension directory already exists. Please rename or use another name.",INVALID_INTERPOLATION:"must be of the form {{ apps.metafields.<namespace>.<key>.value }}",PARTNER_INFO_NOT_COMPLETE:"PARTNER_INFO_NOT_COMPLETE",USER_NOT_LOGIN:"USER_NOT_LOGIN"},g=["index","collections_all","collection","products/detail","cart","blogs/list","blogs/detail","404","products/search","page","customers/login","customers/register","customers/account","customers/reset_password","customers/addresses","customers/order/list","customers/order/detail","password"],h=["index","collections_all","collection","product","cart","blog","article","404","search","page","policy","password","gift_card","customers/login","customers/register","customers/account","customers/addresses","customers/orders","customers/order","customers/activate_account","customers/forgot_password","customers/company"],U=[{label:"Theme App Extension",value:s.EExtensionTypes.themeAppExtension}];U.push({label:"Checkout UI Customizer",value:s.EExtensionTypes.checkoutUiCustomizer});const C="themeAppExtension",M="checkout-ui-customizer";
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{createEntry:()=>x,beforeCreate:()=>E,getSelectedExtType:()=>w,buildGenerateOptions:()=>m,renderSuccessMessage:()=>q});const e=require("fs-extra"),t=require("../../../utils/ui/ui"),n=require("../env"),r=require("../extension"),i=require("../types"),o=require("../utils"),a=require("../api"),u=require("../generate"),s=require("../../../utils/error"),l=require("../const"),c=require("../../../utils/path"),p=require("../../../utils/output"),d=require("../../../utils/ui/render"),f=require("../functions/info"),h=g(require("../../../utils/winston")),y=g(require("../../../helpers/config"));function g(e){return e&&e.__esModule?e:{default:e}}async function x(e){let t=await E(e),n=await m(t),r=await (0,u.generateExtension)(n);await q(r),h.default.log(`Extension created: ${r.directory}`)}async function E(t){var i;let a=null==t?void 0:t.name,u=null!==(i=null==t?void 0:t.cwd)&&void 0!==i?i:process.cwd(),d=await (0,n.getEnv)();h.default.log(`Current store environment: ${d}`);let f=await w(),g=(0,o.getExtensionName)(a,f);h.default.log(`Current extension name: ${g}`),function(t,n){if(!t)throw new s.AbortError("Please specify an extension name");if(t.length>l.EXTENSION_NAME_LENGTH_LIMIT)throw new s.AbortError(l.ERRORS.EXTENSION_NAME_LENGTH_LIMIT);if((0,e.existsSync)((0,c.joinPath)(n,t)))throw new s.AbortError((0,p.outputContent)`${p.outputToken.cyan(t)} directory already exists.`.value)}(g,u);let x=await (0,r.getSelectedPartner)();y.default.currentPartner=x;let E=await (0,r.getSelectedApp)(x);return{extensionName:g,cwd:u,env:d,partnerInfo:x,appInfo:E,type:f}}async function w(){let e=[];h.default.log("Loading function extension templates..."),e=await (0,a.getFunctionTemplates)(),h.default.log("Choosing extension type to create...");let n=await (0,t.renderSelectPrompt)({message:"What type of extension are you creating?",choices:(0,o.buildExtensionTypeChoice)(e)});return h.default.log(`Current selected extension type: ${n}`),n}async function m(e){let{extensionName:t,appInfo:n,type:r,env:o,cwd:a,partnerInfo:u}=e,s=async()=>{if(r===i.EExtensionTypes.themeAppExtension)return"https://github.com/shoplineos/theme-app-extension-template.git";if(r===i.EExtensionTypes.checkoutUiCustomizer)return"https://github.com/shoplineos/checkout-ui-customizer-template.git";let e=await (0,f.getFunctionInfo)(r);if(e)return e.templateGit},l=await s();return h.default.log(`Current clone url: ${l}`),{name:t,app:{appKey:n.appKey,appSecret:n.appSecret},partnerId:u.id,type:r,cloneUrl:l,env:o,cwd:a}}async function q(e){let{specification:t}=e,n={headline:["Your extension was created in",{filePath:e.directory},{char:"."}],nextSteps:[],reference:[]};t.type===i.EExtensionTypes.checkoutUiCustomizer&&n.nextSteps.push(["To preview this extension along with the rest of the project, run",{command:"sl extension serve"}]),(0,d.renderSuccess)(n)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{createEntry:()=>h,beforeCreate:()=>g,getSelectedExtType:()=>x,buildGenerateOptions:()=>E,renderSuccessMessage:()=>w});const e=require("fs-extra"),t=require("../../../utils/ui/ui"),n=require("../env"),r=require("../extension"),i=require("../types"),o=require("../utils"),a=require("../api"),u=require("../generate"),s=require("../../../utils/error"),c=require("../const"),l=require("../../../utils/path"),p=require("../../../utils/output"),d=require("../../../utils/ui/render"),f=require("../functions/info"),y=function(e){return e&&e.__esModule?e:{default:e}}(require("../../../utils/winston"));async function h(e){let t=await g(e),n=await E(t),r=await (0,u.generateExtension)(n);await w(r),y.default.log(`Extension created: ${r.directory}`)}async function g(t){var i;let a=null==t?void 0:t.name,u=null!==(i=null==t?void 0:t.cwd)&&void 0!==i?i:process.cwd(),d=await (0,n.getEnv)();y.default.log(`Current store environment: ${d}`);let f=await x(),h=(0,o.getExtensionName)(a,f);y.default.log(`Current extension name: ${h}`),function(t,n){if(!t)throw new s.AbortError("Please specify an extension name");if(t.length>c.EXTENSION_NAME_LENGTH_LIMIT)throw new s.AbortError(c.ERRORS.EXTENSION_NAME_LENGTH_LIMIT);if((0,e.existsSync)((0,l.joinPath)(n,t)))throw new s.AbortError((0,p.outputContent)`${p.outputToken.cyan(t)} directory already exists.`.value)}(h,u);let g=await (0,r.getSelectedPartner)(),E=await (0,r.getSelectedApp)(g);return{extensionName:h,cwd:u,env:d,partnerInfo:g,appInfo:E,type:f}}async function x(){let e=[];y.default.log("Loading function extension templates..."),e=await (0,a.getFunctionTemplates)(),y.default.log("Choosing extension type to create...");let n=await (0,t.renderSelectPrompt)({message:"What type of extension are you creating?",choices:(0,o.buildExtensionTypeChoice)(e)});return y.default.log(`Current selected extension type: ${n}`),n}async function E(e){let{extensionName:t,appInfo:n,type:r,env:o,cwd:a,partnerInfo:u}=e,s=async()=>{if(r===i.EExtensionTypes.themeAppExtension)return"https://github.com/shoplineos/theme-app-extension-template.git";if(r===i.EExtensionTypes.checkoutUiCustomizer)return"https://github.com/shoplineos/checkout-ui-customizer-template.git";let e=await (0,f.getFunctionInfo)(r);if(e)return e.templateGit},c=await s();return y.default.log(`Current clone url: ${c}`),{name:t,app:{appKey:n.appKey,appSecret:n.appSecret},partnerId:u.id,type:r,cloneUrl:c,env:o,cwd:a}}async function w(e){let{specification:t}=e,n={headline:["Your extension was created in",{filePath:e.directory},{char:"."}],nextSteps:[],reference:[]};t.type===i.EExtensionTypes.checkoutUiCustomizer&&n.nextSteps.push(["To preview this extension along with the rest of the project, run",{command:"sl extension serve"}]),(0,d.renderSuccess)(n)}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getSelectedPartner:()=>u,getPartnerName:()=>s,getSelectedApp:()=>c,getAppLists:()=>p,getSelectedShop:()=>d,handleNoStore:()=>g,getPartnerAccessToken:()=>f,getStoreId:()=>h,getAppName:()=>v,getAvailableProductSkuId:()=>w});const e=require("../../utils/ui/ui"),t=require("./api"),r=require("./utils"),a=require("../../utils/error"),n=require("../../utils/ui/render"),o=require("./openapi"),i=require("../../utils/output"),l=function(e){return e&&e.__esModule?e:{default:e}}(require("../../utils/winston"));async function u(){let n=[];if(l.default.log("Loading partner list..."),await (0,e.renderTasks)([{title:"Loading available partner organizations",task:async()=>{n=await (0,t.getPartnerList)()}}]),!n.length)throw new a.AbortError("No partner in your account.");l.default.log("Selecting partner organization...");let o=await (0,e.renderSelectPrompt)({message:"Select partner organization?",choices:(0,r.buildPartnerChoice)(n)}),i=n.find(e=>e.id===o).partnerName;return l.default.log(`Selected partner organization: ${i}`),{id:o,partnerName:i}}async function s(e){let r=await (0,t.getPartnerList)(),n=r.find(t=>t.id===e);if(null==n?void 0:n.partnerName)return n.partnerName;throw new a.AbortError((0,i.outputContent)`The partner id: ${i.outputToken.cyan(e)} does not exist in your account.`,(0,i.outputContent)`Please add the ${i.outputToken.magenta("--reset")} flag after your command.`)}async function c(t){let a=[];if(l.default.log("Loading your apps..."),await (0,e.renderTasks)([{title:"Loading your apps",task:async()=>{a=await p(t.id)}}]),!a.length)throw Error("No apps in your account.");l.default.log("Selecting app...");let n=await (0,e.renderSelectPrompt)({message:"Which app would like to register this extension with?",choices:(0,r.buildAppChoice)(a,t.partnerName)});return l.default.log(`Selected app: ${JSON.stringify(n)}`),n}async function p(e){let{dataList:r=[]}=await (0,t.getAppList)({pageSize:300,partnerId:e});return r}async function d(a,n){let o=[];if(await (0,e.renderTasks)([{title:"Loading your development store",task:async()=>{o=await (0,t.getStoreList)(a)}}]),o.length){if(1===o.length){let[e]=o;return e}{let t=await (0,e.renderSelectPrompt)({message:"Which development store would you like to use?",choices:(0,r.buildStoreChoice)(o)});return t}}await g(a,n)}async function g(t,a){(0,n.renderWarning)({headline:["This partner account does not have a development store."],body:["Please visit",{link:{label:"the developer platform",url:(0,r.getDeveloperPlatformLink)(a)}},"to create a development store and try again."]});let o=await (0,e.renderSelectPrompt)({message:"How will you proceed to the next step?",choices:[{label:"Developement store has been created, please retry!",value:1},{label:"Abort",value:0}]});o?await d(t,a):process.exit(1)}async function f(e,r){let a=await (0,t.getAccessToken)({storeId:e,appKey:r});return a.token||""}async function h(e,r){let a=await (0,t.getStoreInfo)(e,r);return a.storeId||""}async function v(e,r){let a=await (0,t.getAppInfo)(e,r);return a.appName||""}async function w(e,t,r){let n=new a.AbortError("Your store need to have at least one product to sever checkout ui customizer"),l=await f(e,t),u=await (0,o.getOpenApiHttp)(l,r);try{let e=await u.get("/products/products.json",{params:{status:"active"}});if(e.products.length>0){var s,c;(0,i.outputDebug)((0,i.outputContent)`You have an available first product variants: ${i.outputToken.json(null===(s=e.products)||void 0===s?void 0:null===(c=s[0])||void 0===c?void 0:c.variants)}`);let t=(()=>{var t;let r=e.products.find(e=>e.variants.length&&e.variants.some(e=>e.id));return null===(t=null==r?void 0:r.variants[0])||void 0===t?void 0:t.id})();if(t)return t}}catch(e){throw n}throw n}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{getSelectedPartner:()=>c,getPartnerName:()=>p,getSelectedApp:()=>d,getAppLists:()=>g,getSelectedShop:()=>f,handleNoStore:()=>h,getPartnerAccessToken:()=>v,getStoreId:()=>w,getAppName:()=>m,getAvailableProductSkuId:()=>y});const e=require("../../utils/ui/ui"),t=require("./api"),r=require("./utils"),a=require("../../utils/error"),n=require("../../utils/ui/render"),o=require("./openapi"),i=require("../../utils/output"),l=s(require("../../utils/winston")),u=s(require("../../helpers/config"));function s(e){return e&&e.__esModule?e:{default:e}}async function c(){let n=[];if(l.default.log("Loading partner list..."),await (0,e.renderTasks)([{title:"Loading available partner organizations",task:async()=>{n=await (0,t.getPartnerList)()}}]),!n.length)throw new a.AbortError("No partner in your account.");l.default.log("Selecting partner organization...");let o=await (0,e.renderSelectPrompt)({message:"Select partner organization?",choices:(0,r.buildPartnerChoice)(n)}),i=n.find(e=>e.id===o).partnerName;l.default.log(`Selected partner organization: ${i}`);let s={id:o,partnerName:i};return u.default.currentPartner=s,s}async function p(e){let r=await (0,t.getPartnerList)(),n=r.find(t=>t.id===e);if(null==n?void 0:n.partnerName)return n.partnerName;throw new a.AbortError((0,i.outputContent)`The partner id: ${i.outputToken.cyan(e)} does not exist in your account.`,(0,i.outputContent)`Please add the ${i.outputToken.magenta("--reset")} flag after your command.`)}async function d(t){let a=[];if(l.default.log("Loading your apps..."),await (0,e.renderTasks)([{title:"Loading your apps",task:async()=>{a=await g(t.id)}}]),!a.length)throw Error("No apps in your account.");l.default.log("Selecting app...");let n=await (0,e.renderSelectPrompt)({message:"Which app would like to register this extension with?",choices:(0,r.buildAppChoice)(a,t.partnerName)});return l.default.log(`Selected app: ${JSON.stringify(n)}`),n}async function g(e){let{dataList:r=[]}=await (0,t.getAppList)({pageSize:300,partnerId:e});return r}async function f(a,n){let o=[];if(await (0,e.renderTasks)([{title:"Loading your development store",task:async()=>{o=await (0,t.getStoreList)(a)}}]),o.length){if(1===o.length){let[e]=o;return e}{let t=await (0,e.renderSelectPrompt)({message:"Which development store would you like to use?",choices:(0,r.buildStoreChoice)(o)});return t}}await h(a,n)}async function h(t,a){(0,n.renderWarning)({headline:["This partner account does not have a development store."],body:["Please visit",{link:{label:"the developer platform",url:(0,r.getDeveloperPlatformLink)(a)}},"to create a development store and try again."]});let o=await (0,e.renderSelectPrompt)({message:"How will you proceed to the next step?",choices:[{label:"Developement store has been created, please retry!",value:1},{label:"Abort",value:0}]});o?await f(t,a):process.exit(1)}async function v(e,r){let a=await (0,t.getAccessToken)({storeId:e,appKey:r});return a.token||""}async function w(e,r){let a=await (0,t.getStoreInfo)(e,r);return a.storeId||""}async function m(e,r){let a=await (0,t.getAppInfo)(e,r);return a.appName||""}async function y(e,t,r){let n=new a.AbortError("Your store need to have at least one product to sever checkout ui customizer"),l=await v(e,t),u=await (0,o.getOpenApiHttp)(l,r);try{let e=await u.get("/products/products.json",{params:{status:"active"}});if(e.products.length>0){var s,c;(0,i.outputDebug)((0,i.outputContent)`You have an available first product variants: ${i.outputToken.json(null===(s=e.products)||void 0===s?void 0:null===(c=s[0])||void 0===c?void 0:c.variants)}`);let t=(()=>{var t;let r=e.products.find(e=>e.variants.length&&e.variants.some(e=>e.id));return null===(t=null==r?void 0:r.variants[0])||void 0===t?void 0:t.id})();if(t)return t}}catch(e){throw n}throw n}
@@ -1,8 +1,8 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"pushFunctionExt",{enumerable:!0,get:()=>v});const e=y(require("fs")),t=y(require("archiver")),n=y(require("form-data")),i=y(require("../../../helpers/config")),o=require("../../../utils/ui/ui"),r=require("../env"),u=require("../api"),a=require("./info"),s=require("../../../utils/error"),l=require("../../../utils/output"),p=require("./schemas"),d=require("../../../utils/system"),c=require("../const"),f=require("../../../utils/path"),h=require("../zip"),w=require("../utils"),m=require("../../../utils/ui/render"),g=require("../../../utils/fs"),E=y(require("../../../utils/winston"));function y(e){return e&&e.__esModule?e:{default:e}}async function v(n){let i=n.readEnvContent(),o=await (0,p.getExtensionConfig)(n.cwd);E.default.log(`Create function (${n.type}) extension instance...`);let u=await I(i,n.type,o.version);(0,l.outputDebug)((0,l.outputContent)`Write ${l.outputToken.json(u)} content to ${l.outputToken.cyan(`.env.${n.env}`)} file to ${n.cwd}`),E.default.log(`Write .env.${n.env} file...`),(0,r.writeEnvFile)(n.env,u,n.cwd);let d=await (0,a.getFunctionInfo)(n.type),w=o.build;if(null==w?void 0:w.command){var m,g;E.default.log(`Build function extension with ${w.command} to ${w.path}...`),await b(w.command,w.path,{env:n.env,type:n.type});let r=(0,f.joinPath)(n.cwd,`${i.EXTENSION_TITLE}.zip`);E.default.log(`Compress function extension to ${r}...`),await (m=null==d?void 0:d.filterPath,g=n.cwd,new Promise((n,i)=>{(0,l.outputDebug)((0,l.outputContent)`Compressing to ${l.outputToken.path(r)}`);let o=(0,t.default)("zip",{zlib:{level:9}}),u=e.default.createWriteStream(r);for(let e of(u.on("close",()=>{}),u.on("finish",()=>{n({size:o.pointer()})}),o.on("error",()=>{i(new s.AbortError("Failed to compress!"))}),o.pipe(u),m))o.glob(e,{cwd:g});o.finalize()}));let u=await N(r,o,i,n);E.default.log("Push function extension..."),await P(u),E.default.log("Push function extension success!"),(0,l.outputDebug)("Remove .zip file"),E.default.log("Remove .zip file..."),(0,h.removeZip)(r)}else throw new s.AbortError((0,l.outputContent)`The function extension ${n.type} doesn't have a build command or it's empty
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"pushFunctionExt",{enumerable:!0,get:()=>v});const e=y(require("fs")),t=y(require("archiver")),n=y(require("form-data")),i=y(require("../../../helpers/config")),o=require("../../../utils/ui/ui"),r=require("../env"),u=require("../api"),a=require("./info"),s=require("../../../utils/error"),l=require("../../../utils/output"),p=require("./schemas"),d=require("../../../utils/system"),c=require("../const"),f=require("../../../utils/path"),h=require("../zip"),w=require("../utils"),m=require("../../../utils/ui/render"),E=require("../../../utils/fs"),g=y(require("../../../utils/winston"));function y(e){return e&&e.__esModule?e:{default:e}}async function v(n){let o=n.readEnvContent(),u=await (0,p.getExtensionConfig)(n.cwd);g.default.log(`Create function (${n.type}) extension instance...`);let d=await I(o,n.type,u.version);(0,l.outputDebug)((0,l.outputContent)`Write ${l.outputToken.json(d)} content to ${l.outputToken.cyan(`.env.${n.env}`)} file to ${n.cwd}`),g.default.log(`Write .env.${n.env} file...`),(0,r.writeEnvFile)(n.env,d,n.cwd);let w=await (0,a.getFunctionInfo)(n.type),m=u.build;if(null==m?void 0:m.command){var E,y;g.default.log(`Build function extension with ${m.command} to ${m.path}...`),await P(m.command,m.path,{env:n.env,type:n.type});let r=(0,f.joinPath)(n.cwd,`${o.EXTENSION_TITLE}.zip`);g.default.log(`Compress function extension to ${r}...`),await (E=null==w?void 0:w.filterPath,y=n.cwd,new Promise((n,i)=>{(0,l.outputDebug)((0,l.outputContent)`Compressing to ${l.outputToken.path(r)}`);let o=(0,t.default)("zip",{zlib:{level:9}}),u=e.default.createWriteStream(r);for(let e of(u.on("close",()=>{}),u.on("finish",()=>{n({size:o.pointer()})}),o.on("error",()=>{i(new s.AbortError("Failed to compress!"))}),o.pipe(u),E))o.glob(e,{cwd:y});o.finalize()}));let a=await T(r,u,o,n);o.PARTNER_ID&&(i.default.currentPartner={id:o.PARTNER_ID,partnerName:""}),g.default.log("Push function extension..."),await N(a),g.default.log("Push function extension success!"),(0,l.outputDebug)("Remove .zip file"),g.default.log("Remove .zip file..."),(0,h.removeZip)(r)}else throw new s.AbortError((0,l.outputContent)`The function extension ${n.type} doesn't have a build command or it's empty
2
2
  Edit the ${c.FUNCTION_CONFIG_FILE} configuration file and set how to build the extension.
3
3
 
4
4
  [build]
5
5
  command = "{COMMAND}"
6
6
 
7
7
  Note that the command must output a dist/function.wasm file.
8
- `)}async function I(e,t,n){let i=e;return i.EXTENSION_UUID&&!i.EXTENSION_UUID.startsWith("dev-")?e:(await (0,o.renderTasks)([{title:"Registering with SHOPLINE",task:async()=>{let o=await (0,a.getFunctionInfo)(t),r=await (0,u.registerFunction)({appKey:e.SHOPLINE_APP_KEY,functionType:t,version:n,language:null==o?void 0:o.language}),{uuid:l}=r||{};if(!l)throw new s.AbortError("Failed to register. Please retry again!");i.EXTENSION_UUID=l}}]),i)}async function b(e,t,{type:n,env:i}){(0,l.outputDebug)("Start build function extension"),await (0,o.renderConcurrent)({processes:[{prefix:"Building extension with npm",action:async(o,r)=>{let u=e.split(/\s+/).filter(Boolean),a=[`-o=${t}`,`--env=${i}`,`--type=${n}`],s=["exec","--"].concat(u).concat(a);await (0,d.exec)("npm",s,{stdout:o,stderr:r})}}],showTimestamps:!1})}async function P(e){(0,l.outputDebug)((0,l.outputContent)`Pushing ${l.outputToken.path(e.output)} file to remote`),await (0,o.renderTasks)([{title:"Pushing your extension to Shopline",task:async()=>{await q(e)}}])}async function q(e){let t=new n.default;t.append("wasmFile",e.wasmFile),t.append("codeFile",e.zipFile),t.append("uuid",e.uuid),t.append("appKey",e.appKey),t.append("funcInput",e.inputGraphqlContent),t.append("storeId",e.storeId),t.append("UiCustomizer",e.uiPaths),t.append("name",e.name);let i=await (0,u.pushFunction)(t);i?(0,m.renderSuccess)({headline:["Pushed",{userInput:e.name},"to Shopline!"]}):(0,m.renderFatalError)(new s.AbortError(`Pushed to SHOPLINE with errors on ${(0,w.formatTime)()}`))}async function N(t,n,o,r){var u,a;let l=e.default.createReadStream(t),p=null===(u=n.build)||void 0===u?void 0:u.path,d=null===(a=n.ui)||void 0===a?void 0:a.paths,c=(0,f.joinPath)(r.cwd,p);if(!await (0,g.fileExists)(c))throw new s.AbortError("Cannot found wasm file in this project");let h=e.default.createReadStream(c),w=(0,f.joinPath)(r.cwd,"input.graphql");if(!await (0,g.fileExists)(w))throw new s.AbortError("Cannot found input.graphql file in this project");let m=await (0,g.readFile)(w),E=(()=>{let e=Object.keys(d);if(e.length>0){let t=e.map(e=>({name:e,path:d[e]}));return JSON.stringify(t)}return""})();return{wasmFile:h,zipFile:l,output:t,uuid:o.EXTENSION_UUID,appKey:o.SHOPLINE_APP_KEY,name:o.EXTENSION_TITLE,inputGraphqlContent:m,storeId:i.default.currentStoreId,uiPaths:E}}
8
+ `)}async function I(e,t,n){let i=e;return i.EXTENSION_UUID&&!i.EXTENSION_UUID.startsWith("dev-")?e:(await (0,o.renderTasks)([{title:"Registering with SHOPLINE",task:async()=>{let o=await (0,a.getFunctionInfo)(t),r=await (0,u.registerFunction)({appKey:e.SHOPLINE_APP_KEY,functionType:t,version:n,language:null==o?void 0:o.language}),{uuid:l}=r||{};if(!l)throw new s.AbortError("Failed to register. Please retry again!");i.EXTENSION_UUID=l}}]),i)}async function P(e,t,{type:n,env:i}){(0,l.outputDebug)("Start build function extension"),await (0,o.renderConcurrent)({processes:[{prefix:"Building extension with npm",action:async(o,r)=>{let u=e.split(/\s+/).filter(Boolean),a=[`-o=${t}`,`--env=${i}`,`--type=${n}`],s=["exec","--"].concat(u).concat(a);await (0,d.exec)("npm",s,{stdout:o,stderr:r})}}],showTimestamps:!1})}async function N(e){(0,l.outputDebug)((0,l.outputContent)`Pushing ${l.outputToken.path(e.output)} file to remote`),await (0,o.renderTasks)([{title:"Pushing your extension to Shopline",task:async()=>{await b(e)}}])}async function b(e){let t=new n.default;t.append("wasmFile",e.wasmFile),t.append("codeFile",e.zipFile),t.append("uuid",e.uuid),t.append("appKey",e.appKey),t.append("funcInput",e.inputGraphqlContent),t.append("storeId",e.storeId),t.append("uiExt",e.uiPaths),t.append("name",e.name);let i=await (0,u.pushFunction)(t);i?(0,m.renderSuccess)({headline:["Pushed",{userInput:e.name},"to Shopline!"]}):(0,m.renderFatalError)(new s.AbortError(`Pushed to SHOPLINE with errors on ${(0,w.formatTime)()}`))}async function T(t,n,o,r){var u,a;let l=e.default.createReadStream(t),p=null===(u=n.build)||void 0===u?void 0:u.path,d=null===(a=n.ui)||void 0===a?void 0:a.paths,c=(0,f.joinPath)(r.cwd,p);if(!await (0,E.fileExists)(c))throw new s.AbortError("Cannot found wasm file in this project");let h=e.default.createReadStream(c),w=(0,f.joinPath)(r.cwd,"input.graphql");if(!await (0,E.fileExists)(w))throw new s.AbortError("Cannot found input.graphql file in this project");let m=await (0,E.readFile)(w),g=(()=>{let e=Object.keys(d);if(e.length>0){let t=e.map(e=>({name:e,path:d[e]}));return JSON.stringify(t)}return""})();return{wasmFile:h,zipFile:l,output:t,uuid:o.EXTENSION_UUID,appKey:o.SHOPLINE_APP_KEY,name:o.EXTENSION_TITLE,inputGraphqlContent:m,storeId:i.default.currentStoreId,uiPaths:g}}
@@ -1,3 +1,3 @@
1
1
  "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{default:()=>a,validateBlockSchema3:()=>n});const e=require("./const"),t=require("./utils");function r(){class e extends Map{set2(e,t){super.set(e,t)}get2(e){return super.get(e)}validate(e){for(let[t,r]of super.entries()){let a=Object.prototype.hasOwnProperty.call(e,t);r(null==e?void 0:e[t],a)}}}return new e}function a(a,n){let i=null,{relativeFile:l}=n,s=t=>t.every(t=>e.ALL_TEMPLATES.includes(t)),o=r(),f=(0,t.validateSchemaError)(l);o.set2("name",e=>{e||f("must be required","name")}),o.set2("target",t=>{t||f("must be required","target"),e.TARGETS.includes(t)||f(`must be one of ${e.TARGETS.join(", ")}`,"target")}),o.set2("stylesheet",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("javascript",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("templates",t=>{Array.isArray(t)&&t.length>0&&!s(t)&&f(`must be one of:
2
2
  ${e.ALL_TEMPLATES.join("\n")}`,"templates")}),o.set2("tag",t=>{t&&!e.TAGS.includes(t)&&f(`must be one of ${e.TAGS.join(", ")}`,"tag")}),o.set2("available_if",(r,a)=>{a&&("string"!=typeof r||!(0,t.isMatchedInterpolation)(r))&&f(e.ERRORS.INVALID_INTERPOLATION,"available_if")}),o.set2("settings",e=>{if(e&&Array.isArray(e)){let r=(0,t.getNonMatchedOptionInterpolation)(e);r.forEach(e=>{f(e.reason,e.field)})}});try{i=JSON.parse(a)}catch(e){f()}return i||f(),o.validate(i),!0}function n(a,n){let i=null,{relativeFile:l}=n,s=t=>t.every(t=>e.ALL_TEMPLATES_3.includes(t)),o=r(),f=(0,t.validateSchemaError)(l);o.set2("name",e=>{e||f("must be required","name")}),o.set2("target",t=>{t||f("must be required","target"),e.TARGETS.includes(t)||f(`must be one of ${e.TARGETS.join(", ")}`,"target")}),o.set2("stylesheet",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("javascript",e=>{if(Array.isArray(e)&&e.length>0){let t=e.map(e=>"string"==typeof e?e.trim():e).filter(Boolean);0===t.length&&f("Leave blank or fill in at least one")}}),o.set2("templates",t=>{Array.isArray(t)&&t.length>0&&!s(t)&&f(`must be one of:
3
- ${e.ALL_TEMPLATES.join("\n")}`,"templates")}),o.set2("tag",t=>{t&&!e.TAGS.includes(t)&&f(`must be one of ${e.TAGS.join(", ")}`,"tag")}),o.set2("available_if",(r,a)=>{a&&("string"!=typeof r||!(0,t.isMatchedInterpolation)(r))&&f(e.ERRORS.INVALID_INTERPOLATION,"available_if")}),o.set2("settings",e=>{if(e&&Array.isArray(e)){let r=(0,t.getNonMatchedOptionInterpolation)(e);r.forEach(e=>{f(e.reason,e.field)})}});try{i=JSON.parse(a)}catch(e){f()}return i||f(),o.validate(i),!0}
3
+ ${e.ALL_TEMPLATES_3.join("\n")}`,"templates")}),o.set2("tag",t=>{t&&!e.TAGS.includes(t)&&f(`must be one of ${e.TAGS.join(", ")}`,"tag")}),o.set2("available_if",(r,a)=>{a&&("string"!=typeof r||!(0,t.isMatchedInterpolation)(r))&&f(e.ERRORS.INVALID_INTERPOLATION,"available_if")}),o.set2("settings",e=>{if(e&&Array.isArray(e)){let r=(0,t.getNonMatchedOptionInterpolation)(e);r.forEach(e=>{f(e.reason,e.field)})}});try{i=JSON.parse(a)}catch(e){f()}return i||f(),o.validate(i),!0}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{IdentityAuthServerPort:()=>n,default:()=>o});const e=l(require("koa")),t=l(require("koa-ejs")),r=l(require("path")),s=l(require("fs")),a=l(require("killable")),i=require("./api");function l(e){return e&&e.__esModule?e:{default:e}}const n=3456,u=l=>new Promise((u,o)=>{let d=new e.default;(0,t.default)(d,{root:r.default.join(__dirname,"client"),layout:!1,cache:!1});let c=d.listen(n);(0,a.default)(c),d.use(async e=>{let t=e.request.query,a={css:s.default.readFileSync(r.default.join(__dirname,"client/style.css"))};if(t.ticket)try{let r=await (0,i.fetchUdbCookie)(t.ticket,l),{rescode:s,data:n}=r.data;if("0"===s){let t=n.ck;Object.keys(t).length>0?(e.status=200,a.successful=200===e.status,a.message="You've successfuly logged into the Shopline CLI!",await e.render("index",a),u(t)):(e.status=403,a.successful=200===e.status,a.message="Anti-forgery state token does not match the initial request.",await e.render("index",a),o(Error("No message returned after logging in to the server. Please retry again!")))}else"-4"===s?o(Error("Illegal parameters, please retry again!")):"1028"===s&&o(Error("The ticket is invalid, please retry again!"))}catch(e){o(e)}else e.status=403,a.successful=200===e.status,a.message="Login failed due to missing required parameters for the URL.",await e.render("index",a),o(Error("No message returned after logging in to the server. Please retry again!"));setImmediate(()=>{var e;null==c||null===(e=c.kill)||void 0===e||e.call(c)})})}),o=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{IdentityAuthServerPort:()=>n,default:()=>u});const e=l(require("koa")),t=l(require("koa-ejs")),r=l(require("path")),s=l(require("fs")),a=l(require("killable")),i=require("./api");function l(e){return e&&e.__esModule?e:{default:e}}const n=3456,o=l=>new Promise((o,u)=>{let c=new e.default;(0,t.default)(c,{root:r.default.join(__dirname,"client"),layout:!1,cache:!1});let d=c.listen(n);(0,a.default)(d),c.use(async e=>{let t=e.request.query,a={css:s.default.readFileSync(r.default.join(__dirname,"client/style.css"))};if(t.ticket)try{let r=await (0,i.fetchUdbCookie)(t.ticket,l),{rescode:s,data:n}=r.data;if("0"===s){let t=n.ck;Object.keys(t).length>0?(e.status=200,a.successful=200===e.status,a.message="You've successfuly logged into the Shopline CLI!",await e.render("index",a),o(t)):(e.status=403,a.successful=200===e.status,a.message="Anti-forgery state token does not match the initial request.",await e.render("index",a),u(Error("No message returned after logging in to the server. Please retry again!")))}else"-4"===s?u(Error("Illegal parameters, please retry again!")):"1028"===s&&u(Error("The ticket is invalid, please retry again!"))}catch(e){console.log("fetchUdbCookie:",e),u(e)}else e.status=403,a.successful=200===e.status,a.message="Login failed due to missing required parameters for the URL.",await e.render("index",a),u(Error("No message returned after logging in to the server. Please retry again!"));setImmediate(()=>{var e;null==d||null===(e=d.kill)||void 0===e||e.call(d)})})}),u=o;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>t});const e=require("./api"),t=async(t,a)=>{let{data:{data:{contextToken:r,storeId:d}}}=await (0,e.enterStore)(t,{headers:{Cookie:`a_osudb_uid=${a.a_osudb_uid};a_osudb_oar=${a.a_osudb_oar}`},timeout:1e4,maxRedirects:0,validateStatus:e=>e>=200&&(e<300||[302].includes(e))});return{a_ste:r,store_id:d}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:()=>t});const e=require("./api"),t=async(t,a)=>{try{let{data:{data:{contextToken:r,storeId:o}}}=await (0,e.enterStore)(t,{headers:{Cookie:`a_osudb_uid=${a.a_osudb_uid};a_osudb_oar=${a.a_osudb_oar}`},timeout:1e4,maxRedirects:0,validateStatus:e=>e>=200&&(e<300||[302].includes(e))});return{a_ste:r,store_id:o}}catch(e){throw console.log("enterStore:",e),e}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{updateFile:()=>h,createFile:()=>R,uploadFile:()=>T,deleteFile:()=>_,uploadThemePackageFile:()=>O,getThemeFileDetail:()=>v,getThemeListWithPagination:()=>I,downloadThemePackage:()=>S,getThemeFileList:()=>$,uploadPrivateThemePackage:()=>b,getPublishedThemeInstance:()=>q,getThemeInfo:()=>w,changeThemeStatus:()=>y,createNewThemeOrCompleteUpload:()=>L});const e=p(require("axios")),t=require("querystring"),r=p(require("form-data")),s=p(require("../../helpers/config")),o=require("./const"),i=p(require("../../utils/debug")),a=p(require("./no-second-check")),n=require("../../helpers/sentry"),l=require("../../utils/error"),u=require("../../utils/const"),d=p(require("../../utils/winston"));function p(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:c,currentStore:E}=s.default;function f(t){return p=>{let E=e.default.create({baseURL:t,maxContentLength:1/0,maxBodyLength:1/0});return E.interceptors.request.use(e=>{if(i.default.printRequest(e),c){let t=Object.keys(c).map(e=>`${e}=${c[e]}`).join(";"),r=s.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":r,"User-Agent":u.CLI_USER_AGENT})}return(null==e?void 0:e.data)instanceof r.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),d.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e},e=>Promise.reject(e)),E.interceptors.response.use(async e=>{var t,r,s,u,c;let E=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,f=null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code,{config:g}=e;if(i.default.printResponse(g,e),(0,n.reportHttpRes)(e),d.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(s=e.data)||void 0===s?void 0:s.trace_id)||(null==e?void 0:null===(u=e.headers)||void 0===u?void 0:u["x-request-id"])||""}),o.ERROR_CODES.THEME_COUNT_LIMIT.includes(f))throw Error(o.ERRORS.THEME_COUNT_LIMIT);if(o.ERROR_CODES.DEVELOPMENT_THEME_NOT_EXIST.includes(f))throw Error(o.ERRORS.THEME_IS_INVALID);if(o.ERROR_CODES.FEATURE_KEY_NOT_EXIST.includes(f))throw Error(o.ERRORS.FEATURE_KEY_NOT_EXIST);if(o.ERROR_CODES.NO_SECOND_CHECK.includes(f))await a.default.run();else if(o.ERROR_CODES.INVALID_FILE.includes(f))throw new l.ValidatorError({code:f,errors:e.data.data.errors,message:e.data.msg});if("boolean"==typeof E&&!1===E){let t=e.data.msg||e.data.message||"",r=Error(t);throw o.ERROR_CODES.FILE_NOT_EXIT.includes(f)||(0,n.reportBug)(r),new l.AbortError(t)}return(null==p?void 0:p.withResponseHeader)?e:null==e?void 0:null===(c=e.data)||void 0===c?void 0:c.data},e=>{let t=(()=>{if(null==e?void 0:e.response){let{status:t,statusText:r,data:s}=e.response;return(null==s?void 0:s.msg)||(null==s?void 0:s.message)||(s.error||"string"==typeof s?s:`${t}: ${r}`)}return e.message})();e.response&&(0,n.reportHttpRes)(e.response);let r=new l.AbortError(t);return i.default.printErrorResponse(e.config,e.response),(0,n.reportBug)(e),Promise.reject(r)}),E}}const g=f(`${E}/admin/api/merchant-bff`)(),m=f(`${E}${o.ENDPOINTS.THEME}`),h=(e,{fileContent:t,fileName:r,cliFirstCreateFile:s})=>g.put(`/file/theme/${e}`,{fileContent:t,fileName:r,cliFirstCreateFile:s}),R=(e,{fileName:t,fileContent:r,duplicateFlag:s=!1,cliFirstCreateFile:o,sourceFileName:i})=>g.post(`/file/theme/${e}`,{fileName:t,fileContent:r,duplicateFlag:s,sourceFileName:i,cliFirstCreateFile:o}),T=(e,t,r)=>g.post(`/file/theme/${e}/upload`,t,r),_=(e,{fileName:t})=>g.delete(`/file/theme/${e}`,{data:{fileName:t}}),O=(...e)=>g.post("/theme/upload",...e),v=({themeId:e,fileName:r})=>g.get(`/file/theme/${e}/detail?${(0,t.stringify)({fileName:r})}`),I=e=>{let r=e?`/instance/list/page?${(0,t.stringify)(e)}`:"/instance/list/page";return m().get(r)},S=e=>m({withResponseHeader:!0}).get(`/instance/download/${e}`,{responseType:"stream"}),$=e=>g.get(`/file/theme/${e}/list`),b=(e,t)=>g.post("/theme/upload",e,t),q=()=>m().get("/instance/current"),w=e=>m().get(`/instance/${e}`),y=e=>m().post("/instance/status",e);function L(e){return m().post("/upload/single-file",e)}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{updateFile:()=>h,createFile:()=>R,uploadFile:()=>T,deleteFile:()=>_,uploadThemePackageFile:()=>O,getThemeFileDetail:()=>v,getThemeListWithPagination:()=>I,downloadThemePackage:()=>S,getThemeFileList:()=>$,uploadPrivateThemePackage:()=>b,getPublishedThemeInstance:()=>q,getThemeInfo:()=>w,changeThemeStatus:()=>y,createNewThemeOrCompleteUpload:()=>L});const e=p(require("axios")),t=require("querystring"),r=p(require("form-data")),o=p(require("../../helpers/config")),s=require("./const"),i=p(require("../../utils/debug")),a=p(require("./no-second-check")),n=require("../../helpers/sentry"),l=require("../../utils/error"),u=require("../../utils/const"),d=p(require("../../utils/winston"));function p(e){return e&&e.__esModule?e:{default:e}}const{loginInfo:c,currentStore:E}=o.default;function f(t){return p=>{let E=e.default.create({baseURL:t,maxContentLength:1/0,maxBodyLength:1/0});return E.interceptors.request.use(e=>{if(i.default.printRequest(e),c){let t=Object.keys(c).map(e=>`${e}=${c[e]}`).join(";"),r=o.default.dfpToken||"";Object.assign(e.headers,{cookie:t,"dfp-token":r,"User-Agent":u.CLI_USER_AGENT})}return(null==e?void 0:e.data)instanceof r.default&&Object.assign(e.headers,null==e?void 0:e.data.getHeaders()),d.default.logHttp({type:"request",method:e.method,url:e.baseURL+e.url,params:e.params}),e},e=>Promise.reject(e)),E.interceptors.response.use(async e=>{var t,r,o,u,c;let E=null==e?void 0:null===(t=e.data)||void 0===t?void 0:t.success,f=null==e?void 0:null===(r=e.data)||void 0===r?void 0:r.code,{config:g}=e;if(i.default.printResponse(g,e),(0,n.reportHttpRes)(e),d.default.logHttp({type:"response",method:e.config.method,url:e.config.baseURL+e.config.url,params:e.config.params,body:e.data,status:e.status,traceId:(null==e?void 0:null===(o=e.data)||void 0===o?void 0:o.trace_id)||(null==e?void 0:null===(u=e.headers)||void 0===u?void 0:u["x-request-id"])||""}),s.ERROR_CODES.THEME_COUNT_LIMIT.includes(f))throw Error(s.ERRORS.THEME_COUNT_LIMIT);if(s.ERROR_CODES.DEVELOPMENT_THEME_NOT_EXIST.includes(f))throw Error(s.ERRORS.THEME_IS_INVALID);if(s.ERROR_CODES.FEATURE_KEY_NOT_EXIST.includes(f))throw Error(s.ERRORS.FEATURE_KEY_NOT_EXIST);if(s.ERROR_CODES.NO_SECOND_CHECK.includes(f))await a.default.run();else if(s.ERROR_CODES.INVALID_FILE.includes(f))throw new l.ValidatorError({code:f,errors:e.data.data.errors,message:e.data.msg});if("boolean"==typeof E&&!1===E){let t=e.data.msg||e.data.message||"",r=Error(t);throw s.ERROR_CODES.FILE_NOT_EXIT.includes(f)||(0,n.reportBug)(r),new l.AbortError(t)}return(null==p?void 0:p.withResponseHeader)?e:null==e?void 0:null===(c=e.data)||void 0===c?void 0:c.data},e=>{console.log("error",e);let t=(()=>{if(null==e?void 0:e.response){let{status:t,statusText:r,data:o}=e.response;return(null==o?void 0:o.msg)||(null==o?void 0:o.message)||(o.error||"string"==typeof o?o:`${t}: ${r}`)}return e.message})();e.response&&(0,n.reportHttpRes)(e.response);let r=new l.AbortError(t);return i.default.printErrorResponse(e.config,e.response),(0,n.reportBug)(e),Promise.reject(r)}),E}}const g=f(`${E}/admin/api/merchant-bff`)(),m=f(`${E}${s.ENDPOINTS.THEME}`),h=(e,{fileContent:t,fileName:r,cliFirstCreateFile:o})=>g.put(`/file/theme/${e}`,{fileContent:t,fileName:r,cliFirstCreateFile:o}),R=(e,{fileName:t,fileContent:r,duplicateFlag:o=!1,cliFirstCreateFile:s,sourceFileName:i})=>g.post(`/file/theme/${e}`,{fileName:t,fileContent:r,duplicateFlag:o,sourceFileName:i,cliFirstCreateFile:s}),T=(e,t,r)=>g.post(`/file/theme/${e}/upload`,t,r),_=(e,{fileName:t})=>g.delete(`/file/theme/${e}`,{data:{fileName:t}}),O=(...e)=>g.post("/theme/upload",...e),v=({themeId:e,fileName:r})=>g.get(`/file/theme/${e}/detail?${(0,t.stringify)({fileName:r})}`),I=e=>{let r=e?`/instance/list/page?${(0,t.stringify)(e)}`:"/instance/list/page";return m().get(r)},S=e=>m({withResponseHeader:!0}).get(`/instance/download/${e}`,{responseType:"stream"}),$=e=>g.get(`/file/theme/${e}/list`),b=(e,t)=>g.post("/theme/upload",e,t),q=()=>m().get("/instance/current"),w=e=>m().get(`/instance/${e}`),y=e=>m().post("/instance/status",e);function L(e){return m().post("/upload/single-file",e)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shoplineos/cli",
3
- "version": "1.0.0",
3
+ "version": "1.0.2-beta.0",
4
4
  "description": "A CLI tool to build for the Shopline platform",
5
5
  "bin": {
6
6
  "sl": "./bin/index.js"