doomain 0.1.15 → 0.1.17
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.
- package/README.md +91 -2
- package/dist/commands/auth/clerk.d.ts +11 -0
- package/dist/commands/auth/clerk.js +55 -0
- package/dist/commands/auth/logout/clerk.d.ts +8 -0
- package/dist/commands/auth/logout/clerk.js +29 -0
- package/dist/commands/clerk/domains/add.d.ts +19 -0
- package/dist/commands/clerk/domains/add.js +92 -0
- package/dist/commands/domains/find.d.ts +15 -0
- package/dist/commands/domains/find.js +43 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/lib/clerk-domain.d.ts +39 -0
- package/dist/lib/clerk-domain.js +163 -0
- package/dist/lib/clerk.d.ts +56 -0
- package/dist/lib/clerk.js +65 -0
- package/dist/lib/command-schema.js +64 -2
- package/dist/lib/config.d.ts +5 -0
- package/dist/lib/domain-provider.d.ts +53 -0
- package/dist/lib/domain-provider.js +230 -0
- package/dist/lib/errors.d.ts +1 -1
- package/dist/lib/link-domain.d.ts +1 -0
- package/dist/lib/link-domain.js +3 -177
- package/oclif.manifest.json +222 -1
- package/package.json +7 -3
package/dist/lib/link-domain.js
CHANGED
|
@@ -2,12 +2,10 @@ import { resolve4, resolveCname, resolveTxt } from 'node:dns/promises';
|
|
|
2
2
|
import { existsSync, readFileSync } from 'node:fs';
|
|
3
3
|
import { dirname, join, parse } from 'node:path';
|
|
4
4
|
import { loadConfig } from './config.js';
|
|
5
|
+
import { resolveProviderTarget } from './domain-provider.js';
|
|
5
6
|
import { DoomainError } from './errors.js';
|
|
6
7
|
import { detectLocalVercelProject } from './local-vercel.js';
|
|
7
|
-
import {
|
|
8
|
-
import { createProvider, getProviderDefinition, listProviderDefinitions } from './providers/registry.js';
|
|
9
|
-
import { listProviderStatuses } from './providers/status.js';
|
|
10
|
-
import { normalizeDomain, normalizeSubdomain } from './validate.js';
|
|
8
|
+
import { createProvider } from './providers/registry.js';
|
|
11
9
|
import { createVercelClient, resolveVercelConfig, VERCEL_APEX_A_RECORD, VERCEL_CNAME_RECORD } from './vercel.js';
|
|
12
10
|
function cleanDnsValue(value) {
|
|
13
11
|
return value.toLowerCase().replace(/\.$/, '');
|
|
@@ -116,179 +114,7 @@ async function resolveZone(provider, zoneDomain) {
|
|
|
116
114
|
}
|
|
117
115
|
return zone;
|
|
118
116
|
}
|
|
119
|
-
|
|
120
|
-
return (await listProviderStatuses({ verify: false })).map((provider) => ({
|
|
121
|
-
configured: provider.configured,
|
|
122
|
-
account: provider.account,
|
|
123
|
-
default: provider.default,
|
|
124
|
-
displayName: provider.displayName,
|
|
125
|
-
docsUrl: provider.docsUrl,
|
|
126
|
-
id: provider.id,
|
|
127
|
-
isDefaultAccount: provider.isDefaultAccount,
|
|
128
|
-
}));
|
|
129
|
-
}
|
|
130
|
-
function resolveRequestedDomain(opts) {
|
|
131
|
-
if (opts.apex && opts.subdomain) {
|
|
132
|
-
throw new DoomainError('INVALID_INPUT', 'Use either --apex or --subdomain, not both.');
|
|
133
|
-
}
|
|
134
|
-
const domain = normalizeDomain(opts.domain);
|
|
135
|
-
if (opts.apex)
|
|
136
|
-
return { forceExactZone: true, fullDomain: domain };
|
|
137
|
-
if (!opts.subdomain)
|
|
138
|
-
return { forceExactZone: false, fullDomain: domain };
|
|
139
|
-
return { forceExactZone: false, fullDomain: `${normalizeSubdomain(opts.subdomain)}.${domain}` };
|
|
140
|
-
}
|
|
141
|
-
function zoneMatchesDomain(fullDomain, zoneDomain, forceExactZone) {
|
|
142
|
-
if (fullDomain === zoneDomain)
|
|
143
|
-
return true;
|
|
144
|
-
if (forceExactZone)
|
|
145
|
-
return false;
|
|
146
|
-
return fullDomain.endsWith(`.${zoneDomain}`);
|
|
147
|
-
}
|
|
148
|
-
function targetFromZone(fullDomain, zoneDomain) {
|
|
149
|
-
if (fullDomain === zoneDomain) {
|
|
150
|
-
return { fullDomain, isApex: true, recordName: '@', zoneDomain };
|
|
151
|
-
}
|
|
152
|
-
return {
|
|
153
|
-
fullDomain,
|
|
154
|
-
isApex: false,
|
|
155
|
-
recordName: fullDomain.slice(0, -(zoneDomain.length + 1)),
|
|
156
|
-
zoneDomain,
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
function candidateDetails(candidates) {
|
|
160
|
-
return candidates.map((candidate) => ({
|
|
161
|
-
account: candidate.account,
|
|
162
|
-
isDefaultAccount: candidate.isDefaultAccount,
|
|
163
|
-
provider: candidate.provider,
|
|
164
|
-
providerName: candidate.providerName,
|
|
165
|
-
zoneDomain: candidate.zone.name,
|
|
166
|
-
}));
|
|
167
|
-
}
|
|
168
|
-
function defaultAccountRef(providerId) {
|
|
169
|
-
return { account: DEFAULT_PROVIDER_ACCOUNT, isDefaultAccount: true, providerId };
|
|
170
|
-
}
|
|
171
|
-
function explicitAccountRef(providerId, account) {
|
|
172
|
-
const normalized = normalizeProviderAccount(account);
|
|
173
|
-
return { account: normalized, isDefaultAccount: isDefaultProviderAccount(normalized), providerId };
|
|
174
|
-
}
|
|
175
|
-
async function loadProviderZones(definition, account) {
|
|
176
|
-
const provider = await createProvider(definition.id, { account: account.account });
|
|
177
|
-
const zones = await provider.listZones();
|
|
178
|
-
return {
|
|
179
|
-
candidates: zones.map((zone) => ({
|
|
180
|
-
account: account.account,
|
|
181
|
-
isDefaultAccount: account.isDefaultAccount,
|
|
182
|
-
provider: definition.id,
|
|
183
|
-
providerName: definition.displayName,
|
|
184
|
-
zone,
|
|
185
|
-
})),
|
|
186
|
-
search: {
|
|
187
|
-
account: account.account,
|
|
188
|
-
displayName: definition.displayName,
|
|
189
|
-
id: definition.id,
|
|
190
|
-
isDefaultAccount: account.isDefaultAccount,
|
|
191
|
-
zones: zones.map((zone) => zone.name),
|
|
192
|
-
},
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
async function loadConfiguredProviderZones(providerId, accountInput) {
|
|
196
|
-
const config = await loadConfig();
|
|
197
|
-
const account = accountInput ? normalizeProviderAccount(accountInput) : undefined;
|
|
198
|
-
if (providerId) {
|
|
199
|
-
const definition = getProviderDefinition(providerId);
|
|
200
|
-
const accounts = account ? [explicitAccountRef(definition.id, account)] : listConfiguredProviderAccounts(config, definition);
|
|
201
|
-
const selectedAccounts = accounts.length > 0 ? accounts : [defaultAccountRef(definition.id)];
|
|
202
|
-
const results = await Promise.all(selectedAccounts.map((ref) => loadProviderZones(definition, ref)));
|
|
203
|
-
return {
|
|
204
|
-
accountInferred: account === undefined,
|
|
205
|
-
candidates: results.flatMap((result) => result.candidates),
|
|
206
|
-
providerInferred: false,
|
|
207
|
-
searched: results.map((result) => result.search),
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
const providerAccounts = listProviderDefinitions().flatMap((definition) => listConfiguredProviderAccounts(config, definition)
|
|
211
|
-
.filter((ref) => !account || ref.account === account)
|
|
212
|
-
.map((ref) => ({ definition, ref })));
|
|
213
|
-
if (providerAccounts.length === 0) {
|
|
214
|
-
const message = account
|
|
215
|
-
? `No DNS provider account named ${account} is configured. Run \`doomain providers connect <provider> --account ${account}\` first.`
|
|
216
|
-
: 'No DNS provider is configured. Run `doomain providers connect` first.';
|
|
217
|
-
throw new DoomainError('CONFIG_NOT_FOUND', message, {
|
|
218
|
-
account,
|
|
219
|
-
configuredProviders: await providerConnectionDetails(),
|
|
220
|
-
recovery: 'Connect the DNS provider that owns this domain, then retry `doomain link <domain> --json`.',
|
|
221
|
-
suggestedCommands: account
|
|
222
|
-
? [`doomain providers connect <provider> --account ${account}`, 'doomain link <domain> --json']
|
|
223
|
-
: ['doomain providers connect', 'doomain link <domain> --json'],
|
|
224
|
-
});
|
|
225
|
-
}
|
|
226
|
-
const results = await Promise.all(providerAccounts.map(async ({ definition, ref }) => {
|
|
227
|
-
try {
|
|
228
|
-
return await loadProviderZones(definition, ref);
|
|
229
|
-
}
|
|
230
|
-
catch (error) {
|
|
231
|
-
return {
|
|
232
|
-
candidates: [],
|
|
233
|
-
search: {
|
|
234
|
-
account: ref.account,
|
|
235
|
-
displayName: definition.displayName,
|
|
236
|
-
error: error instanceof Error ? error.message : String(error),
|
|
237
|
-
id: definition.id,
|
|
238
|
-
isDefaultAccount: ref.isDefaultAccount,
|
|
239
|
-
zones: [],
|
|
240
|
-
},
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
}));
|
|
244
|
-
return {
|
|
245
|
-
accountInferred: account === undefined,
|
|
246
|
-
candidates: results.flatMap((result) => result.candidates),
|
|
247
|
-
providerInferred: true,
|
|
248
|
-
searched: results.map((result) => result.search),
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
async function resolveProviderTarget(input) {
|
|
252
|
-
const requested = resolveRequestedDomain({
|
|
253
|
-
apex: input.apex,
|
|
254
|
-
domain: await resolveConfiguredDomain(input.domain),
|
|
255
|
-
subdomain: input.subdomain,
|
|
256
|
-
});
|
|
257
|
-
const zones = await loadConfiguredProviderZones(input.provider, input.account);
|
|
258
|
-
const matches = zones.candidates
|
|
259
|
-
.filter((candidate) => zoneMatchesDomain(requested.fullDomain, candidate.zone.name, requested.forceExactZone))
|
|
260
|
-
.sort((a, b) => b.zone.name.length - a.zone.name.length);
|
|
261
|
-
if (matches.length === 0) {
|
|
262
|
-
const account = input.account ? normalizeProviderAccount(input.account) : undefined;
|
|
263
|
-
const providerMessage = input.provider
|
|
264
|
-
? `${getProviderDefinition(input.provider).displayName}${account ? ` account ${account}` : ''} does not have a matching DNS zone for ${requested.fullDomain}.`
|
|
265
|
-
: `No configured DNS provider has a matching DNS zone for ${requested.fullDomain}.`;
|
|
266
|
-
throw new DoomainError('PROVIDER_ZONE_NOT_FOUND', providerMessage, {
|
|
267
|
-
account,
|
|
268
|
-
configuredProviders: await providerConnectionDetails(),
|
|
269
|
-
domain: requested.fullDomain,
|
|
270
|
-
recovery: 'Retry with --provider <id> --account <alias> only if another configured provider account owns this zone. Otherwise connect the DNS provider account that owns this domain.',
|
|
271
|
-
searchedZones: zones.searched,
|
|
272
|
-
suggestedCommands: [`doomain link ${requested.fullDomain} --provider <id> --account <alias> --json`, 'doomain providers connect'],
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
const bestLength = matches[0].zone.name.length;
|
|
276
|
-
const bestMatches = matches.filter((candidate) => candidate.zone.name.length === bestLength);
|
|
277
|
-
const uniqueBestMatches = bestMatches.filter((candidate, index, candidates) => candidates.findIndex((item) => item.provider === candidate.provider && item.account === candidate.account && item.zone.name === candidate.zone.name) === index);
|
|
278
|
-
if (uniqueBestMatches.length > 1) {
|
|
279
|
-
throw new DoomainError('PROVIDER_ZONE_AMBIGUOUS', `Multiple DNS provider accounts have a matching DNS zone for ${requested.fullDomain}. Pass --provider and --account to choose one.`, { candidates: candidateDetails(uniqueBestMatches), domain: requested.fullDomain });
|
|
280
|
-
}
|
|
281
|
-
const selected = uniqueBestMatches[0];
|
|
282
|
-
return {
|
|
283
|
-
account: selected.account,
|
|
284
|
-
accountInferred: zones.accountInferred,
|
|
285
|
-
isDefaultAccount: selected.isDefaultAccount,
|
|
286
|
-
provider: selected.provider,
|
|
287
|
-
providerInferred: zones.providerInferred,
|
|
288
|
-
target: targetFromZone(requested.fullDomain, selected.zone.name),
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
function withProviderRecordOptions(provider, record) {
|
|
117
|
+
export function withProviderRecordOptions(provider, record) {
|
|
292
118
|
if (provider !== 'cloudflare' || !['A', 'AAAA', 'CNAME'].includes(record.type))
|
|
293
119
|
return record;
|
|
294
120
|
return { ...record, proxied: false };
|
package/oclif.manifest.json
CHANGED
|
@@ -225,6 +225,51 @@
|
|
|
225
225
|
"wizard.js"
|
|
226
226
|
]
|
|
227
227
|
},
|
|
228
|
+
"auth:clerk": {
|
|
229
|
+
"aliases": [],
|
|
230
|
+
"args": {},
|
|
231
|
+
"description": "Save Clerk Platform API credentials locally.",
|
|
232
|
+
"examples": [
|
|
233
|
+
"<%= config.bin %> <%= command.id %> --platform-api-key ak_123 --app app_123 --json"
|
|
234
|
+
],
|
|
235
|
+
"flags": {
|
|
236
|
+
"app": {
|
|
237
|
+
"description": "Default Clerk application id.",
|
|
238
|
+
"name": "app",
|
|
239
|
+
"hasDynamicHelp": false,
|
|
240
|
+
"multiple": false,
|
|
241
|
+
"type": "option"
|
|
242
|
+
},
|
|
243
|
+
"json": {
|
|
244
|
+
"description": "Output a single JSON object and never prompt.",
|
|
245
|
+
"name": "json",
|
|
246
|
+
"allowNo": false,
|
|
247
|
+
"type": "boolean"
|
|
248
|
+
},
|
|
249
|
+
"platform-api-key": {
|
|
250
|
+
"description": "Clerk Platform API key (ak_...).",
|
|
251
|
+
"name": "platform-api-key",
|
|
252
|
+
"hasDynamicHelp": false,
|
|
253
|
+
"multiple": false,
|
|
254
|
+
"type": "option"
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
"hasDynamicHelp": false,
|
|
258
|
+
"hiddenAliases": [],
|
|
259
|
+
"id": "auth:clerk",
|
|
260
|
+
"pluginAlias": "doomain",
|
|
261
|
+
"pluginName": "doomain",
|
|
262
|
+
"pluginType": "core",
|
|
263
|
+
"strict": true,
|
|
264
|
+
"enableJsonFlag": false,
|
|
265
|
+
"isESM": true,
|
|
266
|
+
"relativePath": [
|
|
267
|
+
"dist",
|
|
268
|
+
"commands",
|
|
269
|
+
"auth",
|
|
270
|
+
"clerk.js"
|
|
271
|
+
]
|
|
272
|
+
},
|
|
228
273
|
"auth:vercel": {
|
|
229
274
|
"aliases": [],
|
|
230
275
|
"args": {},
|
|
@@ -267,6 +312,66 @@
|
|
|
267
312
|
"vercel.js"
|
|
268
313
|
]
|
|
269
314
|
},
|
|
315
|
+
"domains:find": {
|
|
316
|
+
"aliases": [],
|
|
317
|
+
"args": {
|
|
318
|
+
"domain": {
|
|
319
|
+
"description": "Domain whose DNS provider should be found.",
|
|
320
|
+
"name": "domain",
|
|
321
|
+
"required": false
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"description": "Find the configured DNS provider and account for a domain.",
|
|
325
|
+
"examples": [
|
|
326
|
+
"<%= config.bin %> <%= command.id %> example.com --json",
|
|
327
|
+
"<%= config.bin %> <%= command.id %> api.example.com --json",
|
|
328
|
+
"<%= config.bin %> <%= command.id %> --domain example.com --provider spaceship --json"
|
|
329
|
+
],
|
|
330
|
+
"flags": {
|
|
331
|
+
"account": {
|
|
332
|
+
"description": "DNS provider profile/account alias. Defaults to the provider default account.",
|
|
333
|
+
"name": "account",
|
|
334
|
+
"hasDynamicHelp": false,
|
|
335
|
+
"multiple": false,
|
|
336
|
+
"type": "option"
|
|
337
|
+
},
|
|
338
|
+
"domain": {
|
|
339
|
+
"description": "Target domain or base zone, for example app.example.com or example.com.",
|
|
340
|
+
"name": "domain",
|
|
341
|
+
"hasDynamicHelp": false,
|
|
342
|
+
"multiple": false,
|
|
343
|
+
"type": "option"
|
|
344
|
+
},
|
|
345
|
+
"json": {
|
|
346
|
+
"description": "Output a single JSON object and never prompt.",
|
|
347
|
+
"name": "json",
|
|
348
|
+
"allowNo": false,
|
|
349
|
+
"type": "boolean"
|
|
350
|
+
},
|
|
351
|
+
"provider": {
|
|
352
|
+
"description": "DNS provider id. Inferred from the target domain when omitted.",
|
|
353
|
+
"name": "provider",
|
|
354
|
+
"hasDynamicHelp": false,
|
|
355
|
+
"multiple": false,
|
|
356
|
+
"type": "option"
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
"hasDynamicHelp": false,
|
|
360
|
+
"hiddenAliases": [],
|
|
361
|
+
"id": "domains:find",
|
|
362
|
+
"pluginAlias": "doomain",
|
|
363
|
+
"pluginName": "doomain",
|
|
364
|
+
"pluginType": "core",
|
|
365
|
+
"strict": true,
|
|
366
|
+
"enableJsonFlag": false,
|
|
367
|
+
"isESM": true,
|
|
368
|
+
"relativePath": [
|
|
369
|
+
"dist",
|
|
370
|
+
"commands",
|
|
371
|
+
"domains",
|
|
372
|
+
"find.js"
|
|
373
|
+
]
|
|
374
|
+
},
|
|
270
375
|
"domains:list": {
|
|
271
376
|
"aliases": [],
|
|
272
377
|
"args": {},
|
|
@@ -639,6 +744,35 @@
|
|
|
639
744
|
"verify.js"
|
|
640
745
|
]
|
|
641
746
|
},
|
|
747
|
+
"auth:logout:clerk": {
|
|
748
|
+
"aliases": [],
|
|
749
|
+
"args": {},
|
|
750
|
+
"description": "Remove saved Clerk credentials locally.",
|
|
751
|
+
"flags": {
|
|
752
|
+
"json": {
|
|
753
|
+
"description": "Output a single JSON object and never prompt.",
|
|
754
|
+
"name": "json",
|
|
755
|
+
"allowNo": false,
|
|
756
|
+
"type": "boolean"
|
|
757
|
+
}
|
|
758
|
+
},
|
|
759
|
+
"hasDynamicHelp": false,
|
|
760
|
+
"hiddenAliases": [],
|
|
761
|
+
"id": "auth:logout:clerk",
|
|
762
|
+
"pluginAlias": "doomain",
|
|
763
|
+
"pluginName": "doomain",
|
|
764
|
+
"pluginType": "core",
|
|
765
|
+
"strict": true,
|
|
766
|
+
"enableJsonFlag": false,
|
|
767
|
+
"isESM": true,
|
|
768
|
+
"relativePath": [
|
|
769
|
+
"dist",
|
|
770
|
+
"commands",
|
|
771
|
+
"auth",
|
|
772
|
+
"logout",
|
|
773
|
+
"clerk.js"
|
|
774
|
+
]
|
|
775
|
+
},
|
|
642
776
|
"auth:logout:vercel": {
|
|
643
777
|
"aliases": [],
|
|
644
778
|
"args": {},
|
|
@@ -671,7 +805,94 @@
|
|
|
671
805
|
"logout",
|
|
672
806
|
"vercel.js"
|
|
673
807
|
]
|
|
808
|
+
},
|
|
809
|
+
"clerk:domains:add": {
|
|
810
|
+
"aliases": [],
|
|
811
|
+
"args": {
|
|
812
|
+
"domain": {
|
|
813
|
+
"description": "Production primary domain, for example example.com.",
|
|
814
|
+
"name": "domain",
|
|
815
|
+
"required": true
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
"description": "Create a Clerk production instance with its primary domain and configure DNS.",
|
|
819
|
+
"examples": [
|
|
820
|
+
"<%= config.bin %> <%= command.id %> example.com --app app_123 --json",
|
|
821
|
+
"<%= config.bin %> <%= command.id %> example.com --app app_123 --provider cloudflare --no-wait",
|
|
822
|
+
"<%= config.bin %> <%= command.id %> example.com --app app_123 --dry-run --json"
|
|
823
|
+
],
|
|
824
|
+
"flags": {
|
|
825
|
+
"account": {
|
|
826
|
+
"description": "DNS provider profile/account alias. Defaults to the provider default account.",
|
|
827
|
+
"name": "account",
|
|
828
|
+
"hasDynamicHelp": false,
|
|
829
|
+
"multiple": false,
|
|
830
|
+
"type": "option"
|
|
831
|
+
},
|
|
832
|
+
"app": {
|
|
833
|
+
"description": "Clerk application id. Defaults to CLERK_APPLICATION_ID or saved Clerk config.",
|
|
834
|
+
"name": "app",
|
|
835
|
+
"hasDynamicHelp": false,
|
|
836
|
+
"multiple": false,
|
|
837
|
+
"type": "option"
|
|
838
|
+
},
|
|
839
|
+
"dry-run": {
|
|
840
|
+
"description": "Check the Clerk application and DNS zone without creating the production instance.",
|
|
841
|
+
"name": "dry-run",
|
|
842
|
+
"allowNo": false,
|
|
843
|
+
"type": "boolean"
|
|
844
|
+
},
|
|
845
|
+
"force": {
|
|
846
|
+
"description": "Overwrite DNS records that conflict with Clerk requirements.",
|
|
847
|
+
"name": "force",
|
|
848
|
+
"allowNo": false,
|
|
849
|
+
"type": "boolean"
|
|
850
|
+
},
|
|
851
|
+
"json": {
|
|
852
|
+
"description": "Output a single JSON object and never prompt.",
|
|
853
|
+
"name": "json",
|
|
854
|
+
"allowNo": false,
|
|
855
|
+
"type": "boolean"
|
|
856
|
+
},
|
|
857
|
+
"provider": {
|
|
858
|
+
"description": "DNS provider id. Inferred from the target domain when omitted.",
|
|
859
|
+
"name": "provider",
|
|
860
|
+
"hasDynamicHelp": false,
|
|
861
|
+
"multiple": false,
|
|
862
|
+
"type": "option"
|
|
863
|
+
},
|
|
864
|
+
"timeout": {
|
|
865
|
+
"description": "Wait timeout in seconds.",
|
|
866
|
+
"name": "timeout",
|
|
867
|
+
"default": 300,
|
|
868
|
+
"hasDynamicHelp": false,
|
|
869
|
+
"multiple": false,
|
|
870
|
+
"type": "option"
|
|
871
|
+
},
|
|
872
|
+
"wait": {
|
|
873
|
+
"description": "Wait for Clerk DNS, SSL, and email DNS verification.",
|
|
874
|
+
"name": "wait",
|
|
875
|
+
"allowNo": true,
|
|
876
|
+
"type": "boolean"
|
|
877
|
+
}
|
|
878
|
+
},
|
|
879
|
+
"hasDynamicHelp": false,
|
|
880
|
+
"hiddenAliases": [],
|
|
881
|
+
"id": "clerk:domains:add",
|
|
882
|
+
"pluginAlias": "doomain",
|
|
883
|
+
"pluginName": "doomain",
|
|
884
|
+
"pluginType": "core",
|
|
885
|
+
"strict": true,
|
|
886
|
+
"enableJsonFlag": false,
|
|
887
|
+
"isESM": true,
|
|
888
|
+
"relativePath": [
|
|
889
|
+
"dist",
|
|
890
|
+
"commands",
|
|
891
|
+
"clerk",
|
|
892
|
+
"domains",
|
|
893
|
+
"add.js"
|
|
894
|
+
]
|
|
674
895
|
}
|
|
675
896
|
},
|
|
676
|
-
"version": "0.1.
|
|
897
|
+
"version": "0.1.17"
|
|
677
898
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "doomain",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.1.
|
|
3
|
+
"description": "Configure Vercel and Clerk production domains in seconds",
|
|
4
|
+
"version": "0.1.17",
|
|
5
5
|
"author": "Crafter Station",
|
|
6
6
|
"packageManager": "bun@1.3.13",
|
|
7
7
|
"bin": {
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
"keywords": [
|
|
40
40
|
"dns",
|
|
41
41
|
"domains",
|
|
42
|
-
"vercel"
|
|
42
|
+
"vercel",
|
|
43
|
+
"clerk"
|
|
43
44
|
],
|
|
44
45
|
"license": "MIT",
|
|
45
46
|
"main": "dist/index.js",
|
|
@@ -56,6 +57,9 @@
|
|
|
56
57
|
"auth": {
|
|
57
58
|
"description": "Manage authentication"
|
|
58
59
|
},
|
|
60
|
+
"clerk": {
|
|
61
|
+
"description": "Configure Clerk production domains"
|
|
62
|
+
},
|
|
59
63
|
"domains": {
|
|
60
64
|
"description": "Inspect DNS domains"
|
|
61
65
|
},
|