public-com-cli 0.1.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.
Files changed (102) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +273 -0
  3. package/dist/api/accounts.d.ts +12 -0
  4. package/dist/api/accounts.js +5 -0
  5. package/dist/api/accounts.js.map +1 -0
  6. package/dist/api/history.d.ts +31 -0
  7. package/dist/api/history.js +29 -0
  8. package/dist/api/history.js.map +1 -0
  9. package/dist/api/index.d.ts +9 -0
  10. package/dist/api/index.js +9 -0
  11. package/dist/api/index.js.map +1 -0
  12. package/dist/api/instruments.d.ts +22 -0
  13. package/dist/api/instruments.js +46 -0
  14. package/dist/api/instruments.js.map +1 -0
  15. package/dist/api/market-data.d.ts +48 -0
  16. package/dist/api/market-data.js +20 -0
  17. package/dist/api/market-data.js.map +1 -0
  18. package/dist/api/option-details.d.ts +17 -0
  19. package/dist/api/option-details.js +9 -0
  20. package/dist/api/option-details.js.map +1 -0
  21. package/dist/api/orders.d.ts +125 -0
  22. package/dist/api/orders.js +43 -0
  23. package/dist/api/orders.js.map +1 -0
  24. package/dist/api/portfolio.d.ts +81 -0
  25. package/dist/api/portfolio.js +19 -0
  26. package/dist/api/portfolio.js.map +1 -0
  27. package/dist/api/types.d.ts +12 -0
  28. package/dist/api/types.js +2 -0
  29. package/dist/api/types.js.map +1 -0
  30. package/dist/authentication/keychain.d.ts +5 -0
  31. package/dist/authentication/keychain.js +17 -0
  32. package/dist/authentication/keychain.js.map +1 -0
  33. package/dist/authentication/token.d.ts +9 -0
  34. package/dist/authentication/token.js +35 -0
  35. package/dist/authentication/token.js.map +1 -0
  36. package/dist/commands/accounts.d.ts +3 -0
  37. package/dist/commands/accounts.js +42 -0
  38. package/dist/commands/accounts.js.map +1 -0
  39. package/dist/commands/authenticate.d.ts +3 -0
  40. package/dist/commands/authenticate.js +103 -0
  41. package/dist/commands/authenticate.js.map +1 -0
  42. package/dist/commands/completion.d.ts +3 -0
  43. package/dist/commands/completion.js +234 -0
  44. package/dist/commands/completion.js.map +1 -0
  45. package/dist/commands/config.d.ts +3 -0
  46. package/dist/commands/config.js +67 -0
  47. package/dist/commands/config.js.map +1 -0
  48. package/dist/commands/history.d.ts +3 -0
  49. package/dist/commands/history.js +91 -0
  50. package/dist/commands/history.js.map +1 -0
  51. package/dist/commands/instrument.d.ts +3 -0
  52. package/dist/commands/instrument.js +85 -0
  53. package/dist/commands/instrument.js.map +1 -0
  54. package/dist/commands/instruments.d.ts +3 -0
  55. package/dist/commands/instruments.js +118 -0
  56. package/dist/commands/instruments.js.map +1 -0
  57. package/dist/commands/option-greeks.d.ts +3 -0
  58. package/dist/commands/option-greeks.js +66 -0
  59. package/dist/commands/option-greeks.js.map +1 -0
  60. package/dist/commands/options-chain.d.ts +3 -0
  61. package/dist/commands/options-chain.js +110 -0
  62. package/dist/commands/options-chain.js.map +1 -0
  63. package/dist/commands/options-expirations.d.ts +3 -0
  64. package/dist/commands/options-expirations.js +54 -0
  65. package/dist/commands/options-expirations.js.map +1 -0
  66. package/dist/commands/order-cancel.d.ts +3 -0
  67. package/dist/commands/order-cancel.js +37 -0
  68. package/dist/commands/order-cancel.js.map +1 -0
  69. package/dist/commands/order-place.d.ts +3 -0
  70. package/dist/commands/order-place.js +104 -0
  71. package/dist/commands/order-place.js.map +1 -0
  72. package/dist/commands/order-preflight.d.ts +3 -0
  73. package/dist/commands/order-preflight.js +138 -0
  74. package/dist/commands/order-preflight.js.map +1 -0
  75. package/dist/commands/order.d.ts +3 -0
  76. package/dist/commands/order.js +108 -0
  77. package/dist/commands/order.js.map +1 -0
  78. package/dist/commands/portfolio.d.ts +3 -0
  79. package/dist/commands/portfolio.js +107 -0
  80. package/dist/commands/portfolio.js.map +1 -0
  81. package/dist/commands/quotes.d.ts +3 -0
  82. package/dist/commands/quotes.js +86 -0
  83. package/dist/commands/quotes.js.map +1 -0
  84. package/dist/helpers/api.d.ts +3 -0
  85. package/dist/helpers/api.js +5 -0
  86. package/dist/helpers/api.js.map +1 -0
  87. package/dist/helpers/config.d.ts +5 -0
  88. package/dist/helpers/config.js +40 -0
  89. package/dist/helpers/config.js.map +1 -0
  90. package/dist/helpers/fetch.d.ts +24 -0
  91. package/dist/helpers/fetch.js +202 -0
  92. package/dist/helpers/fetch.js.map +1 -0
  93. package/dist/helpers/output.d.ts +5 -0
  94. package/dist/helpers/output.js +13 -0
  95. package/dist/helpers/output.js.map +1 -0
  96. package/dist/helpers/validation.d.ts +2 -0
  97. package/dist/helpers/validation.js +14 -0
  98. package/dist/helpers/validation.js.map +1 -0
  99. package/dist/index.d.ts +3 -0
  100. package/dist/index.js +49 -0
  101. package/dist/index.js.map +1 -0
  102. package/package.json +78 -0
