@wix/web50-cli 0.1.1 → 0.1.2

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 (100) hide show
  1. package/bin/web5.js +1 -2
  2. package/dist/cjs/auth/deviceFlow.js +90 -17
  3. package/dist/cjs/auth/deviceFlow.js.map +1 -1
  4. package/dist/cjs/auth/index.js +40 -10
  5. package/dist/cjs/auth/index.js.map +1 -1
  6. package/dist/cjs/cli.js +3 -3
  7. package/dist/cjs/cli.js.map +1 -1
  8. package/dist/cjs/commands/bundle.js +12 -4
  9. package/dist/cjs/commands/bundle.js.map +1 -1
  10. package/dist/cjs/commands/conversation.js.map +1 -1
  11. package/dist/cjs/commands/conversationWizard.js +3 -1
  12. package/dist/cjs/commands/conversationWizard.js.map +1 -1
  13. package/dist/cjs/commands/deploy.js +55 -10
  14. package/dist/cjs/commands/deploy.js.map +1 -1
  15. package/dist/cjs/commands/ecom.js +239 -0
  16. package/dist/cjs/commands/ecom.js.map +1 -0
  17. package/dist/cjs/commands/embed.js.map +1 -1
  18. package/dist/cjs/commands/init.js +34 -3
  19. package/dist/cjs/commands/init.js.map +1 -1
  20. package/dist/cjs/commands/instructions.js +147 -51
  21. package/dist/cjs/commands/instructions.js.map +1 -1
  22. package/dist/cjs/commands/login.js +8 -4
  23. package/dist/cjs/commands/login.js.map +1 -1
  24. package/dist/cjs/commands/serve.js.map +1 -1
  25. package/dist/cjs/commands/validate.js +368 -16
  26. package/dist/cjs/commands/validate.js.map +1 -1
  27. package/dist/cjs/commands/whoami.js.map +1 -1
  28. package/dist/cjs/templates/aiInstructionsSchema.js +5 -1
  29. package/dist/cjs/templates/aiInstructionsSchema.js.map +1 -1
  30. package/dist/cjs/templates/cmsMappingSchema.js +132 -0
  31. package/dist/cjs/templates/cmsMappingSchema.js.map +1 -0
  32. package/dist/cjs/utils/project.js +13 -0
  33. package/dist/cjs/utils/project.js.map +1 -1
  34. package/dist/cjs/utils/wixApi.js +3 -1
  35. package/dist/cjs/utils/wixApi.js.map +1 -1
  36. package/dist/esm/auth/deviceFlow.js +89 -17
  37. package/dist/esm/auth/deviceFlow.js.map +1 -1
  38. package/dist/esm/auth/index.js +40 -11
  39. package/dist/esm/auth/index.js.map +1 -1
  40. package/dist/esm/cli.js +3 -3
  41. package/dist/esm/cli.js.map +1 -1
  42. package/dist/esm/commands/bundle.js +12 -4
  43. package/dist/esm/commands/bundle.js.map +1 -1
  44. package/dist/esm/commands/conversation.js.map +1 -1
  45. package/dist/esm/commands/conversationWizard.js +3 -1
  46. package/dist/esm/commands/conversationWizard.js.map +1 -1
  47. package/dist/esm/commands/deploy.js +55 -10
  48. package/dist/esm/commands/deploy.js.map +1 -1
  49. package/dist/esm/commands/ecom.js +234 -0
  50. package/dist/esm/commands/ecom.js.map +1 -0
  51. package/dist/esm/commands/embed.js.map +1 -1
  52. package/dist/esm/commands/init.js +34 -3
  53. package/dist/esm/commands/init.js.map +1 -1
  54. package/dist/esm/commands/instructions.js +152 -53
  55. package/dist/esm/commands/instructions.js.map +1 -1
  56. package/dist/esm/commands/login.js +8 -4
  57. package/dist/esm/commands/login.js.map +1 -1
  58. package/dist/esm/commands/serve.js.map +1 -1
  59. package/dist/esm/commands/validate.js +373 -19
  60. package/dist/esm/commands/validate.js.map +1 -1
  61. package/dist/esm/commands/whoami.js.map +1 -1
  62. package/dist/esm/templates/aiInstructionsSchema.js +5 -1
  63. package/dist/esm/templates/aiInstructionsSchema.js.map +1 -1
  64. package/dist/esm/templates/cmsMappingSchema.js +128 -0
  65. package/dist/esm/templates/cmsMappingSchema.js.map +1 -0
  66. package/dist/esm/utils/project.js +15 -0
  67. package/dist/esm/utils/project.js.map +1 -1
  68. package/dist/esm/utils/wixApi.js +4 -2
  69. package/dist/esm/utils/wixApi.js.map +1 -1
  70. package/dist/types/auth/deviceFlow.d.ts +1 -1
  71. package/dist/types/auth/deviceFlow.d.ts.map +1 -1
  72. package/dist/types/auth/index.d.ts +2 -1
  73. package/dist/types/auth/index.d.ts.map +1 -1
  74. package/dist/types/commands/bundle.d.ts.map +1 -1
  75. package/dist/types/commands/conversation.d.ts.map +1 -1
  76. package/dist/types/commands/conversationWizard.d.ts.map +1 -1
  77. package/dist/types/commands/deploy.d.ts.map +1 -1
  78. package/dist/types/commands/ecom.d.ts +3 -0
  79. package/dist/types/commands/ecom.d.ts.map +1 -0
  80. package/dist/types/commands/embed.d.ts.map +1 -1
  81. package/dist/types/commands/init.d.ts.map +1 -1
  82. package/dist/types/commands/instructions.d.ts.map +1 -1
  83. package/dist/types/commands/login.d.ts.map +1 -1
  84. package/dist/types/commands/serve.d.ts.map +1 -1
  85. package/dist/types/commands/validate.d.ts +4 -2
  86. package/dist/types/commands/validate.d.ts.map +1 -1
  87. package/dist/types/commands/whoami.d.ts.map +1 -1
  88. package/dist/types/templates/aiInstructionsSchema.d.ts.map +1 -1
  89. package/dist/types/templates/cmsMappingSchema.d.ts +2 -0
  90. package/dist/types/templates/cmsMappingSchema.d.ts.map +1 -0
  91. package/dist/types/utils/project.d.ts +2 -0
  92. package/dist/types/utils/project.d.ts.map +1 -1
  93. package/dist/types/utils/wixApi.d.ts.map +1 -1
  94. package/package.json +2 -2
  95. package/dist/cjs/commands/getClientId.js +0 -60
  96. package/dist/cjs/commands/getClientId.js.map +0 -1
  97. package/dist/esm/commands/getClientId.js +0 -56
  98. package/dist/esm/commands/getClientId.js.map +0 -1
  99. package/dist/types/commands/getClientId.d.ts +0 -3
  100. package/dist/types/commands/getClientId.d.ts.map +0 -1
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.ecomCommand = void 0;
6
+ var _commander = require("commander");
7
+ var _inquirer = _interopRequireDefault(require("inquirer"));
8
+ var _open = _interopRequireDefault(require("open"));
9
+ var _wixApi = require("../utils/wixApi");
10
+ var _print = require("../utils/print");
11
+ const BASE = '/_api/ecom-integrations/v1/ecom-integrations';
12
+
13
+ // ── Types ─────────────────────────────────────────────────────────────────────
14
+
15
+ // ── connect ───────────────────────────────────────────────────────────────────
16
+
17
+ const POLL_INTERVAL_MS = 3000;
18
+ const POLL_TIMEOUT_MS = 120_000;
19
+ async function pollUntilActive() {
20
+ const deadline = Date.now() + POLL_TIMEOUT_MS;
21
+ while (Date.now() < deadline) {
22
+ await new Promise(r => setTimeout(r, POLL_INTERVAL_MS));
23
+ try {
24
+ const data = await (0, _wixApi.wixRequest)({
25
+ path: `${BASE}/connection-status`,
26
+ method: 'GET'
27
+ });
28
+ if (data.status === 'ACTIVE') {
29
+ return true;
30
+ }
31
+ } catch {
32
+ // ignore transient errors and keep polling
33
+ }
34
+ }
35
+ return false;
36
+ }
37
+ const connectCmd = new _commander.Command('connect').description('Connect a Shopify store via OAuth2 (opens browser)').option('--store-id <id>', 'Shopify store slug (e.g. mystore)').action(async opts => {
38
+ const statusSp = (0, _print.spinner)('Checking connection status...');
39
+ try {
40
+ const statusData = await (0, _wixApi.wixRequest)({
41
+ path: `${BASE}/connection-status`,
42
+ method: 'GET'
43
+ });
44
+ statusSp.stop();
45
+ if (statusData.status === 'ACTIVE') {
46
+ (0, _print.error)('Already connected. Use `web5 ecom disconnect` first to reconnect.');
47
+ process.exit(1);
48
+ }
49
+ } catch {
50
+ statusSp.stop();
51
+ // not connected yet, proceed
52
+ }
53
+ let storeId = opts.storeId;
54
+ if (!storeId) {
55
+ const answer = await _inquirer.default.prompt([{
56
+ type: 'input',
57
+ name: 'storeId',
58
+ message: 'Shopify store slug (e.g. mystore):',
59
+ validate: v => v.trim().length > 0 || 'Store ID is required'
60
+ }]);
61
+ storeId = answer.storeId.trim();
62
+ }
63
+ const sp = (0, _print.spinner)('Initiating Shopify OAuth...');
64
+ try {
65
+ const data = await (0, _wixApi.wixRequest)({
66
+ path: `${BASE}/shopify-oauth/initiate`,
67
+ method: 'POST',
68
+ body: {
69
+ platform: 'SHOPIFY',
70
+ shopify: {
71
+ storeId
72
+ }
73
+ }
74
+ });
75
+ sp.stop();
76
+ const url = data.authorizationUrl ?? data.authorization_url;
77
+ if (!url) {
78
+ (0, _print.error)('No authorization URL returned by the server.');
79
+ process.exit(1);
80
+ }
81
+ (0, _print.info)(`Authorization URL: ${url}`);
82
+ await (0, _open.default)(url);
83
+ (0, _print.info)('Browser opened — complete the Shopify authorization...');
84
+ const polling = (0, _print.spinner)('Waiting for connection to become active...');
85
+ const active = await pollUntilActive();
86
+ polling.stop();
87
+ if (active) {
88
+ (0, _print.success)('Connected! Your Shopify store is now active.');
89
+ } else {
90
+ (0, _print.error)('Timed out waiting for the connection to become active. Run `web5 ecom status` to check.');
91
+ process.exit(1);
92
+ }
93
+ } catch (err_) {
94
+ sp.stop();
95
+ (0, _print.error)(err_.message);
96
+ process.exit(1);
97
+ }
98
+ });
99
+
100
+ // ── status ────────────────────────────────────────────────────────────────────
101
+
102
+ const statusCmd = new _commander.Command('status').description('Show the current ecom provider connection status').action(async () => {
103
+ const sp = (0, _print.spinner)('Fetching connection status...');
104
+ try {
105
+ const data = await (0, _wixApi.wixRequest)({
106
+ path: `${BASE}/connection-status`,
107
+ method: 'GET'
108
+ });
109
+ sp.stop();
110
+ if ((0, _print.isJsonMode)()) {
111
+ console.log(JSON.stringify(data));
112
+ return;
113
+ }
114
+ const status = data.status ?? 'UNKNOWN';
115
+ if (status === 'UNKNOWN') {
116
+ (0, _print.info)('Status: not connected');
117
+ return;
118
+ }
119
+ if (status === 'ACTIVE') {
120
+ (0, _print.success)(`Status: ${status}`);
121
+ } else {
122
+ (0, _print.error)(`Status: ${status}`);
123
+ if (data.errorMessage) {
124
+ (0, _print.info)(`Error: ${data.errorMessage}`);
125
+ }
126
+ }
127
+ if (data.lastFullSync) {
128
+ (0, _print.info)(`Last full sync: ${data.lastFullSync}`);
129
+ } else {
130
+ (0, _print.info)('Last full sync: never');
131
+ }
132
+ if (data.lastAlignmentSync) {
133
+ (0, _print.info)(`Last alignment: ${data.lastAlignmentSync}`);
134
+ } else {
135
+ (0, _print.info)('Last alignment: never');
136
+ }
137
+ } catch (err_) {
138
+ sp.stop();
139
+ (0, _print.error)(err_.message);
140
+ process.exit(1);
141
+ }
142
+ });
143
+
144
+ // ── full-sync ─────────────────────────────────────────────────────────────────
145
+
146
+ const fullSyncCmd = new _commander.Command('full-sync').description('Trigger a full sync from the ecom provider into CMS').action(async () => {
147
+ const sp = (0, _print.spinner)('Running full sync...');
148
+ try {
149
+ const data = await (0, _wixApi.wixRequest)({
150
+ path: `${BASE}/full-sync`,
151
+ method: 'POST',
152
+ body: {}
153
+ });
154
+ sp.stop();
155
+ (0, _print.success)(data.status ?? 'Full sync triggered');
156
+ } catch (err_) {
157
+ sp.stop();
158
+ (0, _print.error)(err_.message);
159
+ process.exit(1);
160
+ }
161
+ });
162
+
163
+ // ── alignment-sync ────────────────────────────────────────────────────────────
164
+
165
+ const alignmentSyncCmd = new _commander.Command('alignment-sync').description('Run an alignment sync to catch any missed webhook updates').action(async () => {
166
+ const sp = (0, _print.spinner)('Running alignment sync...');
167
+ try {
168
+ const data = await (0, _wixApi.wixRequest)({
169
+ path: `${BASE}/alignment-sync`,
170
+ method: 'POST',
171
+ body: {}
172
+ });
173
+ sp.stop();
174
+ (0, _print.success)(data.status ?? 'Alignment sync complete');
175
+ const counts = data.syncedCounts ?? {};
176
+ for (const [table, count] of Object.entries(counts)) {
177
+ (0, _print.info)(` ${table}: ${count}`);
178
+ }
179
+ } catch (err_) {
180
+ sp.stop();
181
+ (0, _print.error)(err_.message);
182
+ process.exit(1);
183
+ }
184
+ });
185
+
186
+ // ── align-cms ─────────────────────────────────────────────────────────────────
187
+
188
+ const alignCmsCmd = new _commander.Command('align-cms').description('Align CMS collections with the ecom provider schema').action(async () => {
189
+ const sp = (0, _print.spinner)('Aligning CMS collections...');
190
+ try {
191
+ await (0, _wixApi.wixRequest)({
192
+ path: `${BASE}/align-cms-collections`,
193
+ method: 'POST',
194
+ body: {}
195
+ });
196
+ sp.stop();
197
+ (0, _print.success)('CMS collections aligned');
198
+ } catch (err_) {
199
+ sp.stop();
200
+ (0, _print.error)(err_.message);
201
+ process.exit(1);
202
+ }
203
+ });
204
+
205
+ // ── disconnect ────────────────────────────────────────────────────────────────
206
+
207
+ const disconnectCmd = new _commander.Command('disconnect').description('Disconnect from the ecom provider').action(async () => {
208
+ const {
209
+ confirmed
210
+ } = await _inquirer.default.prompt([{
211
+ type: 'confirm',
212
+ name: 'confirmed',
213
+ message: 'Are you sure you want to disconnect from the ecom provider?',
214
+ default: false
215
+ }]);
216
+ if (!confirmed) {
217
+ (0, _print.info)('Disconnect cancelled.');
218
+ return;
219
+ }
220
+ const sp = (0, _print.spinner)('Disconnecting...');
221
+ try {
222
+ await (0, _wixApi.wixRequest)({
223
+ path: `${BASE}/disconnect`,
224
+ method: 'POST',
225
+ body: {}
226
+ });
227
+ sp.stop();
228
+ (0, _print.success)('Disconnected from ecom provider');
229
+ } catch (err_) {
230
+ sp.stop();
231
+ (0, _print.error)(err_.message);
232
+ process.exit(1);
233
+ }
234
+ });
235
+
236
+ // ── root ecom command ─────────────────────────────────────────────────────────
237
+
238
+ const ecomCommand = exports.ecomCommand = new _commander.Command('ecom').description('Manage ecom provider integrations').addCommand(connectCmd).addCommand(statusCmd).addCommand(fullSyncCmd).addCommand(alignmentSyncCmd).addCommand(alignCmsCmd).addCommand(disconnectCmd);
239
+ //# sourceMappingURL=ecom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","_open","_wixApi","_print","BASE","POLL_INTERVAL_MS","POLL_TIMEOUT_MS","pollUntilActive","deadline","Date","now","Promise","r","setTimeout","data","wixRequest","path","method","status","connectCmd","Command","description","option","action","opts","statusSp","spinner","statusData","stop","error","process","exit","storeId","answer","inquirer","prompt","type","name","message","validate","v","trim","length","sp","body","platform","shopify","url","authorizationUrl","authorization_url","info","open","polling","active","success","err_","statusCmd","isJsonMode","console","log","JSON","stringify","errorMessage","lastFullSync","lastAlignmentSync","fullSyncCmd","alignmentSyncCmd","counts","syncedCounts","table","count","Object","entries","alignCmsCmd","disconnectCmd","confirmed","default","ecomCommand","exports","addCommand"],"sources":["../../../src/commands/ecom.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport open from 'open';\nimport { wixRequest } from '../utils/wixApi';\nimport { success, error, info, spinner, isJsonMode } from '../utils/print';\n\nconst BASE = '/_api/ecom-integrations/v1/ecom-integrations';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\ninterface InitiateOAuthResponse {\n authorizationUrl?: string;\n authorization_url?: string;\n}\n\ninterface ConnectionStatusResponse {\n status?: string;\n platformMetadata?: Record<string, string>;\n lastFullSync?: string;\n lastAlignmentSync?: string;\n errorMessage?: string;\n}\n\ninterface SyncResponse {\n status?: string;\n syncedCounts?: Record<string, number>;\n}\n\n// ── connect ───────────────────────────────────────────────────────────────────\n\nconst POLL_INTERVAL_MS = 3000;\nconst POLL_TIMEOUT_MS = 120_000;\n\nasync function pollUntilActive(): Promise<boolean> {\n const deadline = Date.now() + POLL_TIMEOUT_MS;\n while (Date.now() < deadline) {\n await new Promise((r) => setTimeout(r, POLL_INTERVAL_MS));\n try {\n const data = await wixRequest<ConnectionStatusResponse>({\n path: `${BASE}/connection-status`,\n method: 'GET',\n });\n if (data.status === 'ACTIVE') {\n return true;\n }\n } catch {\n // ignore transient errors and keep polling\n }\n }\n return false;\n}\n\nconst connectCmd = new Command('connect')\n .description('Connect a Shopify store via OAuth2 (opens browser)')\n .option('--store-id <id>', 'Shopify store slug (e.g. mystore)')\n .action(async (opts: { storeId?: string }) => {\n const statusSp = spinner('Checking connection status...');\n try {\n const statusData = await wixRequest<ConnectionStatusResponse>({\n path: `${BASE}/connection-status`,\n method: 'GET',\n });\n statusSp.stop();\n if (statusData.status === 'ACTIVE') {\n error(\n 'Already connected. Use `web5 ecom disconnect` first to reconnect.',\n );\n process.exit(1);\n }\n } catch {\n statusSp.stop();\n // not connected yet, proceed\n }\n\n let storeId = opts.storeId;\n\n if (!storeId) {\n const answer = await inquirer.prompt<{ storeId: string }>([\n {\n type: 'input',\n name: 'storeId',\n message: 'Shopify store slug (e.g. mystore):',\n validate: (v: string) =>\n v.trim().length > 0 || 'Store ID is required',\n },\n ]);\n storeId = answer.storeId.trim();\n }\n\n const sp = spinner('Initiating Shopify OAuth...');\n try {\n const data = await wixRequest<InitiateOAuthResponse>({\n path: `${BASE}/shopify-oauth/initiate`,\n method: 'POST',\n body: {\n platform: 'SHOPIFY',\n shopify: { storeId },\n },\n });\n sp.stop();\n\n const url = data.authorizationUrl ?? data.authorization_url;\n if (!url) {\n error('No authorization URL returned by the server.');\n process.exit(1);\n }\n\n info(`Authorization URL: ${url}`);\n await open(url);\n info('Browser opened — complete the Shopify authorization...');\n\n const polling = spinner('Waiting for connection to become active...');\n const active = await pollUntilActive();\n polling.stop();\n\n if (active) {\n success('Connected! Your Shopify store is now active.');\n } else {\n error(\n 'Timed out waiting for the connection to become active. Run `web5 ecom status` to check.',\n );\n process.exit(1);\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── status ────────────────────────────────────────────────────────────────────\n\nconst statusCmd = new Command('status')\n .description('Show the current ecom provider connection status')\n .action(async () => {\n const sp = spinner('Fetching connection status...');\n try {\n const data = await wixRequest<ConnectionStatusResponse>({\n path: `${BASE}/connection-status`,\n method: 'GET',\n });\n sp.stop();\n\n if (isJsonMode()) {\n console.log(JSON.stringify(data));\n return;\n }\n\n const status = data.status ?? 'UNKNOWN';\n\n if (status === 'UNKNOWN') {\n info('Status: not connected');\n return;\n }\n\n if (status === 'ACTIVE') {\n success(`Status: ${status}`);\n } else {\n error(`Status: ${status}`);\n if (data.errorMessage) {\n info(`Error: ${data.errorMessage}`);\n }\n }\n\n if (data.lastFullSync) {\n info(`Last full sync: ${data.lastFullSync}`);\n } else {\n info('Last full sync: never');\n }\n\n if (data.lastAlignmentSync) {\n info(`Last alignment: ${data.lastAlignmentSync}`);\n } else {\n info('Last alignment: never');\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── full-sync ─────────────────────────────────────────────────────────────────\n\nconst fullSyncCmd = new Command('full-sync')\n .description('Trigger a full sync from the ecom provider into CMS')\n .action(async () => {\n const sp = spinner('Running full sync...');\n try {\n const data = await wixRequest<SyncResponse>({\n path: `${BASE}/full-sync`,\n method: 'POST',\n body: {},\n });\n sp.stop();\n success(data.status ?? 'Full sync triggered');\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── alignment-sync ────────────────────────────────────────────────────────────\n\nconst alignmentSyncCmd = new Command('alignment-sync')\n .description('Run an alignment sync to catch any missed webhook updates')\n .action(async () => {\n const sp = spinner('Running alignment sync...');\n try {\n const data = await wixRequest<SyncResponse>({\n path: `${BASE}/alignment-sync`,\n method: 'POST',\n body: {},\n });\n sp.stop();\n success(data.status ?? 'Alignment sync complete');\n\n const counts = data.syncedCounts ?? {};\n for (const [table, count] of Object.entries(counts)) {\n info(` ${table}: ${count}`);\n }\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── align-cms ─────────────────────────────────────────────────────────────────\n\nconst alignCmsCmd = new Command('align-cms')\n .description('Align CMS collections with the ecom provider schema')\n .action(async () => {\n const sp = spinner('Aligning CMS collections...');\n try {\n await wixRequest({\n path: `${BASE}/align-cms-collections`,\n method: 'POST',\n body: {},\n });\n sp.stop();\n success('CMS collections aligned');\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── disconnect ────────────────────────────────────────────────────────────────\n\nconst disconnectCmd = new Command('disconnect')\n .description('Disconnect from the ecom provider')\n .action(async () => {\n const { confirmed } = await inquirer.prompt<{ confirmed: boolean }>([\n {\n type: 'confirm',\n name: 'confirmed',\n message: 'Are you sure you want to disconnect from the ecom provider?',\n default: false,\n },\n ]);\n\n if (!confirmed) {\n info('Disconnect cancelled.');\n return;\n }\n\n const sp = spinner('Disconnecting...');\n try {\n await wixRequest({\n path: `${BASE}/disconnect`,\n method: 'POST',\n body: {},\n });\n sp.stop();\n success('Disconnected from ecom provider');\n } catch (err_) {\n sp.stop();\n error((err_ as Error).message);\n process.exit(1);\n }\n });\n\n// ── root ecom command ─────────────────────────────────────────────────────────\n\nexport const ecomCommand = new Command('ecom')\n .description('Manage ecom provider integrations')\n .addCommand(connectCmd)\n .addCommand(statusCmd)\n .addCommand(fullSyncCmd)\n .addCommand(alignmentSyncCmd)\n .addCommand(alignCmsCmd)\n .addCommand(disconnectCmd);\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_commander","require","readline","_interopRequireWildcard","_child_process","_inquirer","_interopRequireDefault","_wixApi","_print","_project","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","copyToClipboard","text","cmd","process","platform","execSync","undefined","input","promptCopyToClipboard","rl","createInterface","stdin","output","stdout","Promise","resolve","question","close","console","log","promptForType","type","inquirer","prompt","name","message","choices","value","getOrCreateClientId","_createData$oAuthApp","queryData","wixRequest","path","method","body","apps","oAuthApps","existing","find","app","id","createData","oAuthApp","application_type","Error","embedCommand","exports","Command","description","option","action","opts","root","findProjectRoot","cwd","config","readConfig","clientId","writeConfig","embedScript","isJsonMode","JSON","stringify","embedCode","clipboard","isTTY","err","error","exit"],"sources":["../../../src/commands/embed.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as readline from 'readline';\nimport { execSync } from 'child_process';\nimport inquirer from 'inquirer';\nimport { wixRequest } from '../utils/wixApi';\nimport { isJsonMode } from '../utils/print';\nimport { findProjectRoot, readConfig, writeConfig } from '../utils/project';\n\nfunction copyToClipboard(text: string): void {\n const cmd =\n process.platform === 'win32'\n ? `echo ${text} | clip`\n : process.platform === 'darwin'\n ? 'pbcopy'\n : 'xclip -selection clipboard';\n\n execSync(\n process.platform === 'win32' ? `echo ${text} | clip` : cmd,\n process.platform === 'win32' ? undefined : { input: text },\n );\n}\n\nasync function promptCopyToClipboard(text: string): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n return new Promise((resolve) => {\n rl.question('\\nPress Enter to copy to clipboard...', () => {\n rl.close();\n copyToClipboard(text);\n console.log('Copied to clipboard.');\n resolve();\n });\n });\n}\n\ntype EmbedType = 'script' | 'react';\n\ninterface OAuthApp {\n id: string;\n name: string;\n}\n\ninterface QueryResponse {\n oAuthApps?: OAuthApp[];\n}\n\ninterface CreateResponse {\n oAuthApp?: OAuthApp;\n}\n\nasync function promptForType(): Promise<EmbedType> {\n const { type } = await inquirer.prompt<{ type: EmbedType }>([\n {\n type: 'list',\n name: 'type',\n message: 'Select embed type:',\n choices: [\n { name: 'Script tag', value: 'script' },\n { name: 'React component', value: 'react' },\n ],\n },\n ]);\n return type;\n}\n\nasync function getOrCreateClientId(): Promise<string> {\n console.log('Searching for client ID...');\n\n const queryData = await wixRequest<QueryResponse>({\n path: '/oauth-app/v1/oauth-apps/query',\n method: 'POST',\n body: {},\n });\n\n const apps = queryData.oAuthApps ?? [];\n const existing = apps.find((app) => app.name === 'web5');\n\n if (existing) {\n console.log(`Found client ID: ${existing.id}`);\n return existing.id;\n }\n\n console.log('Client ID not found, creating...');\n\n const createData = await wixRequest<CreateResponse>({\n path: '/oauth-app/v1/oauth-apps',\n method: 'POST',\n body: { oAuthApp: { name: 'web5', application_type: 'WEB_APP' } },\n });\n\n const id = createData.oAuthApp?.id;\n if (!id) {\n throw new Error('Failed to create OAuth app — no ID returned');\n }\n\n console.log(`Client ID created: ${id}`);\n return id;\n}\n\nexport const embedCommand = new Command('embed')\n .description('Generate embed code for a Web5 component')\n .option('--type <type>', 'Embed type: script or react')\n .option('--client-id <id>', 'Use this client ID instead of fetching from the API')\n .option('--no-clipboard', 'Print to stdout only — skip the clipboard prompt')\n .action(async (opts: { type?: string; clientId?: string; clipboard: boolean }) => {\n try {\n const type: EmbedType = opts.type as EmbedType ?? (await promptForType());\n\n if (type === 'react') {\n console.log('no react for now');\n return;\n }\n\n const root = findProjectRoot(process.cwd());\n const config = root ? readConfig(root) : null;\n\n const clientId =\n opts.clientId ??\n (config?.clientId || undefined) ??\n (await getOrCreateClientId());\n\n if (root && config && config.clientId !== clientId) {\n writeConfig(root, { ...config, clientId });\n }\n\n const embedScript = `<script src=\"https://www.wix.com/embed/v1/component.js\" data-client-id=\"${clientId}\"></script>`;\n\n if (isJsonMode()) {\n console.log(JSON.stringify({ type, clientId, embedCode: embedScript }));\n return;\n }\n\n console.log('\\nEmbed script:\\n');\n console.log(embedScript);\n\n if (opts.clipboard !== false && process.stdout.isTTY) {\n await promptCopyToClipboard(embedScript);\n }\n } catch (err) {\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_commander","require","readline","_interopRequireWildcard","_child_process","_inquirer","_interopRequireDefault","_wixApi","_print","_project","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","copyToClipboard","text","cmd","process","platform","execSync","undefined","input","promptCopyToClipboard","rl","createInterface","stdin","output","stdout","Promise","resolve","question","close","console","log","promptForType","type","inquirer","prompt","name","message","choices","value","getOrCreateClientId","_createData$oAuthApp","queryData","wixRequest","path","method","body","apps","oAuthApps","existing","find","app","id","createData","oAuthApp","application_type","Error","embedCommand","exports","Command","description","option","action","opts","root","findProjectRoot","cwd","config","readConfig","clientId","writeConfig","embedScript","isJsonMode","JSON","stringify","embedCode","clipboard","isTTY","err","error","exit"],"sources":["../../../src/commands/embed.ts"],"sourcesContent":["import { Command } from 'commander';\nimport * as readline from 'readline';\nimport { execSync } from 'child_process';\nimport inquirer from 'inquirer';\nimport { wixRequest } from '../utils/wixApi';\nimport { isJsonMode } from '../utils/print';\nimport { findProjectRoot, readConfig, writeConfig } from '../utils/project';\n\nfunction copyToClipboard(text: string): void {\n const cmd =\n process.platform === 'win32'\n ? `echo ${text} | clip`\n : process.platform === 'darwin'\n ? 'pbcopy'\n : 'xclip -selection clipboard';\n\n execSync(\n process.platform === 'win32' ? `echo ${text} | clip` : cmd,\n process.platform === 'win32' ? undefined : { input: text },\n );\n}\n\nasync function promptCopyToClipboard(text: string): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n return new Promise((resolve) => {\n rl.question('\\nPress Enter to copy to clipboard...', () => {\n rl.close();\n copyToClipboard(text);\n console.log('Copied to clipboard.');\n resolve();\n });\n });\n}\n\ntype EmbedType = 'script' | 'react';\n\ninterface OAuthApp {\n id: string;\n name: string;\n}\n\ninterface QueryResponse {\n oAuthApps?: OAuthApp[];\n}\n\ninterface CreateResponse {\n oAuthApp?: OAuthApp;\n}\n\nasync function promptForType(): Promise<EmbedType> {\n const { type } = await inquirer.prompt<{ type: EmbedType }>([\n {\n type: 'list',\n name: 'type',\n message: 'Select embed type:',\n choices: [\n { name: 'Script tag', value: 'script' },\n { name: 'React component', value: 'react' },\n ],\n },\n ]);\n return type;\n}\n\nasync function getOrCreateClientId(): Promise<string> {\n console.log('Searching for client ID...');\n\n const queryData = await wixRequest<QueryResponse>({\n path: '/oauth-app/v1/oauth-apps/query',\n method: 'POST',\n body: {},\n });\n\n const apps = queryData.oAuthApps ?? [];\n const existing = apps.find((app) => app.name === 'web5');\n\n if (existing) {\n console.log(`Found client ID: ${existing.id}`);\n return existing.id;\n }\n\n console.log('Client ID not found, creating...');\n\n const createData = await wixRequest<CreateResponse>({\n path: '/oauth-app/v1/oauth-apps',\n method: 'POST',\n body: { oAuthApp: { name: 'web5', application_type: 'WEB_APP' } },\n });\n\n const id = createData.oAuthApp?.id;\n if (!id) {\n throw new Error('Failed to create OAuth app — no ID returned');\n }\n\n console.log(`Client ID created: ${id}`);\n return id;\n}\n\nexport const embedCommand = new Command('embed')\n .description('Generate embed code for a Web5 component')\n .option('--type <type>', 'Embed type: script or react')\n .option(\n '--client-id <id>',\n 'Use this client ID instead of fetching from the API',\n )\n .option('--no-clipboard', 'Print to stdout only — skip the clipboard prompt')\n .action(\n async (opts: { type?: string; clientId?: string; clipboard: boolean }) => {\n try {\n const type: EmbedType =\n (opts.type as EmbedType) ?? (await promptForType());\n\n if (type === 'react') {\n console.log('no react for now');\n return;\n }\n\n const root = findProjectRoot(process.cwd());\n const config = root ? readConfig(root) : null;\n\n const clientId =\n opts.clientId ??\n (config?.clientId || undefined) ??\n (await getOrCreateClientId());\n\n if (root && config && config.clientId !== clientId) {\n writeConfig(root, { ...config, clientId });\n }\n\n const embedScript = `<script src=\"https://www.wix.com/embed/v1/component.js\" data-client-id=\"${clientId}\"></script>`;\n\n if (isJsonMode()) {\n console.log(\n JSON.stringify({ type, clientId, embedCode: embedScript }),\n );\n return;\n }\n\n console.log('\\nEmbed script:\\n');\n console.log(embedScript);\n\n if (opts.clipboard !== false && process.stdout.isTTY) {\n await promptCopyToClipboard(embedScript);\n }\n } catch (err) {\n console.error('Error:', (err as Error).message);\n process.exit(1);\n }\n },\n );\n"],"mappings":"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","ignoreList":[]}
@@ -11,6 +11,8 @@ var _promises = require("fs/promises");
11
11
  var _chalk = _interopRequireDefault(require("chalk"));
