@forjio/fulkruma-cli 0.4.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.
- package/bin/cli.js +2 -0
- package/dist/commands/addresses.d.ts +5 -0
- package/dist/commands/addresses.js +90 -0
- package/dist/commands/addresses.js.map +1 -0
- package/dist/commands/api-keys.d.ts +5 -0
- package/dist/commands/api-keys.js +78 -0
- package/dist/commands/api-keys.js.map +1 -0
- package/dist/commands/api.generated.d.ts +23 -0
- package/dist/commands/api.generated.js +2003 -0
- package/dist/commands/api.generated.js.map +1 -0
- package/dist/commands/audit-log.d.ts +5 -0
- package/dist/commands/audit-log.js +46 -0
- package/dist/commands/audit-log.js.map +1 -0
- package/dist/commands/auth.d.ts +10 -0
- package/dist/commands/auth.js +116 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/billing.d.ts +5 -0
- package/dist/commands/billing.js +144 -0
- package/dist/commands/billing.js.map +1 -0
- package/dist/commands/deliveries.d.ts +5 -0
- package/dist/commands/deliveries.js +77 -0
- package/dist/commands/deliveries.js.map +1 -0
- package/dist/commands/integrations.d.ts +5 -0
- package/dist/commands/integrations.js +24 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/licenses.d.ts +5 -0
- package/dist/commands/licenses.js +142 -0
- package/dist/commands/licenses.js.map +1 -0
- package/dist/commands/products.d.ts +12 -0
- package/dist/commands/products.js +244 -0
- package/dist/commands/products.js.map +1 -0
- package/dist/commands/shipments.d.ts +6 -0
- package/dist/commands/shipments.js +108 -0
- package/dist/commands/shipments.js.map +1 -0
- package/dist/commands/shipping.d.ts +2 -0
- package/dist/commands/shipping.js +269 -0
- package/dist/commands/shipping.js.map +1 -0
- package/dist/commands/stats.d.ts +5 -0
- package/dist/commands/stats.js +24 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/stock.d.ts +5 -0
- package/dist/commands/stock.js +112 -0
- package/dist/commands/stock.js.map +1 -0
- package/dist/commands/warehouses.d.ts +5 -0
- package/dist/commands/warehouses.js +111 -0
- package/dist/commands/warehouses.js.map +1 -0
- package/dist/commands/webhooks.d.ts +5 -0
- package/dist/commands/webhooks.js +125 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/apigen-call.d.ts +4 -0
- package/dist/lib/apigen-call.js +34 -0
- package/dist/lib/apigen-call.js.map +1 -0
- package/dist/lib/client.d.ts +21 -0
- package/dist/lib/client.js +41 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/credentials.d.ts +25 -0
- package/dist/lib/credentials.js +158 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/output.d.ts +19 -0
- package/dist/lib/output.js +69 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/util.d.ts +18 -0
- package/dist/lib/util.js +65 -0
- package/dist/lib/util.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fulkruma licenses …` — list, issue, revoke, validate, activate, deactivate.
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { getClient } from '../lib/client.js';
|
|
6
|
+
import { formatOpts, getGlobalOpts, handleError, parseIntArg } from '../lib/util.js';
|
|
7
|
+
import { printResult } from '../lib/output.js';
|
|
8
|
+
const licenseColumns = [
|
|
9
|
+
{ header: 'ID', accessor: (l) => l.id },
|
|
10
|
+
{ header: 'Key', accessor: (l) => l.key },
|
|
11
|
+
{ header: 'Product', accessor: (l) => l.productId },
|
|
12
|
+
{ header: 'Customer', accessor: (l) => l.customerId },
|
|
13
|
+
{ header: 'Status', accessor: (l) => l.status },
|
|
14
|
+
{ header: 'Activations', accessor: (l) => `${l.activations}/${l.maxActivations}` },
|
|
15
|
+
{ header: 'Expires', accessor: (l) => l.expiresAt },
|
|
16
|
+
];
|
|
17
|
+
export const licensesCommand = new Command('licenses').description('Software license keys');
|
|
18
|
+
licensesCommand
|
|
19
|
+
.command('list')
|
|
20
|
+
.description('List licenses')
|
|
21
|
+
.action(async (_options, cmd) => {
|
|
22
|
+
const g = getGlobalOpts(cmd);
|
|
23
|
+
try {
|
|
24
|
+
const client = getClient(g);
|
|
25
|
+
const { licenses } = await client.licenses.list();
|
|
26
|
+
printResult(licenses, licenseColumns, formatOpts(g));
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
handleError(err, g);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
licensesCommand
|
|
34
|
+
.command('issue')
|
|
35
|
+
.description('Issue a new license')
|
|
36
|
+
.requiredOption('--product-id <id>', 'product id')
|
|
37
|
+
.requiredOption('--customer-id <id>', 'customer id')
|
|
38
|
+
.option('--max-activations <n>', 'maximum activations', parseIntArg)
|
|
39
|
+
.option('--expires-at <iso>', 'ISO-8601 expiry timestamp')
|
|
40
|
+
.option('--external-source <name>', 'external source')
|
|
41
|
+
.option('--external-ref <id>', 'external reference id')
|
|
42
|
+
.action(async (options, cmd) => {
|
|
43
|
+
const g = getGlobalOpts(cmd);
|
|
44
|
+
try {
|
|
45
|
+
const client = getClient(g);
|
|
46
|
+
const { license } = await client.licenses.issue({
|
|
47
|
+
productId: options['productId'],
|
|
48
|
+
customerId: options['customerId'],
|
|
49
|
+
maxActivations: options['maxActivations'],
|
|
50
|
+
expiresAt: options['expiresAt'],
|
|
51
|
+
externalSource: options['externalSource'],
|
|
52
|
+
externalRef: options['externalRef'],
|
|
53
|
+
});
|
|
54
|
+
printResult(license, licenseColumns, formatOpts(g));
|
|
55
|
+
process.exit(0);
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
handleError(err, g);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
licensesCommand
|
|
62
|
+
.command('revoke <id>')
|
|
63
|
+
.description('Revoke a license')
|
|
64
|
+
.action(async (id, _options, cmd) => {
|
|
65
|
+
const g = getGlobalOpts(cmd);
|
|
66
|
+
try {
|
|
67
|
+
const client = getClient(g);
|
|
68
|
+
const { license } = await client.licenses.revoke(id);
|
|
69
|
+
printResult(license, licenseColumns, formatOpts(g));
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
handleError(err, g);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
licensesCommand
|
|
77
|
+
.command('validate <key>')
|
|
78
|
+
.description('Validate a license key')
|
|
79
|
+
.option('--product-id <id>', 'product id (optional, narrows match)')
|
|
80
|
+
.action(async (key, options, cmd) => {
|
|
81
|
+
const g = getGlobalOpts(cmd);
|
|
82
|
+
try {
|
|
83
|
+
const client = getClient(g);
|
|
84
|
+
const result = await client.licenses.validate({
|
|
85
|
+
key,
|
|
86
|
+
productId: options.productId,
|
|
87
|
+
});
|
|
88
|
+
printResult(result, [
|
|
89
|
+
{ header: 'Key', accessor: (r) => r.key },
|
|
90
|
+
{ header: 'Valid', accessor: (r) => r.valid },
|
|
91
|
+
{ header: 'Status', accessor: (r) => r.status },
|
|
92
|
+
{ header: 'Product', accessor: (r) => r.productId },
|
|
93
|
+
{ header: 'Activations', accessor: (r) => `${r.activations ?? 0}/${r.maxActivations ?? 0}` },
|
|
94
|
+
{ header: 'Expires', accessor: (r) => r.expiresAt },
|
|
95
|
+
], formatOpts(g));
|
|
96
|
+
process.exit(0);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
handleError(err, g);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
licensesCommand
|
|
103
|
+
.command('activate <key> <instanceId>')
|
|
104
|
+
.description('Activate a license for a specific instance')
|
|
105
|
+
.action(async (key, instanceId, _options, cmd) => {
|
|
106
|
+
const g = getGlobalOpts(cmd);
|
|
107
|
+
try {
|
|
108
|
+
const client = getClient(g);
|
|
109
|
+
const result = await client.licenses.activate({ key, instanceId });
|
|
110
|
+
printResult(result, [
|
|
111
|
+
{ header: 'Key', accessor: (r) => r.license.key },
|
|
112
|
+
{ header: 'Status', accessor: (r) => r.license.status },
|
|
113
|
+
{ header: 'Activations', accessor: (r) => `${r.license.activations}/${r.license.maxActivations}` },
|
|
114
|
+
{ header: 'Instance', accessor: (r) => r.activation.instanceId },
|
|
115
|
+
{ header: 'Already Active', accessor: (r) => r.alreadyActive },
|
|
116
|
+
], formatOpts(g));
|
|
117
|
+
process.exit(0);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
handleError(err, g);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
licensesCommand
|
|
124
|
+
.command('deactivate <key> <instanceId>')
|
|
125
|
+
.description('Release a previously-activated instance')
|
|
126
|
+
.action(async (key, instanceId, _options, cmd) => {
|
|
127
|
+
const g = getGlobalOpts(cmd);
|
|
128
|
+
try {
|
|
129
|
+
const client = getClient(g);
|
|
130
|
+
const result = await client.licenses.deactivate({ key, instanceId });
|
|
131
|
+
printResult(result, [
|
|
132
|
+
{ header: 'Deactivated', accessor: (r) => r.deactivated },
|
|
133
|
+
{ header: 'Already Deactivated', accessor: (r) => r.alreadyDeactivated },
|
|
134
|
+
{ header: 'Activations', accessor: (r) => r.activations },
|
|
135
|
+
], formatOpts(g));
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
handleError(err, g);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
//# sourceMappingURL=licenses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"licenses.js","sourceRoot":"","sources":["../../src/commands/licenses.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fulkruma products …` — list, get, create, update, archive.
|
|
3
|
+
*
|
|
4
|
+
* Includes a `variants` subgroup (list/get/create/update/archive). The
|
|
5
|
+
* SDK exposes addVariant/updateVariant/archiveVariant directly, but does
|
|
6
|
+
* not have variant list/get endpoints — variants are returned as part of
|
|
7
|
+
* the parent product, so list+get derive from `products.get(id).variants`.
|
|
8
|
+
*
|
|
9
|
+
* All calls go through `FulkrumaClient.products` from `@forjio/fulkruma-node`.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
export declare const productsCommand: Command;
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fulkruma products …` — list, get, create, update, archive.
|
|
3
|
+
*
|
|
4
|
+
* Includes a `variants` subgroup (list/get/create/update/archive). The
|
|
5
|
+
* SDK exposes addVariant/updateVariant/archiveVariant directly, but does
|
|
6
|
+
* not have variant list/get endpoints — variants are returned as part of
|
|
7
|
+
* the parent product, so list+get derive from `products.get(id).variants`.
|
|
8
|
+
*
|
|
9
|
+
* All calls go through `FulkrumaClient.products` from `@forjio/fulkruma-node`.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { getClient } from '../lib/client.js';
|
|
13
|
+
import { formatOpts, getGlobalOpts, handleError, parseBody, parseIntArg } from '../lib/util.js';
|
|
14
|
+
import { printResult } from '../lib/output.js';
|
|
15
|
+
const productColumns = [
|
|
16
|
+
{ header: 'ID', accessor: (p) => p.id },
|
|
17
|
+
{ header: 'Name', accessor: (p) => p.name },
|
|
18
|
+
{ header: 'SKU', accessor: (p) => p.sku },
|
|
19
|
+
{ header: 'Type', accessor: (p) => p.type },
|
|
20
|
+
{ header: 'Archived', accessor: (p) => p.archived },
|
|
21
|
+
{ header: 'Variants', accessor: (p) => p.variants?.length ?? 0 },
|
|
22
|
+
];
|
|
23
|
+
export const productsCommand = new Command('products').description('Manage products');
|
|
24
|
+
productsCommand
|
|
25
|
+
.command('list')
|
|
26
|
+
.description('List products')
|
|
27
|
+
.option('--archived', 'include archived products')
|
|
28
|
+
.action(async (options, cmd) => {
|
|
29
|
+
const g = getGlobalOpts(cmd);
|
|
30
|
+
try {
|
|
31
|
+
const client = getClient(g);
|
|
32
|
+
const { products } = await client.products.list(options.archived ? { archived: true } : undefined);
|
|
33
|
+
printResult(products, productColumns, formatOpts(g));
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
handleError(err, g);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
productsCommand
|
|
41
|
+
.command('get <id>')
|
|
42
|
+
.description('Get a single product')
|
|
43
|
+
.action(async (id, _options, cmd) => {
|
|
44
|
+
const g = getGlobalOpts(cmd);
|
|
45
|
+
try {
|
|
46
|
+
const client = getClient(g);
|
|
47
|
+
const { product } = await client.products.get(id);
|
|
48
|
+
printResult(product, productColumns, formatOpts(g));
|
|
49
|
+
process.exit(0);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
handleError(err, g);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
productsCommand
|
|
56
|
+
.command('create')
|
|
57
|
+
.description('Create a product')
|
|
58
|
+
.requiredOption('--name <name>', 'product name')
|
|
59
|
+
.option('--sku <sku>', 'SKU')
|
|
60
|
+
.option('--description <text>', 'description')
|
|
61
|
+
.option('--type <type>', 'product type: physical|digital|license', 'physical')
|
|
62
|
+
.option('--weight <grams>', 'weight in grams', parseIntArg)
|
|
63
|
+
.option('--license-enabled', 'enable license issuance')
|
|
64
|
+
.option('--max-activations <n>', 'max activations per license', parseIntArg)
|
|
65
|
+
.action(async (options, cmd) => {
|
|
66
|
+
const g = getGlobalOpts(cmd);
|
|
67
|
+
try {
|
|
68
|
+
const client = getClient(g);
|
|
69
|
+
const { product } = await client.products.create({
|
|
70
|
+
name: options['name'],
|
|
71
|
+
sku: options['sku'],
|
|
72
|
+
description: options['description'],
|
|
73
|
+
type: options['type'],
|
|
74
|
+
weight: options['weight'],
|
|
75
|
+
licenseEnabled: options['licenseEnabled'],
|
|
76
|
+
maxActivations: options['maxActivations'],
|
|
77
|
+
});
|
|
78
|
+
printResult(product, productColumns, formatOpts(g));
|
|
79
|
+
process.exit(0);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
handleError(err, g);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
productsCommand
|
|
86
|
+
.command('update <id>')
|
|
87
|
+
.description('Update a product')
|
|
88
|
+
.option('--name <name>', 'product name')
|
|
89
|
+
.option('--sku <sku>', 'SKU')
|
|
90
|
+
.option('--description <text>', 'description')
|
|
91
|
+
.option('--type <type>', 'product type: physical|digital|license')
|
|
92
|
+
.option('--weight <grams>', 'weight in grams', parseIntArg)
|
|
93
|
+
.option('--license-enabled <bool>', 'enable license issuance (true|false)')
|
|
94
|
+
.option('--max-activations <n>', 'max activations per license', parseIntArg)
|
|
95
|
+
.action(async (id, options, cmd) => {
|
|
96
|
+
const g = getGlobalOpts(cmd);
|
|
97
|
+
try {
|
|
98
|
+
const client = getClient(g);
|
|
99
|
+
const patch = {};
|
|
100
|
+
if (options['name'] !== undefined)
|
|
101
|
+
patch['name'] = options['name'];
|
|
102
|
+
if (options['sku'] !== undefined)
|
|
103
|
+
patch['sku'] = options['sku'];
|
|
104
|
+
if (options['description'] !== undefined)
|
|
105
|
+
patch['description'] = options['description'];
|
|
106
|
+
if (options['type'] !== undefined)
|
|
107
|
+
patch['type'] = options['type'];
|
|
108
|
+
if (options['weight'] !== undefined)
|
|
109
|
+
patch['weight'] = options['weight'];
|
|
110
|
+
if (options['licenseEnabled'] !== undefined) {
|
|
111
|
+
patch['licenseEnabled'] = options['licenseEnabled'] === 'true' || options['licenseEnabled'] === true;
|
|
112
|
+
}
|
|
113
|
+
if (options['maxActivations'] !== undefined)
|
|
114
|
+
patch['maxActivations'] = options['maxActivations'];
|
|
115
|
+
const { product } = await client.products.update(id, patch);
|
|
116
|
+
printResult(product, productColumns, formatOpts(g));
|
|
117
|
+
process.exit(0);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
handleError(err, g);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
productsCommand
|
|
124
|
+
.command('archive <id>')
|
|
125
|
+
.description('Archive a product')
|
|
126
|
+
.action(async (id, _options, cmd) => {
|
|
127
|
+
const g = getGlobalOpts(cmd);
|
|
128
|
+
try {
|
|
129
|
+
const client = getClient(g);
|
|
130
|
+
const result = await client.products.archive(id);
|
|
131
|
+
printResult({ id, archived: result.archived }, [
|
|
132
|
+
{ header: 'ID', accessor: (r) => r.id },
|
|
133
|
+
{ header: 'Archived', accessor: (r) => r.archived },
|
|
134
|
+
], formatOpts(g));
|
|
135
|
+
process.exit(0);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
handleError(err, g);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// ─── Variants ────────────────────────────────────────────────
|
|
142
|
+
const variantColumns = [
|
|
143
|
+
{ header: 'ID', accessor: (v) => v.id },
|
|
144
|
+
{ header: 'Name', accessor: (v) => v.name },
|
|
145
|
+
{ header: 'SKU', accessor: (v) => v.sku },
|
|
146
|
+
{ header: 'Price', accessor: (v) => v.priceCents },
|
|
147
|
+
{ header: 'Default', accessor: (v) => v.isDefault },
|
|
148
|
+
{ header: 'Archived', accessor: (v) => v.archived },
|
|
149
|
+
];
|
|
150
|
+
const variantsCommand = new Command('variants').description('Manage product variants');
|
|
151
|
+
variantsCommand
|
|
152
|
+
.command('list <product-id>')
|
|
153
|
+
.description('List variants on a product (derived from products.get)')
|
|
154
|
+
.action(async (productId, _options, cmd) => {
|
|
155
|
+
const g = getGlobalOpts(cmd);
|
|
156
|
+
try {
|
|
157
|
+
const client = getClient(g);
|
|
158
|
+
const { product } = await client.products.get(productId);
|
|
159
|
+
const variants = product.variants ?? [];
|
|
160
|
+
printResult(variants, variantColumns, formatOpts(g));
|
|
161
|
+
process.exit(0);
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
handleError(err, g);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
variantsCommand
|
|
168
|
+
.command('get <product-id> <variant-id>')
|
|
169
|
+
.description('Get a single variant (filters products.get response)')
|
|
170
|
+
.action(async (productId, variantId, _options, cmd) => {
|
|
171
|
+
const g = getGlobalOpts(cmd);
|
|
172
|
+
try {
|
|
173
|
+
const client = getClient(g);
|
|
174
|
+
const { product } = await client.products.get(productId);
|
|
175
|
+
const variant = (product.variants ?? []).find((v) => v.id === variantId);
|
|
176
|
+
if (!variant) {
|
|
177
|
+
throw new Error(`variant ${variantId} not found on product ${productId}`);
|
|
178
|
+
}
|
|
179
|
+
printResult(variant, variantColumns, formatOpts(g));
|
|
180
|
+
process.exit(0);
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
handleError(err, g);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
variantsCommand
|
|
187
|
+
.command('create <product-id>')
|
|
188
|
+
.description('Create a variant on a product (use --body for JSON payload)')
|
|
189
|
+
.requiredOption('--body <json>', 'variant payload (inline JSON, @file, or "-")')
|
|
190
|
+
.action(async (productId, options, cmd) => {
|
|
191
|
+
const g = getGlobalOpts(cmd);
|
|
192
|
+
try {
|
|
193
|
+
const client = getClient(g);
|
|
194
|
+
const body = parseBody(options.body);
|
|
195
|
+
if (!body)
|
|
196
|
+
throw new Error('--body is required');
|
|
197
|
+
const { variant } = await client.products.addVariant(productId, body);
|
|
198
|
+
printResult(variant, variantColumns, formatOpts(g));
|
|
199
|
+
process.exit(0);
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
handleError(err, g);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
variantsCommand
|
|
206
|
+
.command('update <product-id> <variant-id>')
|
|
207
|
+
.description('Update a variant (use --body for JSON patch)')
|
|
208
|
+
.requiredOption('--body <json>', 'variant patch (inline JSON, @file, or "-")')
|
|
209
|
+
.action(async (productId, variantId, options, cmd) => {
|
|
210
|
+
const g = getGlobalOpts(cmd);
|
|
211
|
+
try {
|
|
212
|
+
const client = getClient(g);
|
|
213
|
+
const body = parseBody(options.body);
|
|
214
|
+
if (!body)
|
|
215
|
+
throw new Error('--body is required');
|
|
216
|
+
const { variant } = await client.products.updateVariant(productId, variantId, body);
|
|
217
|
+
printResult(variant, variantColumns, formatOpts(g));
|
|
218
|
+
process.exit(0);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
handleError(err, g);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
variantsCommand
|
|
225
|
+
.command('archive <product-id> <variant-id>')
|
|
226
|
+
.description('Archive a variant')
|
|
227
|
+
.action(async (productId, variantId, _options, cmd) => {
|
|
228
|
+
const g = getGlobalOpts(cmd);
|
|
229
|
+
try {
|
|
230
|
+
const client = getClient(g);
|
|
231
|
+
const result = await client.products.archiveVariant(productId, variantId);
|
|
232
|
+
printResult({ productId, variantId, archived: result.archived }, [
|
|
233
|
+
{ header: 'Product', accessor: (r) => r.productId },
|
|
234
|
+
{ header: 'Variant', accessor: (r) => r.variantId },
|
|
235
|
+
{ header: 'Archived', accessor: (r) => r.archived },
|
|
236
|
+
], formatOpts(g));
|
|
237
|
+
process.exit(0);
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
handleError(err, g);
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
productsCommand.addCommand(variantsCommand);
|
|
244
|
+
//# sourceMappingURL=products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/commands/products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `fulkruma shipments …` — list, get, create. Creates accept a JSON body
|
|
3
|
+
* via --body for non-trivial origin/destination/items payloads.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { getClient } from '../lib/client.js';
|
|
7
|
+
import { formatOpts, getGlobalOpts, handleError, parseBody, parseIntArg } from '../lib/util.js';
|
|
8
|
+
import { printResult } from '../lib/output.js';
|
|
9
|
+
const shipmentColumns = [
|
|
10
|
+
{ header: 'ID', accessor: (s) => s.id },
|
|
11
|
+
{ header: 'Status', accessor: (s) => s.status },
|
|
12
|
+
{ header: 'Courier', accessor: (s) => `${s.courierCode}/${s.courierServiceCode}` },
|
|
13
|
+
{ header: 'Tracking', accessor: (s) => s.biteshipTrackingId },
|
|
14
|
+
{ header: 'Customer', accessor: (s) => s.customerEmail ?? s.customerId },
|
|
15
|
+
{ header: 'Price', accessor: (s) => s.price },
|
|
16
|
+
];
|
|
17
|
+
export const shipmentsCommand = new Command('shipments').description('Manage shipments');
|
|
18
|
+
shipmentsCommand
|
|
19
|
+
.command('list')
|
|
20
|
+
.description('List shipments')
|
|
21
|
+
.option('--status <status>', 'filter by status (pending|confirmed|in_transit|delivered|…)')
|
|
22
|
+
.action(async (options, cmd) => {
|
|
23
|
+
const g = getGlobalOpts(cmd);
|
|
24
|
+
try {
|
|
25
|
+
const client = getClient(g);
|
|
26
|
+
const { shipments } = await client.shipments.list(options.status ? { status: options.status } : undefined);
|
|
27
|
+
printResult(shipments, shipmentColumns, formatOpts(g));
|
|
28
|
+
process.exit(0);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
handleError(err, g);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
shipmentsCommand
|
|
35
|
+
.command('get <id>')
|
|
36
|
+
.description('Get a single shipment')
|
|
37
|
+
.action(async (id, _options, cmd) => {
|
|
38
|
+
const g = getGlobalOpts(cmd);
|
|
39
|
+
try {
|
|
40
|
+
const client = getClient(g);
|
|
41
|
+
const { shipment } = await client.shipments.get(id);
|
|
42
|
+
printResult(shipment, shipmentColumns, formatOpts(g));
|
|
43
|
+
process.exit(0);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
handleError(err, g);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
shipmentsCommand
|
|
50
|
+
.command('create')
|
|
51
|
+
.description('Create a shipment. Accepts a JSON body via --body for the full payload, ' +
|
|
52
|
+
'or use --courier-code / --courier-service-code / --courier-type / --price ' +
|
|
53
|
+
'with --origin/--destination/--items as JSON strings.')
|
|
54
|
+
.option('--body <json>', 'full JSON body (or @file or "-" for stdin)')
|
|
55
|
+
.option('--courier-code <code>', 'courier code (e.g. jne)')
|
|
56
|
+
.option('--courier-service-code <code>', 'courier service code')
|
|
57
|
+
.option('--courier-type <type>', 'courier type (e.g. standard)')
|
|
58
|
+
.option('--price <cents>', 'shipping price', parseIntArg)
|
|
59
|
+
.option('--insurance <cents>', 'insurance price', parseIntArg)
|
|
60
|
+
.option('--insured', 'mark as insured')
|
|
61
|
+
.option('--product-id <id>', 'product id')
|
|
62
|
+
.option('--customer-id <id>', 'customer id')
|
|
63
|
+
.option('--customer-email <email>', 'customer email')
|
|
64
|
+
.option('--checkout-session-id <id>', 'checkout session id')
|
|
65
|
+
.option('--origin <json>', 'origin object as JSON string')
|
|
66
|
+
.option('--destination <json>', 'destination object as JSON string')
|
|
67
|
+
.option('--items <json>', 'items array as JSON string')
|
|
68
|
+
.action(async (options, cmd) => {
|
|
69
|
+
const g = getGlobalOpts(cmd);
|
|
70
|
+
try {
|
|
71
|
+
const client = getClient(g);
|
|
72
|
+
const body = parseBody(options['body']);
|
|
73
|
+
let payload;
|
|
74
|
+
if (body) {
|
|
75
|
+
payload = body;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
const required = ['courierCode', 'courierServiceCode', 'courierType', 'price', 'origin', 'destination', 'items'];
|
|
79
|
+
for (const k of required) {
|
|
80
|
+
if (options[k] === undefined) {
|
|
81
|
+
throw new Error(`missing --${k.replace(/[A-Z]/g, (m) => '-' + m.toLowerCase())} (or pass --body <json>).`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
payload = {
|
|
85
|
+
courierCode: options['courierCode'],
|
|
86
|
+
courierServiceCode: options['courierServiceCode'],
|
|
87
|
+
courierType: options['courierType'],
|
|
88
|
+
price: options['price'],
|
|
89
|
+
insurance: options['insurance'],
|
|
90
|
+
insured: options['insured'],
|
|
91
|
+
productId: options['productId'],
|
|
92
|
+
customerId: options['customerId'],
|
|
93
|
+
customerEmail: options['customerEmail'],
|
|
94
|
+
checkoutSessionId: options['checkoutSessionId'],
|
|
95
|
+
origin: JSON.parse(options['origin']),
|
|
96
|
+
destination: JSON.parse(options['destination']),
|
|
97
|
+
items: JSON.parse(options['items']),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const { shipment } = await client.shipments.create(payload);
|
|
101
|
+
printResult(shipment, shipmentColumns, formatOpts(g));
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
handleError(err, g);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
//# sourceMappingURL=shipments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shipments.js","sourceRoot":"","sources":["../../src/commands/shipments.ts"],"names":[],"mappings":"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"}
|