@@ -0,0 +1,66 @@
1
+ import { Command } from 'commander';
2
+ import { getOptionGreeks, ApiError, AuthenticationError, RateLimitError, } from '../helpers/api.js';
3
+ import { error, success } from '../helpers/output.js';
4
+ function formatGreek(value) {
5
+ if (!value)
6
+ return 'N/A';
7
+ const num = parseFloat(value);
8
+ if (isNaN(num))
9
+ return value;
10
+ return num.toFixed(4);
11
+ }
12
+ function formatPercent(value) {
13
+ if (!value)
14
+ return 'N/A';
15
+ const num = parseFloat(value);
16
+ if (isNaN(num))
17
+ return value;
18
+ return `${(num * 100).toFixed(2)}%`;
19
+ }
20
+ export function createOptionGreeksCommand() {
21
+ const greeks = new Command('option-greeks')
22
+ .description('Get option Greeks for one or more option symbols')
23
+ .argument('<accountId>', 'The account ID')
24
+ .argument('<symbols...>', 'Option symbols in OSI format (max 250)')
25
+ .action(async (accountId, symbols) => {
26
+ try {
27
+ if (symbols.length > 250) {
28
+ error('Maximum 250 symbols per request.');
29
+ process.exit(1);
30
+ }
31
+ const response = await getOptionGreeks(accountId, symbols);
32
+ if (response.greeks.length === 0) {
33
+ console.log('\nNo Greeks data returned.');
34
+ return;
35
+ }
36
+ success(`\nOption Greeks:\n`);
37
+ for (const item of response.greeks) {
38
+ console.log(` ${item.symbol}`);
39
+ console.log(` Delta: ${formatGreek(item.greeks.delta)}`);
40
+ console.log(` Gamma: ${formatGreek(item.greeks.gamma)}`);
41
+ console.log(` Theta: ${formatGreek(item.greeks.theta)}`);
42
+ console.log(` Vega: ${formatGreek(item.greeks.vega)}`);
43
+ console.log(` Rho: ${formatGreek(item.greeks.rho)}`);
44
+ console.log(` IV: ${formatPercent(item.greeks.impliedVolatility)}`);
45
+ console.log();
46
+ }
47
+ }
48
+ catch (err) {
49
+ if (err instanceof AuthenticationError) {
50
+ error(err.message);
51
+ }
52
+ else if (err instanceof RateLimitError) {
53
+ error('Too many requests. Please try again later.');
54
+ }
55
+ else if (err instanceof ApiError) {
56
+ error(`Failed to get option Greeks: ${err.message}`);
57
+ }
58
+ else {
59
+ error(`Failed to get option Greeks: ${err instanceof Error ? err.message : 'Unknown error'}`);
60
+ }
61
+ process.exit(1);
62
+ }
63
+ });
64
+ return greeks;
65
+ }
66
+ //# sourceMappingURL=option-greeks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"option-greeks.js","sourceRoot":"","sources":["../../src/commands/option-greeks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOptionsChainCommand(): Command;
3
+ //# sourceMappingURL=options-chain.d.ts.map
@@ -0,0 +1,110 @@
1
+ import { Command } from 'commander';
2
+ import { getOptionChain, ApiError, AuthenticationError, RateLimitError, } from '../helpers/api.js';
3
+ import { error, success } from '../helpers/output.js';
4
+ const VALID_UNDERLYING_TYPES = [
5
+ 'EQUITY',
6
+ 'UNDERLYING_SECURITY_FOR_INDEX_OPTION',
7
+ ];
8
+ function formatCurrency(value) {
9
+ if (!value)
10
+ return '-';
11
+ const num = parseFloat(value);
12
+ if (isNaN(num))
13
+ return value;
14
+ return new Intl.NumberFormat('en-US', {
15
+ style: 'currency',
16
+ currency: 'USD',
17
+ minimumFractionDigits: 2,
18
+ maximumFractionDigits: 2,
19
+ }).format(num);
20
+ }
21
+ function formatNumber(value) {
22
+ if (value === undefined || value === null)
23
+ return '-';
24
+ return new Intl.NumberFormat('en-US').format(value);
25
+ }
26
+ function extractStrike(symbol) {
27
+ const match = symbol.match(/(\d+)$/);
28
+ if (match) {
29
+ const strike = parseInt(match[1], 10) / 1000;
30
+ return strike.toFixed(2);
31
+ }
32
+ return symbol;
33
+ }
34
+ function printOptionRow(quote) {
35
+ const strike = extractStrike(quote.instrument.symbol);
36
+ const last = formatCurrency(quote.last).padStart(10);
37
+ const bid = formatCurrency(quote.bid).padStart(10);
38
+ const ask = formatCurrency(quote.ask).padStart(10);
39
+ const vol = formatNumber(quote.volume).padStart(10);
40
+ const oi = formatNumber(quote.openInterest).padStart(10);
41
+ console.log(` ${strike.padStart(10)} ${last} ${bid} ${ask} ${vol} ${oi}`);
42
+ }
43
+ export function createOptionsChainCommand() {
44
+ const chain = new Command('options-chain')
45
+ .description('Get option chain for an instrument and expiration date')
46
+ .argument('<accountId>', 'The account ID')
47
+ .argument('<symbol>', 'The underlying symbol (e.g., AAPL, SPX)')
48
+ .argument('<expiration>', 'Expiration date (YYYY-MM-DD)')
49
+ .option('-t, --type <type>', `Underlying type (${VALID_UNDERLYING_TYPES.join(', ')})`, 'EQUITY')
50
+ .action(async (accountId, symbol, expiration, options) => {
51
+ try {
52
+ const type = options.type.toUpperCase();
53
+ if (!VALID_UNDERLYING_TYPES.includes(type)) {
54
+ error(`Invalid underlying type: ${type}. Valid types: ${VALID_UNDERLYING_TYPES.join(', ')}`);
55
+ process.exit(1);
56
+ }
57
+ const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
58
+ if (!dateRegex.test(expiration)) {
59
+ error('Invalid date format. Use YYYY-MM-DD.');
60
+ process.exit(1);
61
+ }
62
+ const response = await getOptionChain(accountId, { symbol: symbol.toUpperCase(), type }, expiration);
63
+ success(`\nOption Chain for ${response.baseSymbol} - Expiration: ${expiration}\n`);
64
+ const header = ' Strike Last Bid Ask Volume Open Int';
65
+ if (response.calls.length > 0) {
66
+ console.log(' CALLS:');
67
+ console.log(header);
68
+ console.log(' ' + '-'.repeat(74));
69
+ for (const call of response.calls) {
70
+ if (call.outcome === 'SUCCESS') {
71
+ printOptionRow(call);
72
+ }
73
+ }
74
+ console.log();
75
+ }
76
+ if (response.puts.length > 0) {
77
+ console.log(' PUTS:');
78
+ console.log(header);
79
+ console.log(' ' + '-'.repeat(74));
80
+ for (const put of response.puts) {
81
+ if (put.outcome === 'SUCCESS') {
82
+ printOptionRow(put);
83
+ }
84
+ }
85
+ console.log();
86
+ }
87
+ if (response.calls.length === 0 && response.puts.length === 0) {
88
+ console.log(' No options available for this expiration.');
89
+ }
90
+ console.log();
91
+ }
92
+ catch (err) {
93
+ if (err instanceof AuthenticationError) {
94
+ error(err.message);
95
+ }
96
+ else if (err instanceof RateLimitError) {
97
+ error('Too many requests. Please try again later.');
98
+ }
99
+ else if (err instanceof ApiError) {
100
+ error(`Failed to fetch option chain: ${err.message}`);
101
+ }
102
+ else {
103
+ error(`Failed to fetch option chain: ${err instanceof Error ? err.message : 'Unknown error'}`);
104
+ }
105
+ process.exit(1);
106
+ }
107
+ });
108
+ return chain;
109
+ }
110
+ //# sourceMappingURL=options-chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-chain.js","sourceRoot":"","sources":["../../src/commands/options-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOptionsExpirationsCommand(): Command;
3
+ //# sourceMappingURL=options-expirations.d.ts.map
@@ -0,0 +1,54 @@
1
+ import { Command } from 'commander';
2
+ import { getOptionExpirations, ApiError, AuthenticationError, RateLimitError, } from '../helpers/api.js';
3
+ import { error, success } from '../helpers/output.js';
4
+ const VALID_UNDERLYING_TYPES = [
5
+ 'EQUITY',
6
+ 'UNDERLYING_SECURITY_FOR_INDEX_OPTION',
7
+ ];
8
+ export function createOptionsExpirationsCommand() {
9
+ const expirations = new Command('options-expirations')
10
+ .description('Get available option expiration dates for an instrument')
11
+ .argument('<accountId>', 'The account ID')
12
+ .argument('<symbol>', 'The underlying symbol (e.g., AAPL, SPX)')
13
+ .option('-t, --type <type>', `Underlying type (${VALID_UNDERLYING_TYPES.join(', ')})`, 'EQUITY')
14
+ .action(async (accountId, symbol, options) => {
15
+ try {
16
+ const type = options.type.toUpperCase();
17
+ if (!VALID_UNDERLYING_TYPES.includes(type)) {
18
+ error(`Invalid underlying type: ${type}. Valid types: ${VALID_UNDERLYING_TYPES.join(', ')}`);
19
+ process.exit(1);
20
+ }
21
+ const response = await getOptionExpirations(accountId, {
22
+ symbol: symbol.toUpperCase(),
23
+ type,
24
+ });
25
+ success(`\nOption Expirations for ${response.baseSymbol}:\n`);
26
+ if (response.expirations.length === 0) {
27
+ console.log(' No expiration dates available.');
28
+ return;
29
+ }
30
+ for (const expiration of response.expirations) {
31
+ const date = new Date(expiration);
32
+ console.log(` ${expiration} (${date.toLocaleDateString('en-US', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })})`);
33
+ }
34
+ console.log(`\n Total: ${response.expirations.length} expiration dates\n`);
35
+ }
36
+ catch (err) {
37
+ if (err instanceof AuthenticationError) {
38
+ error(err.message);
39
+ }
40
+ else if (err instanceof RateLimitError) {
41
+ error('Too many requests. Please try again later.');
42
+ }
43
+ else if (err instanceof ApiError) {
44
+ error(`Failed to fetch option expirations: ${err.message}`);
45
+ }
46
+ else {
47
+ error(`Failed to fetch option expirations: ${err instanceof Error ? err.message : 'Unknown error'}`);
48
+ }
49
+ process.exit(1);
50
+ }
51
+ });
52
+ return expirations;
53
+ }
54
+ //# sourceMappingURL=options-expirations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-expirations.js","sourceRoot":"","sources":["../../src/commands/options-expirations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOrderCancelCommand(): Command;
3
+ //# sourceMappingURL=order-cancel.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { Command } from 'commander';
2
+ import { cancelOrder, ApiError, AuthenticationError, RateLimitError, NotFoundError, } from '../helpers/api.js';
3
+ import { error, success, info } from '../helpers/output.js';
4
+ export function createOrderCancelCommand() {
5
+ const cancel = new Command('order-cancel')
6
+ .description('Cancel an open order')
7
+ .argument('<accountId>', 'The account ID')
8
+ .argument('<orderId>', 'The order ID (UUID)')
9
+ .action(async (accountId, orderId) => {
10
+ try {
11
+ await cancelOrder(accountId, orderId);
12
+ success(`\nCancellation request submitted for order: ${orderId}\n`);
13
+ info('Note: Confirm cancellation by checking order status with:');
14
+ console.log(` public-cli order ${accountId} ${orderId}\n`);
15
+ }
16
+ catch (err) {
17
+ if (err instanceof NotFoundError) {
18
+ error(err.message);
19
+ }
20
+ else if (err instanceof AuthenticationError) {
21
+ error(err.message);
22
+ }
23
+ else if (err instanceof RateLimitError) {
24
+ error('Too many requests. Please try again later.');
25
+ }
26
+ else if (err instanceof ApiError) {
27
+ error(`Failed to cancel order: ${err.message}`);
28
+ }
29
+ else {
30
+ error(`Failed to cancel order: ${err instanceof Error ? err.message : 'Unknown error'}`);
31
+ }
32
+ process.exit(1);
33
+ }
34
+ });
35
+ return cancel;
36
+ }
37
+ //# sourceMappingURL=order-cancel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-cancel.js","sourceRoot":"","sources":["../../src/commands/order-cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,WAAW,EACX,QAAQ,EACR,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,UAAU,wBAAwB;IACtC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;SACvC,WAAW,CAAC,sBAAsB,CAAC;SACnC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACzC,QAAQ,CAAC,WAAW,EAAE,qBAAqB,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEtC,OAAO,CAAC,+CAA+C,OAAO,IAAI,CAAC,CAAC;YACpE,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,IAAI,OAAO,IAAI,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;gBACjC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBAC9C,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;iBAAM,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;gBACzC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBACnC,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,KAAK,CACH,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAClF,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOrderPlaceCommand(): Command;
3
+ //# sourceMappingURL=order-place.d.ts.map
@@ -0,0 +1,104 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { Command } from 'commander';
3
+ import { placeOrder, ApiError, AuthenticationError, RateLimitError, } from '../helpers/api.js';
4
+ import { error, success, warn } from '../helpers/output.js';
5
+ export function createOrderPlaceCommand() {
6
+ const place = new Command('order-place')
7
+ .description('Place a new order')
8
+ .argument('<accountId>', 'The account ID')
9
+ .argument('<symbol>', 'The trading symbol')
10
+ .requiredOption('-s, --side <side>', 'Order side (BUY, SELL)')
11
+ .requiredOption('-T, --order-type <type>', 'Order type (MARKET, LIMIT, STOP, STOP_LIMIT)')
12
+ .option('-q, --quantity <qty>', 'Order quantity')
13
+ .option('-a, --amount <amt>', 'Dollar amount (alternative to quantity)')
14
+ .option('-l, --limit <price>', 'Limit price (required for LIMIT/STOP_LIMIT)')
15
+ .option('--stop <price>', 'Stop price (required for STOP/STOP_LIMIT)')
16
+ .option('-t, --type <type>', 'Security type', 'EQUITY')
17
+ .option('--tif <tif>', 'Time in force (DAY, GTD)', 'DAY')
18
+ .option('--session <session>', 'Market session (CORE, EXTENDED)', 'CORE')
19
+ .option('--open-close <oc>', 'Open/close indicator for options (OPEN, CLOSE)')
20
+ .option('--order-id <id>', 'Custom order ID (UUID format, auto-generated if not provided)')
21
+ .action(async (accountId, symbol, options) => {
22
+ try {
23
+ const side = options.side.toUpperCase();
24
+ const orderType = options.orderType.toUpperCase();
25
+ if (!['BUY', 'SELL'].includes(side)) {
26
+ error('Invalid order side. Use BUY or SELL.');
27
+ process.exit(1);
28
+ }
29
+ if (!['MARKET', 'LIMIT', 'STOP', 'STOP_LIMIT'].includes(orderType)) {
30
+ error('Invalid order type. Use MARKET, LIMIT, STOP, or STOP_LIMIT.');
31
+ process.exit(1);
32
+ }
33
+ if ((orderType === 'LIMIT' || orderType === 'STOP_LIMIT') &&
34
+ !options.limit) {
35
+ error('Limit price is required for LIMIT and STOP_LIMIT orders.');
36
+ process.exit(1);
37
+ }
38
+ if ((orderType === 'STOP' || orderType === 'STOP_LIMIT') &&
39
+ !options.stop) {
40
+ error('Stop price is required for STOP and STOP_LIMIT orders.');
41
+ process.exit(1);
42
+ }
43
+ if (!options.quantity && !options.amount) {
44
+ error('Either --quantity or --amount is required.');
45
+ process.exit(1);
46
+ }
47
+ const orderId = options.orderId || randomUUID();
48
+ warn(`\nPlacing ${side} order for ${symbol.toUpperCase()}...`);
49
+ const response = await placeOrder(accountId, {
50
+ orderId,
51
+ instrument: {
52
+ symbol: symbol.toUpperCase(),
53
+ type: options.type.toUpperCase(),
54
+ },
55
+ orderSide: side,
56
+ orderType: orderType,
57
+ expiration: {
58
+ timeInForce: (options.tif?.toUpperCase() || 'DAY'),
59
+ },
60
+ quantity: options.quantity,
61
+ amount: options.amount,
62
+ limitPrice: options.limit,
63
+ stopPrice: options.stop,
64
+ equityMarketSession: options.session?.toUpperCase(),
65
+ openCloseIndicator: options.openClose?.toUpperCase(),
66
+ });
67
+ success(`\nOrder placed successfully!\n`);
68
+ console.log(` Order ID: ${response.orderId}`);
69
+ console.log(` Symbol: ${symbol.toUpperCase()}`);
70
+ console.log(` Side: ${side}`);
71
+ console.log(` Type: ${orderType}`);
72
+ if (options.quantity) {
73
+ console.log(` Quantity: ${options.quantity}`);
74
+ }
75
+ if (options.amount) {
76
+ console.log(` Amount: $${options.amount}`);
77
+ }
78
+ if (options.limit) {
79
+ console.log(` Limit: $${options.limit}`);
80
+ }
81
+ if (options.stop) {
82
+ console.log(` Stop: $${options.stop}`);
83
+ }
84
+ console.log(`\nUse 'public-cli order ${accountId} ${response.orderId}' to check status.\n`);
85
+ }
86
+ catch (err) {
87
+ if (err instanceof AuthenticationError) {
88
+ error(err.message);
89
+ }
90
+ else if (err instanceof RateLimitError) {
91
+ error('Too many requests. Please try again later.');
92
+ }
93
+ else if (err instanceof ApiError) {
94
+ error(`Order placement failed: ${err.message}`);
95
+ }
96
+ else {
97
+ error(`Order placement failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
98
+ }
99
+ process.exit(1);
100
+ }
101
+ });
102
+ return place;
103
+ }
104
+ //# sourceMappingURL=order-place.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-place.js","sourceRoot":"","sources":["../../src/commands/order-place.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOrderPreflightCommand(): Command;
3
+ //# sourceMappingURL=order-preflight.d.ts.map
@@ -0,0 +1,138 @@
1
+ import { Command } from 'commander';
2
+ import { preflightSingleLeg, ApiError, AuthenticationError, RateLimitError, } from '../helpers/api.js';
3
+ import { error, success } from '../helpers/output.js';
4
+ function formatCurrency(value) {
5
+ if (!value)
6
+ return 'N/A';
7
+ const num = parseFloat(value);
8
+ if (isNaN(num))
9
+ return value;
10
+ return new Intl.NumberFormat('en-US', {
11
+ style: 'currency',
12
+ currency: 'USD',
13
+ }).format(num);
14
+ }
15
+ export function createOrderPreflightCommand() {
16
+ const preflight = new Command('order-preflight')
17
+ .description('Preview estimated costs for a single-leg order')
18
+ .argument('<accountId>', 'The account ID')
19
+ .argument('<symbol>', 'The trading symbol')
20
+ .requiredOption('-s, --side <side>', 'Order side (BUY, SELL)')
21
+ .requiredOption('-T, --order-type <type>', 'Order type (MARKET, LIMIT, STOP, STOP_LIMIT)')
22
+ .option('-q, --quantity <qty>', 'Order quantity')
23
+ .option('-a, --amount <amt>', 'Dollar amount (alternative to quantity)')
24
+ .option('-l, --limit <price>', 'Limit price (required for LIMIT/STOP_LIMIT)')
25
+ .option('--stop <price>', 'Stop price (required for STOP/STOP_LIMIT)')
26
+ .option('-t, --type <type>', 'Security type', 'EQUITY')
27
+ .option('--tif <tif>', 'Time in force (DAY, GTD)', 'DAY')
28
+ .option('--session <session>', 'Market session (CORE, EXTENDED)', 'CORE')
29
+ .option('--open-close <oc>', 'Open/close indicator for options (OPEN, CLOSE)')
30
+ .action(async (accountId, symbol, options) => {
31
+ try {
32
+ const side = options.side.toUpperCase();
33
+ const orderType = options.orderType.toUpperCase();
34
+ if (!['BUY', 'SELL'].includes(side)) {
35
+ error('Invalid order side. Use BUY or SELL.');
36
+ process.exit(1);
37
+ }
38
+ if (!['MARKET', 'LIMIT', 'STOP', 'STOP_LIMIT'].includes(orderType)) {
39
+ error('Invalid order type. Use MARKET, LIMIT, STOP, or STOP_LIMIT.');
40
+ process.exit(1);
41
+ }
42
+ if ((orderType === 'LIMIT' || orderType === 'STOP_LIMIT') &&
43
+ !options.limit) {
44
+ error('Limit price is required for LIMIT and STOP_LIMIT orders.');
45
+ process.exit(1);
46
+ }
47
+ if ((orderType === 'STOP' || orderType === 'STOP_LIMIT') &&
48
+ !options.stop) {
49
+ error('Stop price is required for STOP and STOP_LIMIT orders.');
50
+ process.exit(1);
51
+ }
52
+ if (!options.quantity && !options.amount) {
53
+ error('Either --quantity or --amount is required.');
54
+ process.exit(1);
55
+ }
56
+ const response = await preflightSingleLeg(accountId, {
57
+ instrument: {
58
+ symbol: symbol.toUpperCase(),
59
+ type: options.type.toUpperCase(),
60
+ },
61
+ orderSide: side,
62
+ orderType: orderType,
63
+ expiration: {
64
+ timeInForce: (options.tif?.toUpperCase() || 'DAY'),
65
+ },
66
+ quantity: options.quantity,
67
+ amount: options.amount,
68
+ limitPrice: options.limit,
69
+ stopPrice: options.stop,
70
+ equityMarketSession: options.session?.toUpperCase(),
71
+ openCloseIndicator: options.openClose?.toUpperCase(),
72
+ });
73
+ success(`\nOrder Preflight for ${symbol.toUpperCase()}:\n`);
74
+ console.log(` Order Value: ${formatCurrency(response.orderValue)}`);
75
+ console.log(` Est. Commission: ${formatCurrency(response.estimatedCommission)}`);
76
+ if (response.regulatoryFees) {
77
+ const fees = response.regulatoryFees;
78
+ const totalFees = [
79
+ fees.secFee,
80
+ fees.tafFee,
81
+ fees.orfFee,
82
+ fees.occFee,
83
+ fees.catFee,
84
+ ]
85
+ .filter(Boolean)
86
+ .reduce((sum, fee) => sum + parseFloat(fee || '0'), 0);
87
+ if (totalFees > 0) {
88
+ console.log(` Regulatory Fees: ${formatCurrency(totalFees.toString())}`);
89
+ }
90
+ }
91
+ if (side === 'BUY') {
92
+ console.log(` Est. Cost: ${formatCurrency(response.estimatedCost)}`);
93
+ }
94
+ else {
95
+ console.log(` Est. Proceeds: ${formatCurrency(response.estimatedProceeds)}`);
96
+ }
97
+ console.log(` Buying Power Req: ${formatCurrency(response.buyingPowerRequirement)}`);
98
+ if (response.marginRequirement) {
99
+ if (response.marginRequirement.initialRequirement) {
100
+ console.log(` Initial Margin: ${formatCurrency(response.marginRequirement.initialRequirement)}`);
101
+ }
102
+ if (response.marginRequirement.maintenanceRequirement) {
103
+ console.log(` Maint. Margin: ${formatCurrency(response.marginRequirement.maintenanceRequirement)}`);
104
+ }
105
+ }
106
+ if (response.optionDetails) {
107
+ console.log('\n Option Details:');
108
+ if (response.optionDetails.strikePrice) {
109
+ console.log(` Strike: ${formatCurrency(response.optionDetails.strikePrice)}`);
110
+ }
111
+ if (response.optionDetails.expirationDate) {
112
+ console.log(` Expiration: ${response.optionDetails.expirationDate}`);
113
+ }
114
+ if (response.optionDetails.optionType) {
115
+ console.log(` Type: ${response.optionDetails.optionType}`);
116
+ }
117
+ }
118
+ console.log();
119
+ }
120
+ catch (err) {
121
+ if (err instanceof AuthenticationError) {
122
+ error(err.message);
123
+ }
124
+ else if (err instanceof RateLimitError) {
125
+ error('Too many requests. Please try again later.');
126
+ }
127
+ else if (err instanceof ApiError) {
128
+ error(`Preflight failed: ${err.message}`);
129
+ }
130
+ else {
131
+ error(`Preflight failed: ${err instanceof Error ? err.message : 'Unknown error'}`);
132
+ }
133
+ process.exit(1);
134
+ }
135
+ });
136
+ return preflight;
137
+ }
138
+ //# sourceMappingURL=order-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-preflight.js","sourceRoot":"","sources":["../../src/commands/order-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createOrderCommand(): Command;
3
+ //# sourceMappingURL=order.d.ts.map