12
12
  var _print = require("../utils/print");
13
13
  var _fs2 = require("../utils/fs");
14
+ var _auth = require("../auth");
15
+ var _deviceFlow = require("../auth/deviceFlow");
14
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
17
  const DEFAULTS_DIR = path.join(__dirname, '../../../defaults');
16
18
  function printBanner() {
@@ -73,8 +75,13 @@ async function resolveString(flag, isTTY, question, opts = {}) {
73
75
  const answers = await _inquirer.default.prompt(question);
74
76
  return answers.value ?? opts.defaultValue ?? '';
75
77
  }
76
- const initCommand = exports.initCommand = new _commander.Command('init').description('Scaffold a new Web5 client component library').option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults').option('--name <name>', 'npm package name (e.g. @wix/my-components)').option('--display-name <displayName>', 'human-readable display name').option('--dir <dir>', 'output directory (default: derived from package name)').action(async opts => {
78
+ const initCommand = exports.initCommand = new _commander.Command('init').description('Scaffold a new Web5 client component library').option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults').option('--name <name>', 'npm package name (e.g. @wix/my-components)').option('--display-name <displayName>', 'human-readable display name').option('--dir <dir>', 'output directory (default: derived from package name)').option('--msid <msid>', 'Wix site ID to bind this project to').action(async opts => {
77
79
  try {
80
+ const authed = await (0, _auth.isAuthenticated)();
81
+ if (!authed) {
82
+ (0, _print.error)('You must be logged in. Run `web5 login` first.');
83
+ process.exit(1);
84
+ }
78
85
  printBanner();
79
86
  const existing = findExistingConfig(process.cwd());
80
87
  if (existing) {
@@ -98,6 +105,28 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
98
105
  const stem = name.split('/').pop();
99
106
  const displayName = opts.displayName ?? stem.replace(/-/g, ' ');
100
107
  const dir = opts.dir ?? stem;
108
+ let msid;
109
+ if (opts.msid) {
110
+ msid = opts.msid;
111
+ } else if (isTTY) {
112
+ const token = await (0, _auth.getToken)();
113
+ msid = await (0, _deviceFlow.promptSiteSelection)(token);
114
+ } else {
115
+ (0, _print.error)('--msid is required in non-interactive mode');
116
+ process.exit(1);
117
+ }
118
+ let platformType;
119
+ if (isTTY) {
120
+ const answers = await _inquirer.default.prompt([{
121
+ type: 'list',
122
+ name: 'value',
123
+ message: 'Platform type:',
124
+ choices: ['Content', 'Ecommerce']
125
+ }]);
126
+ platformType = answers.value;
127
+ } else {
128
+ platformType = 'Content';
129
+ }
101
130
  const outDir = path.resolve(process.cwd(), dir);
102
131
  if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {
103
132
  (0, _print.warn)(`Directory ${outDir} already exists and is not empty`);
@@ -106,11 +135,13 @@ const initCommand = exports.initCommand = new _commander.Command('init').descrip
106
135
  void mode;
107
136
  const subs = {
108
137
  NAME: name,
109
- DISPLAY_NAME: displayName
138
+ DISPLAY_NAME: displayName,
139
+ MSID: msid,
140
+ PLATFORM_TYPE: platformType
110
141
  };
111
142
 
112
143
  // ── Root config files ─────────────────────────────────────────────────
113
- await copyDefault('web5.config.json', path.join(outDir, 'web5.config.json'), subs);
144
+ await copyDefault('.web5.config.json', path.join(outDir, 'web5.config.json'), subs);
114
145
  await copyDefault('package.template.json', path.join(outDir, 'package.json'), subs);
115
146
  await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));
116
147
 
@@ -1 +1 @@
1
- {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_chalk","_print","_fs2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","printBanner","logo","console","log","line","chalk","cyan","dim","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","copyDefaultTree","filter","cp","recursive","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","stem","split","pop","displayName","replace","dir","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","skill","folder","componentDir","ensureDir","success","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile, cp } from 'fs/promises';\nimport chalk from 'chalk';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\nfunction printBanner(): void {\n const logo = [\n '██╗ ██╗ ███████╗ ██████╗ ███████╗',\n '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝',\n '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗',\n '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║',\n '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║',\n ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝',\n ];\n console.log('');\n for (const line of logo) {\n console.log(chalk.cyan(line));\n }\n console.log('');\n console.log(chalk.dim(' Build AI-powered client components for the Wix platform.'));\n console.log(chalk.dim(' Define sections, actions, and AI instructions —'));\n console.log(chalk.dim(' the platform interprets user intent and delivers personalized experiences.'));\n console.log('');\n}\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nasync function copyDefaultTree(\n srcRelative: string,\n destAbsolute: string,\n filter?: (src: string, dest: string) => boolean,\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n await cp(srcPath, destAbsolute, { recursive: true, filter });\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .action(async (opts: InitOptions) => {\n try {\n printBanner();\n\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Derive: display name and output directory from package name ───────\n const stem = name.split('/').pop()!;\n const displayName = opts.displayName ?? stem.replace(/-/g, ' ');\n const dir = opts.dir ?? stem;\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = { NAME: name, DISPLAY_NAME: displayName };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n 'web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.template.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefaultTree(\n 'src/components',\n path.join(outDir, 'src', 'components'),\n );\n await copyDefaultTree(\n '.storybook',\n path.join(outDir, '.storybook'),\n );\n await copyDefault(\n 'src/vite.cdn.config.ts',\n path.join(outDir, 'src', 'vite.cdn.config.ts'),\n );\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/client.config.ts',\n path.join(outDir, 'src', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' npm install');\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":";;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,IAAA,GAAAC,uBAAA,CAAAJ,OAAA;AACA,IAAAK,EAAA,GAAAD,uBAAA,CAAAJ,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,MAAA,GAAAR,OAAA;AACA,IAAAS,IAAA,GAAAT,OAAA;AAAqD,SAAAI,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAErD,MAAMkB,YAAY,GAAG1B,IAAI,CAAC2B,IAAI,CAACC,SAAS,EAAE,mBAAmB,CAAC;AAE9D,SAASC,WAAWA,CAAA,EAAS;EAC3B,MAAMC,IAAI,GAAG,CACX,0CAA0C,EAC1C,0CAA0C,EAC1C,0CAA0C,EAC1C,0CAA0C,EAC1C,0CAA0C,EAC1C,0CAA0C,CAC3C;EACDC,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;EACf,KAAK,MAAMC,IAAI,IAAIH,IAAI,EAAE;IACvBC,OAAO,CAACC,GAAG,CAACE,cAAK,CAACC,IAAI,CAACF,IAAI,CAAC,CAAC;EAC/B;EACAF,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;EACfD,OAAO,CAACC,GAAG,CAACE,cAAK,CAACE,GAAG,CAAC,4DAA4D,CAAC,CAAC;EACpFL,OAAO,CAACC,GAAG,CAACE,cAAK,CAACE,GAAG,CAAC,mDAAmD,CAAC,CAAC;EAC3EL,OAAO,CAACC,GAAG,CAACE,cAAK,CAACE,GAAG,CAAC,8EAA8E,CAAC,CAAC;EACtGL,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;AACjB;AAWA,eAAeK,WAAWA,CACxBC,WAAmB,EACnBC,YAAoB,EACpBC,aAAqC,GAAG,CAAC,CAAC,EAC3B;EACf,MAAMC,OAAO,GAAGzC,IAAI,CAAC2B,IAAI,CAACD,YAAY,EAAEY,WAAW,CAAC;EACpD,IAAII,OAAO,GAAG,MAAM,IAAAC,kBAAQ,EAACF,OAAO,EAAE,MAAM,CAAC;EAC7C,KAAK,MAAM,CAACG,KAAK,EAAEC,KAAK,CAAC,IAAItB,MAAM,CAACuB,OAAO,CAACN,aAAa,CAAC,EAAE;IAC1DE,OAAO,GAAGA,OAAO,CAACK,UAAU,CAAC,KAAKH,KAAK,IAAI,EAAEC,KAAK,CAAC;EACrD;EACA,MAAM,IAAAG,gBAAW,EAACT,YAAY,EAAEG,OAAO,CAAC;AAC1C;AAEA,eAAeO,eAAeA,CAC5BX,WAAmB,EACnBC,YAAoB,EACpBW,MAA+C,EAChC;EACf,MAAMT,OAAO,GAAGzC,IAAI,CAAC2B,IAAI,CAACD,YAAY,EAAEY,WAAW,CAAC;EACpD,MAAM,IAAAa,YAAE,EAACV,OAAO,EAAEF,YAAY,EAAE;IAAEa,SAAS,EAAE,IAAI;IAAEF;EAAO,CAAC,CAAC;AAC9D;AAEA,SAASG,kBAAkBA,CAACC,QAAgB,EAAiB;EAC3D,IAAIC,OAAO,GAAGD,QAAQ;EACtB,IAAIE,MAAM,GAAGxD,IAAI,CAACyD,OAAO,CAACF,OAAO,CAAC;EAClC,OAAOA,OAAO,KAAKC,MAAM,EAAE;IACzB,MAAME,SAAS,GAAG1D,IAAI,CAAC2B,IAAI,CAAC4B,OAAO,EAAE,kBAAkB,CAAC;IACxD,IAAIrD,EAAE,CAACyD,UAAU,CAACD,SAAS,CAAC,EAAE;MAC5B,OAAOA,SAAS;IAClB;IACAH,OAAO,GAAGC,MAAM;IAChBA,MAAM,GAAGxD,IAAI,CAACyD,OAAO,CAACF,OAAO,CAAC;EAChC;EACA,MAAMG,SAAS,GAAG1D,IAAI,CAAC2B,IAAI,CAAC4B,OAAO,EAAE,kBAAkB,CAAC;EACxD,IAAIrD,EAAE,CAACyD,UAAU,CAACD,SAAS,CAAC,EAAE;IAC5B,OAAOA,SAAS;EAClB;EACA,OAAO,IAAI;AACb;AAEA,eAAeE,aAAaA,CAC1BC,IAAwB,EACxBC,KAAc,EACdC,QAA+C,EAC/CC,IAAiD,GAAG,CAAC,CAAC,EACrC;EACjB,IAAIH,IAAI,EAAE;IACR,OAAOA,IAAI;EACb;EACA,IAAI,CAACC,KAAK,EAAE;IACV,IAAIE,IAAI,CAACC,YAAY,KAAKC,SAAS,EAAE;MACnC,OAAOF,IAAI,CAACC,YAAY;IAC1B;IACA,IAAID,IAAI,CAACG,OAAO,EAAE;MAChB,IAAAC,YAAK,EAACJ,IAAI,CAACG,OAAO,CAAC;IACrB;IACAE,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;EACA,MAAMC,OAAO,GAAG,MAAMC,iBAAQ,CAACC,MAAM,CAAoBV,QAAQ,CAAC;EAClE,OAAOQ,OAAO,CAAC1B,KAAK,IAAImB,IAAI,CAACC,YAAY,IAAI,EAAE;AACjD;AAEO,MAAMS,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,IAAIE,kBAAO,CAAC,MAAM,CAAC,CAC3CC,WAAW,CAAC,8CAA8C,CAAC,CAC3DC,MAAM,CAAC,eAAe,EAAE,oCAAoC,EAAE,UAAU,CAAC,CACzEA,MAAM,CAAC,eAAe,EAAE,4CAA4C,CAAC,CACrEA,MAAM,CAAC,8BAA8B,EAAE,6BAA6B,CAAC,CACrEA,MAAM,CACL,aAAa,EACb,uDACF,CAAC,CACAC,MAAM,CAAC,MAAOf,IAAiB,IAAK;EACnC,IAAI;IACFnC,WAAW,CAAC,CAAC;IAEb,MAAMmD,QAAQ,GAAG3B,kBAAkB,CAACgB,OAAO,CAACY,GAAG,CAAC,CAAC,CAAC;IAClD,IAAID,QAAQ,EAAE;MACZ,IAAAE,WAAI,EAAC,sCAAsCF,QAAQ,EAAE,CAAC;MACtD,IAAAE,WAAI,EAAC,0CAA0C,CAAC;IAClD;IAEA,MAAMpB,KAAK,GAAGqB,OAAO,CAACd,OAAO,CAACe,KAAK,CAACtB,KAAK,CAAC;IAC1C,MAAMuB,IAAU,GAAGrB,IAAI,CAACqB,IAAI,IAAI,UAAU;;IAE1C;IACA,MAAMC,IAAI,GAAG,MAAM1B,aAAa,CAC9BI,IAAI,CAACsB,IAAI,EACTxB,KAAK,EACL,CACE;MACEyB,IAAI,EAAE,OAAO;MACbD,IAAI,EAAE,OAAO;MACbE,OAAO,EAAE,yCAAyC;MAClDC,QAAQ,EAAGC,CAAS,IAClBA,CAAC,CAACC,IAAI,CAAC,CAAC,CAACC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG;IACjC,CAAC,CACF,EACD;MAAEzB,OAAO,EAAE;IAA6C,CAC1D,CAAC;;IAED;IACA,MAAM0B,IAAI,GAAGP,IAAI,CAACQ,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,CAAC,CAAE;IACnC,MAAMC,WAAW,GAAGhC,IAAI,CAACgC,WAAW,IAAIH,IAAI,CAACI,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAC/D,MAAMC,GAAG,GAAGlC,IAAI,CAACkC,GAAG,IAAIL,IAAI;IAE5B,MAAMM,MAAM,GAAGnG,IAAI,CAACoG,OAAO,CAAC/B,OAAO,CAACY,GAAG,CAAC,CAAC,EAAEiB,GAAG,CAAC;IAE/C,IAAIhG,EAAE,CAACyD,UAAU,CAACwC,MAAM,CAAC,IAAIjG,EAAE,CAACmG,WAAW,CAACF,MAAM,CAAC,CAACP,MAAM,GAAG,CAAC,EAAE;MAC9D,IAAAV,WAAI,EAAC,aAAaiB,MAAM,kCAAkC,CAAC;IAC7D;IAEA,IAAAG,WAAI,EAAC,eAAehB,IAAI,WAAWa,MAAM,EAAE,CAAC;IAC5C,KAAKd,IAAI;IAET,MAAMkB,IAAI,GAAG;MAAEC,IAAI,EAAElB,IAAI;MAAEmB,YAAY,EAAET;IAAY,CAAC;;IAEtD;IACA,MAAM3D,WAAW,CACf,kBAAkB,EAClBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,kBAAkB,CAAC,EACrCI,IACF,CAAC;IACD,MAAMlE,WAAW,CACf,uBAAuB,EACvBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,cAAc,CAAC,EACjCI,IACF,CAAC;IACD,MAAMlE,WAAW,CAAC,eAAe,EAAErC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,eAAe,CAAC,CAAC;;IAEtE;IACA,MAAM9D,WAAW,CACf,cAAc,EACdrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EACpCI,IACF,CAAC;IACD,MAAMlE,WAAW,CACf,uBAAuB,EACvBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAC9C,CAAC;IACD,MAAMlD,eAAe,CACnB,gBAAgB,EAChBjD,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,YAAY,CACvC,CAAC;IACD,MAAMlD,eAAe,CACnB,YAAY,EACZjD,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,YAAY,CAChC,CAAC;IACD,MAAM9D,WAAW,CACf,wBAAwB,EACxBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,oBAAoB,CAC/C,CAAC;IACD;IACA,MAAM9D,WAAW,CACf,sBAAsB,EACtBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,kBAAkB,CAC7C,CAAC;IACD,MAAM9D,WAAW,CACf,+CAA+C,EAC/CrC,IAAI,CAAC2B,IAAI,CACPwE,MAAM,EACN,KAAK,EACL,eAAe,EACf,IAAI,EACJ,0BACF,CACF,CAAC;IACD,MAAM9D,WAAW,CACf,wCAAwC,EACxCrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,kBAAkB,CACrE,CAAC;IACD,MAAM9D,WAAW,CACf,uCAAuC,EACvCrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,CACpE,CAAC;;IAED;IACA,MAAM9D,WAAW,CACf,sBAAsB,EACtBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAChD,CAAC;IACD,MAAM9D,WAAW,CACf,+BAA+B,EAC/BrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,mBAAmB,CACzD,CAAC;IACD,MAAM9D,WAAW,CACf,4BAA4B,EAC5BrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,gBAAgB,CACtD,CAAC;IACD,MAAM9D,WAAW,CACf,8BAA8B,EAC9BrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,kBAAkB,CACxD,CAAC;IACD,MAAM9D,WAAW,CACf,iCAAiC,EACjCrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,CAC3D,CAAC;;IAED;IACA,MAAM9D,WAAW,CAAC,WAAW,EAAErC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,WAAW,CAAC,EAAEI,IAAI,CAAC;;IAEpE;IACA,MAAMlE,WAAW,CACf,sBAAsB,EACtBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAC5CI,IACF,CAAC;IACD,MAAMlE,WAAW,CACf,uBAAuB,EACvBrC,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAC7CI,IACF,CAAC;;IAED;IACA,KAAK,MAAMG,KAAK,IAAI,CAClB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,CACX,EAAE;MACD,MAAMrE,WAAW,CACf,UAAUqE,KAAK,KAAK,EACpB1G,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,QAAQ,EAAE,GAAGO,KAAK,KAAK,CAC3C,CAAC;IACH;;IAEA;IACA,KAAK,MAAMC,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE;MAClD,MAAMC,YAAY,GAAG5G,IAAI,CAAC2B,IAAI,CAACwE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAEQ,MAAM,CAAC;MACnE,MAAM,IAAAE,cAAS,EAACD,YAAY,CAAC;MAC7B,MAAM,IAAA5D,gBAAW,EAAChD,IAAI,CAAC2B,IAAI,CAACiF,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;IAC5D;;IAEA;IACA,IAAAE,cAAO,EAAC,WAAWxB,IAAI,EAAE,CAAC;IAC1BvD,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;IACf,IAAAsE,WAAI,EAAC,aAAa,CAAC;IACnB,IAAAA,WAAI,EAAC,QAAQJ,GAAG,EAAE,CAAC;IACnB,IAAAI,WAAI,EAAC,eAAe,CAAC;EACvB,CAAC,CAAC,OAAOS,IAAI,EAAE;IACb,IAAA3C,YAAK,EAAC2C,IAAI,YAAYC,KAAK,GAAGD,IAAI,CAACvB,OAAO,GAAGyB,MAAM,CAACF,IAAI,CAAC,CAAC;IAC1D1C,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EACjB;AACF,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_commander","require","_inquirer","_interopRequireDefault","path","_interopRequireWildcard","fs","_promises","_chalk","_print","_fs2","_auth","_deviceFlow","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULTS_DIR","join","__dirname","printBanner","logo","console","log","line","chalk","cyan","dim","copyDefault","srcRelative","destAbsolute","substitutions","srcPath","content","readFile","token","value","entries","replaceAll","atomicWrite","copyDefaultTree","filter","cp","recursive","findExistingConfig","startDir","current","parent","dirname","candidate","existsSync","resolveString","flag","isTTY","question","opts","defaultValue","undefined","exitMsg","error","process","exit","answers","inquirer","prompt","initCommand","exports","Command","description","option","action","authed","isAuthenticated","existing","cwd","warn","Boolean","stdin","mode","name","type","message","validate","v","trim","length","stem","split","pop","displayName","replace","dir","msid","getToken","promptSiteSelection","platformType","choices","outDir","resolve","readdirSync","info","subs","NAME","DISPLAY_NAME","MSID","PLATFORM_TYPE","skill","folder","componentDir","ensureDir","success","err_","Error","String"],"sources":["../../../src/commands/init.ts"],"sourcesContent":["import { Command } from 'commander';\nimport inquirer from 'inquirer';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { readFile, cp } from 'fs/promises';\nimport chalk from 'chalk';\nimport { success, error, info, warn } from '../utils/print';\nimport { atomicWrite, ensureDir } from '../utils/fs';\nimport { isAuthenticated, getToken } from '../auth';\nimport { promptSiteSelection } from '../auth/deviceFlow';\n\nconst DEFAULTS_DIR = path.join(__dirname, '../../../defaults');\n\nfunction printBanner(): void {\n const logo = [\n '██╗ ██╗ ███████╗ ██████╗ ███████╗',\n '██║ ██║ ██╔════╝ ██╔══██╗ ██╔════╝',\n '██║ █╗ ██║ █████╗ ██████╔╝ ███████╗',\n '██║███╗██║ ██╔══╝ ██╔══██╗ ╚════██║',\n '╚███╔███╔╝ ███████╗ ██████╔╝ ███████║',\n ' ╚══╝╚══╝ ╚══════╝ ╚═════╝ ╚══════╝',\n ];\n console.log('');\n for (const line of logo) {\n console.log(chalk.cyan(line));\n }\n console.log('');\n console.log(\n chalk.dim(' Build AI-powered client components for the Wix platform.'),\n );\n console.log(chalk.dim(' Define sections, actions, and AI instructions —'));\n console.log(\n chalk.dim(\n ' the platform interprets user intent and delivers personalized experiences.',\n ),\n );\n console.log('');\n}\n\ntype Mode = 'defaults' | 'scratch';\n\ninterface InitOptions {\n mode?: Mode;\n name?: string;\n displayName?: string;\n dir?: string;\n msid?: string;\n}\n\nasync function copyDefault(\n srcRelative: string,\n destAbsolute: string,\n substitutions: Record<string, string> = {},\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n let content = await readFile(srcPath, 'utf8');\n for (const [token, value] of Object.entries(substitutions)) {\n content = content.replaceAll(`{{${token}}}`, value);\n }\n await atomicWrite(destAbsolute, content);\n}\n\nasync function copyDefaultTree(\n srcRelative: string,\n destAbsolute: string,\n filter?: (src: string, dest: string) => boolean,\n): Promise<void> {\n const srcPath = path.join(DEFAULTS_DIR, srcRelative);\n await cp(srcPath, destAbsolute, { recursive: true, filter });\n}\n\nfunction findExistingConfig(startDir: string): string | null {\n let current = startDir;\n let parent = path.dirname(current);\n while (current !== parent) {\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n current = parent;\n parent = path.dirname(current);\n }\n const candidate = path.join(current, 'web5.config.json');\n if (fs.existsSync(candidate)) {\n return candidate;\n }\n return null;\n}\n\nasync function resolveString(\n flag: string | undefined,\n isTTY: boolean,\n question: Parameters<typeof inquirer.prompt>[0],\n opts: { defaultValue?: string; exitMsg?: string } = {},\n): Promise<string> {\n if (flag) {\n return flag;\n }\n if (!isTTY) {\n if (opts.defaultValue !== undefined) {\n return opts.defaultValue;\n }\n if (opts.exitMsg) {\n error(opts.exitMsg);\n }\n process.exit(1);\n }\n const answers = await inquirer.prompt<{ value: string }>(question);\n return answers.value ?? opts.defaultValue ?? '';\n}\n\nexport const initCommand = new Command('init')\n .description('Scaffold a new Web5 client component library')\n .option('--mode <mode>', 'scaffold mode: defaults or scratch', 'defaults')\n .option('--name <name>', 'npm package name (e.g. @wix/my-components)')\n .option('--display-name <displayName>', 'human-readable display name')\n .option(\n '--dir <dir>',\n 'output directory (default: derived from package name)',\n )\n .option('--msid <msid>', 'Wix site ID to bind this project to')\n .action(async (opts: InitOptions) => {\n try {\n const authed = await isAuthenticated();\n if (!authed) {\n error('You must be logged in. Run `web5 login` first.');\n process.exit(1);\n }\n\n printBanner();\n\n const existing = findExistingConfig(process.cwd());\n if (existing) {\n warn(`web5.config.json already exists at ${existing}`);\n warn('Proceeding will create a nested project.');\n }\n\n const isTTY = Boolean(process.stdin.isTTY);\n const mode: Mode = opts.mode ?? 'defaults';\n\n // ── Collect: package name ─────────────────────────────────────────────\n const name = await resolveString(\n opts.name,\n isTTY,\n [\n {\n type: 'input',\n name: 'value',\n message: 'Package name (e.g. @wix/my-components):',\n validate: (v: string) =>\n v.trim().length > 0 ? true : 'Package name is required',\n },\n ],\n { exitMsg: '--name is required in non-interactive mode' },\n );\n\n // ── Derive: display name and output directory from package name ───────\n const stem = name.split('/').pop()!;\n const displayName = opts.displayName ?? stem.replace(/-/g, ' ');\n const dir = opts.dir ?? stem;\n\n let msid: string;\n if (opts.msid) {\n msid = opts.msid;\n } else if (isTTY) {\n const token = await getToken();\n msid = await promptSiteSelection(token!);\n } else {\n error('--msid is required in non-interactive mode');\n process.exit(1);\n }\n\n let platformType: string;\n if (isTTY) {\n const answers = await inquirer.prompt<{ value: string }>([\n {\n type: 'list',\n name: 'value',\n message: 'Platform type:',\n choices: ['Content', 'Ecommerce'],\n },\n ]);\n platformType = answers.value;\n } else {\n platformType = 'Content';\n }\n\n const outDir = path.resolve(process.cwd(), dir);\n\n if (fs.existsSync(outDir) && fs.readdirSync(outDir).length > 0) {\n warn(`Directory ${outDir} already exists and is not empty`);\n }\n\n info(`Scaffolding ${name} \\u2192 ${outDir}`);\n void mode;\n\n const subs = {\n NAME: name,\n DISPLAY_NAME: displayName,\n MSID: msid,\n PLATFORM_TYPE: platformType,\n };\n\n // ── Root config files ─────────────────────────────────────────────────\n await copyDefault(\n '.web5.config.json',\n path.join(outDir, 'web5.config.json'),\n subs,\n );\n await copyDefault(\n 'package.template.json',\n path.join(outDir, 'package.json'),\n subs,\n );\n await copyDefault('tsconfig.json', path.join(outDir, 'tsconfig.json'));\n\n // ── src/ ──────────────────────────────────────────────────────────────\n await copyDefault(\n 'src/index.ts',\n path.join(outDir, 'src', 'index.ts'),\n subs,\n );\n await copyDefault(\n 'src/createRegistry.ts',\n path.join(outDir, 'src', 'createRegistry.ts'),\n );\n await copyDefaultTree(\n 'src/components',\n path.join(outDir, 'src', 'components'),\n );\n await copyDefaultTree('.storybook', path.join(outDir, '.storybook'));\n await copyDefault(\n 'src/vite.cdn.config.ts',\n path.join(outDir, 'src', 'vite.cdn.config.ts'),\n );\n // ── src/configuration/ ────────────────────────────────────────────────\n await copyDefault(\n 'src/client.config.ts',\n path.join(outDir, 'src', 'client.config.ts'),\n );\n await copyDefault(\n 'src/configuration/ai/prompt-instructions.yaml',\n path.join(\n outDir,\n 'src',\n 'configuration',\n 'ai',\n 'prompt-instructions.yaml',\n ),\n );\n await copyDefault(\n 'src/configuration/cms/cms-mapping.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-mapping.yaml'),\n );\n await copyDefault(\n 'src/configuration/cms/cms-schema.yaml',\n path.join(outDir, 'src', 'configuration', 'cms', 'cms-schema.yaml'),\n );\n\n // ── src/actions/ ──────────────────────────────────────────────────────\n await copyDefault(\n 'src/actions/index.ts',\n path.join(outDir, 'src', 'actions', 'index.ts'),\n );\n await copyDefault(\n 'src/actions/bookDemoAction.ts',\n path.join(outDir, 'src', 'actions', 'bookDemoAction.ts'),\n );\n await copyDefault(\n 'src/actions/book-demo.yaml',\n path.join(outDir, 'src', 'actions', 'book-demo.yaml'),\n );\n await copyDefault(\n 'src/actions/contactAction.ts',\n path.join(outDir, 'src', 'actions', 'contactAction.ts'),\n );\n await copyDefault(\n 'src/actions/contact-action.yaml',\n path.join(outDir, 'src', 'actions', 'contact-action.yaml'),\n );\n\n // ── AGENTS.md ─────────────────────────────────────────────────────────\n await copyDefault('AGENTS.md', path.join(outDir, 'AGENTS.md'), subs);\n\n // ── docs/ ─────────────────────────────────────────────────────────────\n await copyDefault(\n 'docs/architecture.md',\n path.join(outDir, 'docs', 'architecture.md'),\n subs,\n );\n await copyDefault(\n 'docs/api-reference.md',\n path.join(outDir, 'docs', 'api-reference.md'),\n subs,\n );\n\n // ── skills/ ───────────────────────────────────────────────────────────\n for (const skill of [\n 'action-add',\n 'action-remove',\n 'action-update',\n 'section-add',\n 'section-remove',\n 'section-update',\n 'slot-add',\n ]) {\n await copyDefault(\n `skills/${skill}.md`,\n path.join(outDir, 'skills', `${skill}.md`),\n );\n }\n\n // ── Component subdirectories ──────────────────────────────────────────\n for (const folder of ['base', 'slots', 'sections']) {\n const componentDir = path.join(outDir, 'src', 'components', folder);\n await ensureDir(componentDir);\n await atomicWrite(path.join(componentDir, '.gitkeep'), '');\n }\n\n // ── Done ──────────────────────────────────────────────────────────────\n success(`Created ${name}`);\n console.log('');\n info('Next steps:');\n info(` cd ${dir}`);\n info(' npm install');\n } catch (err_) {\n error(err_ instanceof Error ? err_.message : String(err_));\n process.exit(1);\n }\n });\n"],"mappings":"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","ignoreList":[]}