@bolta-io/cli 0.0.16 → 0.0.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.
Files changed (53) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/bin/bolta.js +18 -30
  3. package/dist/bin/bolta.js.map +1 -1
  4. package/dist/src/client/bolta-client.d.ts +3 -0
  5. package/dist/src/client/bolta-client.d.ts.map +1 -1
  6. package/dist/src/client/bolta-client.js +24 -6
  7. package/dist/src/client/bolta-client.js.map +1 -1
  8. package/dist/src/commands/config/index.d.ts.map +1 -1
  9. package/dist/src/commands/config/index.js +73 -33
  10. package/dist/src/commands/config/index.js.map +1 -1
  11. package/dist/src/commands/invoice/amend.d.ts.map +1 -1
  12. package/dist/src/commands/invoice/amend.js +5 -18
  13. package/dist/src/commands/invoice/amend.js.map +1 -1
  14. package/dist/src/commands/invoice/issue-request.d.ts.map +1 -1
  15. package/dist/src/commands/invoice/issue-request.js +3 -8
  16. package/dist/src/commands/invoice/issue-request.js.map +1 -1
  17. package/dist/src/commands/invoice/issue.d.ts.map +1 -1
  18. package/dist/src/commands/invoice/issue.js +3 -8
  19. package/dist/src/commands/invoice/issue.js.map +1 -1
  20. package/dist/src/commands/update/nudge.d.ts +12 -0
  21. package/dist/src/commands/update/nudge.d.ts.map +1 -0
  22. package/dist/src/commands/update/nudge.js +104 -0
  23. package/dist/src/commands/update/nudge.js.map +1 -0
  24. package/dist/src/commands/update/updater.d.ts.map +1 -1
  25. package/dist/src/commands/update/updater.js +15 -28
  26. package/dist/src/commands/update/updater.js.map +1 -1
  27. package/dist/src/config/config-manager.d.ts +13 -0
  28. package/dist/src/config/config-manager.d.ts.map +1 -1
  29. package/dist/src/config/config-manager.js +57 -21
  30. package/dist/src/config/config-manager.js.map +1 -1
  31. package/dist/src/config/update-check-cache.d.ts +12 -0
  32. package/dist/src/config/update-check-cache.d.ts.map +1 -0
  33. package/dist/src/config/update-check-cache.js +45 -0
  34. package/dist/src/config/update-check-cache.js.map +1 -0
  35. package/dist/src/types/api.d.ts +2 -2
  36. package/dist/src/types/api.d.ts.map +1 -1
  37. package/dist/src/utils/client.d.ts +17 -0
  38. package/dist/src/utils/client.d.ts.map +1 -0
  39. package/dist/src/utils/client.js +17 -0
  40. package/dist/src/utils/client.js.map +1 -0
  41. package/dist/src/utils/output.d.ts +10 -2
  42. package/dist/src/utils/output.d.ts.map +1 -1
  43. package/dist/src/utils/output.js +17 -3
  44. package/dist/src/utils/output.js.map +1 -1
  45. package/dist/src/utils/platform.d.ts +1 -0
  46. package/dist/src/utils/platform.d.ts.map +1 -1
  47. package/dist/src/utils/platform.js +36 -9
  48. package/dist/src/utils/platform.js.map +1 -1
  49. package/dist/src/utils/version.d.ts +3 -0
  50. package/dist/src/utils/version.d.ts.map +1 -1
  51. package/dist/src/utils/version.js +24 -0
  52. package/dist/src/utils/version.js.map +1 -1
  53. package/package.json +1 -1
@@ -1,18 +1,12 @@
1
- import { resolveApiKey, resolveSupplierKey, resolveBaseUrl } from '../../config/config-manager.js';
2
- import { BoltaClient } from '../../client/bolta-client.js';
1
+ import { createClient } from '../../utils/client.js';
3
2
  import { resolveInput } from '../../utils/input.js';
4
3
  import { outputSuccess, outputError, verbose } from '../../utils/output.js';
5
4
  import { createTaxInvoiceIssueRequestSchema } from '../../validators/schemas.js';
6
- import { BoltaValidationError, BoltaAuthError } from '../../utils/errors.js';
5
+ import { BoltaValidationError } from '../../utils/errors.js';
7
6
  import { ZodError } from 'zod';
8
7
  export async function issueRequestAction(options, command) {
9
8
  try {
10
9
  const globalOpts = command.optsWithGlobals();
11
- const apiKey = resolveApiKey(globalOpts.apiKey);
12
- if (!apiKey)
13
- throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
14
- const supplierKey = resolveSupplierKey(globalOpts.supplierKey, globalOpts.customerKey);
15
- const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl(), supplierKey });
16
10
  const raw = await resolveInput(options);
17
11
  let validated;
18
12
  try {
@@ -30,6 +24,7 @@ export async function issueRequestAction(options, command) {
30
24
  return;
31
25
  }
32
26
  verbose('세금계산서 역발행 요청');
27
+ const { client, supplierKey } = createClient(globalOpts);
33
28
  const result = await client.issueRequestTaxInvoice(validated, {
34
29
  supplierKey,
35
30
  referenceId: options.referenceId,
@@ -1 +1 @@
1
- {"version":3,"file":"issue-request.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,kCAAkC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE;YAC5D,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"issue-request.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,kCAAkC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,SAAS,EAAE;YAC5D,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAmCf"}
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,wBAAsB,WAAW,CAC/B,OAAO,EAAE,gBAAgB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EACpD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -1,18 +1,12 @@
1
- import { resolveApiKey, resolveSupplierKey, resolveBaseUrl } from '../../config/config-manager.js';
2
- import { BoltaClient } from '../../client/bolta-client.js';
1
+ import { createClient } from '../../utils/client.js';
3
2
  import { resolveInput } from '../../utils/input.js';
4
3
  import { outputSuccess, outputError, verbose } from '../../utils/output.js';
5
4
  import { createTaxInvoiceSchema } from '../../validators/schemas.js';
6
- import { BoltaValidationError, BoltaAuthError } from '../../utils/errors.js';
5
+ import { BoltaValidationError } from '../../utils/errors.js';
7
6
  import { ZodError } from 'zod';
8
7
  export async function issueAction(options, command) {
9
8
  try {
10
9
  const globalOpts = command.optsWithGlobals();
11
- const apiKey = resolveApiKey(globalOpts.apiKey);
12
- if (!apiKey)
13
- throw new BoltaAuthError('API 키가 설정되지 않았습니다.');
14
- const supplierKey = resolveSupplierKey(globalOpts.supplierKey, globalOpts.customerKey);
15
- const client = new BoltaClient({ apiKey, baseUrl: resolveBaseUrl(), supplierKey });
16
10
  const raw = await resolveInput(options);
17
11
  let validated;
18
12
  try {
@@ -30,6 +24,7 @@ export async function issueAction(options, command) {
30
24
  return;
31
25
  }
32
26
  verbose('세금계산서 정발행 요청');
27
+ const { client, supplierKey } = createClient(globalOpts);
33
28
  const result = await client.issueTaxInvoice(validated, {
34
29
  supplierKey,
35
30
  referenceId: options.referenceId,
@@ -1 +1 @@
1
- {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,WAAW,GAAG,kBAAkB,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACnF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;YACrD,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../src/commands/invoice/issue.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAG/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAoD,EACpD,OAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,sBAAsB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzF,MAAM,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,aAAa,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC,CAAC;YAChG,OAAO;QACT,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,CAAC;QACxB,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE;YACrD,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QACH,aAAa,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { BoltaConfig } from '../../types/api.js';
2
+ import { type InstallMethod } from '../../utils/platform.js';
3
+ /** 백그라운드 캐시 갱신용 숨김 커맨드 이름 */
4
+ export declare const UPDATE_CACHE_COMMAND = "__update-cache";
5
+ export declare function isUpdateCheckDisabled(config: BoltaConfig): boolean;
6
+ export declare function maybeNudgeUpdate(config: BoltaConfig): void;
7
+ export declare function resolveSelfInvocation(installMethod: InstallMethod, execPath?: string, scriptPath?: string): {
8
+ command: string;
9
+ args: string[];
10
+ } | undefined;
11
+ export declare function refreshUpdateCache(): Promise<void>;
12
+ //# sourceMappingURL=nudge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nudge.d.ts","sourceRoot":"","sources":["../../../../src/commands/update/nudge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAMtD,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAC;AAKjC,6BAA6B;AAC7B,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAIrD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAElE;AAaD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAiB1D;AAMD,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,aAAa,EAC5B,QAAQ,GAAE,MAAyB,EACnC,UAAU,GAAE,MAA8B,GACzC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAajD;AAkCD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAexD"}
@@ -0,0 +1,104 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { realpathSync } from 'node:fs';
3
+ import { loadUpdateCheckCache, saveUpdateCheckCache, } from '../../config/update-check-cache.js';
4
+ import { detectInstallMethod, getUpdateCommand, } from '../../utils/platform.js';
5
+ import { getCurrentVersion, fetchNudgeVersion, isUpdateAvailable } from '../../utils/version.js';
6
+ const ONE_DAY_MS = 24 * 60 * 60 * 1000;
7
+ /** 백그라운드 캐시 갱신용 숨김 커맨드 이름 */
8
+ export const UPDATE_CACHE_COMMAND = '__update-cache';
9
+ // 넛지 비활성화 여부: env, config, CI 셋 중 하나라도 켜지면 비활성화.
10
+ // config 읽기 비용을 피하도록 env 체크를 먼저 수행한다.
11
+ export function isUpdateCheckDisabled(config) {
12
+ return Boolean(process.env.BOLTA_NO_UPDATE_CHECK || process.env.CI || config.updateCheck === false);
13
+ }
14
+ // 설치 방식이 바뀌었으면(재설치) 캐시된 버전은 다른 소스 기준이므로 신뢰하지 않음
15
+ function trustedVersion(cache, installMethod) {
16
+ return cache?.installMethod === installMethod ? cache.latestVersion : undefined;
17
+ }
18
+ // preAction에서 호출. 캐시 파일만 읽어 넛지를 출력하고(네트워크 없음),
19
+ // 캐시가 오래됐으면 detached 자식으로 갱신을 위임해 프로세스 종료를 지연시키지 않는다.
20
+ // 새 버전 배너는 캐시가 갱신된 다음 실행부터 표시된다 (codex CLI와 동일한 모델).
21
+ export function maybeNudgeUpdate(config) {
22
+ if (isUpdateCheckDisabled(config))
23
+ return;
24
+ const cache = loadUpdateCheckCache();
25
+ const installMethod = detectInstallMethod();
26
+ const now = Date.now();
27
+ const latestVersion = trustedVersion(cache, installMethod);
28
+ if (latestVersion && isUpdateAvailable(getCurrentVersion(), latestVersion)) {
29
+ printUpdateNotice(latestVersion, installMethod);
30
+ }
31
+ if (!cache || cache.installMethod !== installMethod || now - cache.lastCheckedAt >= ONE_DAY_MS) {
32
+ // spawn 전에 시도 시각을 기록: 자식이 죽거나 오프라인이어도 24시간 내 재시도 없음
33
+ const saved = saveUpdateCheckCache({ latestVersion, lastCheckedAt: now, installMethod });
34
+ if (saved)
35
+ spawnBackgroundRefresh(installMethod);
36
+ }
37
+ }
38
+ // 자기 자신을 detached로 재실행할 커맨드. 이미 감지된 설치 방식으로 분기:
39
+ // - sea/homebrew: execPath 자체가 bolta 바이너리
40
+ // - npm: node + 전역 bin의 JS 스크립트 (tsx 개발 모드는 .ts라서 제외됨)
41
+ // - unknown: 백그라운드 갱신 생략
42
+ export function resolveSelfInvocation(installMethod, execPath = process.execPath, scriptPath = process.argv[1] || '') {
43
+ if (installMethod === 'sea' || installMethod === 'homebrew') {
44
+ return { command: execPath, args: [] };
45
+ }
46
+ if (installMethod === 'npm') {
47
+ const runnableScriptPath = resolveRunnableNpmScriptPath(scriptPath);
48
+ if (runnableScriptPath) {
49
+ return { command: execPath, args: [runnableScriptPath] };
50
+ }
51
+ }
52
+ return undefined;
53
+ }
54
+ function resolveRunnableNpmScriptPath(scriptPath) {
55
+ if (isJavaScriptPath(scriptPath))
56
+ return scriptPath;
57
+ try {
58
+ const realPath = realpathSync(scriptPath);
59
+ return isJavaScriptPath(realPath) ? realPath : undefined;
60
+ }
61
+ catch {
62
+ return undefined;
63
+ }
64
+ }
65
+ function isJavaScriptPath(scriptPath) {
66
+ return /\.(c|m)?js$/i.test(scriptPath);
67
+ }
68
+ function spawnBackgroundRefresh(installMethod) {
69
+ const self = resolveSelfInvocation(installMethod);
70
+ if (!self)
71
+ return;
72
+ try {
73
+ spawn(self.command, [...self.args, UPDATE_CACHE_COMMAND], {
74
+ detached: true,
75
+ stdio: 'ignore',
76
+ windowsHide: true,
77
+ }).unref();
78
+ }
79
+ catch {
80
+ // spawn 실패는 무시 (다음 24시간 주기에 재시도)
81
+ }
82
+ }
83
+ // 숨김 커맨드(__update-cache)의 액션. 성공/실패 모두 lastCheckedAt을 갱신하고,
84
+ // 실패 시에는 기존에 알던 버전을 보존한다.
85
+ export async function refreshUpdateCache() {
86
+ const installMethod = detectInstallMethod();
87
+ const cache = {
88
+ lastCheckedAt: Date.now(),
89
+ latestVersion: trustedVersion(loadUpdateCheckCache(), installMethod),
90
+ installMethod,
91
+ };
92
+ try {
93
+ cache.latestVersion = await fetchNudgeVersion(installMethod);
94
+ }
95
+ catch {
96
+ // 네트워크 실패: 시도 시각만 기록
97
+ }
98
+ saveUpdateCheckCache(cache);
99
+ }
100
+ function printUpdateNotice(version, installMethod) {
101
+ const updateCommand = getUpdateCommand(installMethod);
102
+ console.error(`\n[bolta] 새 버전 v${version}이 있습니다. '${updateCommand}'로 업데이트하세요.\n`);
103
+ }
104
+ //# sourceMappingURL=nudge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nudge.js","sourceRoot":"","sources":["../../../../src/commands/update/nudge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../../../src/commands/update/updater.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CA+BxD;AAED,wBAAsB,aAAa,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CA2FjF"}
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../../../../src/commands/update/updater.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAmBxD;AAED,wBAAsB,aAAa,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAyFjF"}
@@ -6,49 +6,36 @@ import { execSync } from 'node:child_process';
6
6
  import { pipeline } from 'node:stream/promises';
7
7
  import { createWriteStream } from 'node:fs';
8
8
  import { Readable } from 'node:stream';
9
- import { detectInstallMethod, detectPlatform } from '../../utils/platform.js';
10
- import { fetchLatestVersion, getCurrentVersion, isUpdateAvailable, } from '../../utils/version.js';
9
+ import { detectInstallMethod, detectPlatform, getUpdateCommand } from '../../utils/platform.js';
10
+ import { fetchLatestVersion, fetchNudgeVersion, getCurrentVersion, isUpdateAvailable, } from '../../utils/version.js';
11
+ import { saveUpdateCheckCache } from '../../config/update-check-cache.js';
11
12
  import { BoltaUpdateError } from '../../utils/errors.js';
12
13
  import { verbose } from '../../utils/output.js';
13
14
  export async function checkUpdate() {
14
15
  const currentVersion = getCurrentVersion();
15
16
  const installMethod = detectInstallMethod();
16
- const latest = await fetchLatestVersion();
17
- const updateAvailable = isUpdateAvailable(currentVersion, latest.version);
18
- let updateCommand;
19
- switch (installMethod) {
20
- case 'homebrew':
21
- updateCommand = 'brew upgrade bolta';
22
- break;
23
- case 'npm':
24
- updateCommand = 'npm update -g @bolta-io/cli';
25
- break;
26
- case 'sea':
27
- updateCommand = 'bolta update';
28
- break;
29
- default:
30
- updateCommand = 'npm update -g @bolta-io/cli 또는 brew upgrade bolta';
31
- break;
32
- }
17
+ // 넛지와 같은 소스 사용: homebrew는 formula 버전 기준 (조기 안내 방지)
18
+ const latestVersion = await fetchNudgeVersion(installMethod);
19
+ // 명시적 확인 결과를 넛지 캐시에도 반영해 두 경로가 같은 버전을 말하게 함
20
+ saveUpdateCheckCache({ lastCheckedAt: Date.now(), latestVersion, installMethod });
21
+ const updateAvailable = isUpdateAvailable(currentVersion, latestVersion);
33
22
  return {
34
23
  currentVersion,
35
- latestVersion: latest.version,
24
+ latestVersion,
36
25
  updateAvailable,
37
26
  installMethod,
38
- updateCommand,
39
- changelog: latest.changelog,
27
+ updateCommand: getUpdateCommand(installMethod),
28
+ changelog: `https://github.com/bolta-io/bolta-cli/releases/tag/v${latestVersion}`,
40
29
  };
41
30
  }
42
31
  export async function performUpdate(force = false) {
43
32
  const installMethod = detectInstallMethod();
44
33
  // SEA 바이너리만 자체 업데이트 허용 (허용리스트 방식)
45
34
  if (installMethod !== 'sea') {
46
- const suggestions = {
47
- homebrew: "'brew upgrade bolta' 명령을 사용하세요.",
48
- npm: "'npm update -g @bolta-io/cli' 명령을 사용하세요.",
49
- unknown: '설치 방식을 감지할 없습니다. npm이나 Homebrew로 재설치하세요.',
50
- };
51
- throw new BoltaUpdateError(`${installMethod} 환경에서는 직접 업데이트할 수 없습니다.`, suggestions[installMethod] || suggestions.unknown);
35
+ const suggestion = installMethod === 'unknown'
36
+ ? '설치 방식을 감지할 없습니다. npm이나 Homebrew로 재설치하세요.'
37
+ : `'${getUpdateCommand(installMethod)}' 명령을 사용하세요.`;
38
+ throw new BoltaUpdateError(`${installMethod} 환경에서는 직접 업데이트할 없습니다.`, suggestion);
52
39
  }
53
40
  const currentVersion = getCurrentVersion();
54
41
  const latest = await fetchLatestVersion();
@@ -1 +1 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../../../src/commands/update/updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../../../../src/commands/update/updater.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,21 @@
1
1
  import type { BoltaConfig } from '../types/api.js';
2
+ export declare const CONFIG_DIR: string;
2
3
  export declare function loadConfig(): BoltaConfig;
3
4
  export declare function saveConfig(config: BoltaConfig): void;
5
+ export type SupplierKeySource = 'flag' | 'legacy-flag' | 'env' | 'config' | 'legacy-env' | 'legacy-config' | 'none';
6
+ export interface ResolvedSupplierKey {
7
+ value?: string;
8
+ source: SupplierKeySource;
9
+ }
4
10
  export declare function resolveApiKey(cliFlag?: string): string | undefined;
11
+ /**
12
+ * supplierKey를 우선순위대로 해석하고, 어느 소스에서 왔는지 함께 반환한다.
13
+ * 모든 값은 앞뒤 공백/개행을 제거한다(헤더 오염 방지).
14
+ */
15
+ export declare function resolveSupplierKeyWithSource(cliFlag?: string, legacyCliFlag?: string): ResolvedSupplierKey;
5
16
  export declare function resolveSupplierKey(cliFlag?: string, legacyCliFlag?: string): string | undefined;
17
+ /** 상세 소스를 사용자 노출용 라벨(flag/env/config/none)로 축약한다. */
18
+ export declare function supplierKeySourceLabel(source: SupplierKeySource): 'flag' | 'env' | 'config' | 'none';
6
19
  export declare function resolveBaseUrl(): string;
7
20
  export declare function maskApiKey(key: string): string;
8
21
  //# sourceMappingURL=config-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAMnD,wBAAgB,UAAU,IAAI,WAAW,CAOxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAuB/F;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,eAAO,MAAM,UAAU,QAA4B,CAAC;AAGpD,wBAAgB,UAAU,IAAI,WAAW,CAOxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,aAAa,GACb,KAAK,GACL,QAAQ,GACR,YAAY,GACZ,eAAe,GACf,MAAM,CAAC;AAEX,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AASD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,OAAO,CAAC,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,CAgCrB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/F;AAED,qDAAqD;AACrD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,GACxB,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAcpC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -1,8 +1,8 @@
1
1
  import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
- import { deprecationWarning } from '../utils/output.js';
5
- const CONFIG_DIR = join(homedir(), '.bolta');
4
+ import { deprecationWarning, maskSecret } from '../utils/output.js';
5
+ export const CONFIG_DIR = join(homedir(), '.bolta');
6
6
  const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
7
7
  export function loadConfig() {
8
8
  try {
@@ -17,38 +17,74 @@ export function saveConfig(config) {
17
17
  mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
18
18
  writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
19
19
  }
20
+ /** 값의 앞뒤 공백/개행을 제거하고, 빈 값이면 undefined로 정규화한다. */
21
+ function normalize(value) {
22
+ if (typeof value !== 'string')
23
+ return undefined;
24
+ const trimmed = value.trim();
25
+ return trimmed.length > 0 ? trimmed : undefined;
26
+ }
20
27
  export function resolveApiKey(cliFlag) {
21
- return cliFlag || process.env.BOLTA_API_KEY || loadConfig().apiKey;
28
+ return normalize(cliFlag) || normalize(process.env.BOLTA_API_KEY) || normalize(loadConfig().apiKey);
22
29
  }
23
- export function resolveSupplierKey(cliFlag, legacyCliFlag) {
24
- if (cliFlag)
25
- return cliFlag;
26
- if (legacyCliFlag) {
30
+ /**
31
+ * supplierKey를 우선순위대로 해석하고, 어느 소스에서 왔는지 함께 반환한다.
32
+ * 모든 값은 앞뒤 공백/개행을 제거한다(헤더 오염 방지).
33
+ */
34
+ export function resolveSupplierKeyWithSource(cliFlag, legacyCliFlag) {
35
+ const flag = normalize(cliFlag);
36
+ if (flag)
37
+ return { value: flag, source: 'flag' };
38
+ const legacyFlag = normalize(legacyCliFlag);
39
+ if (legacyFlag) {
27
40
  deprecationWarning("'--customer-key' 플래그는 '--supplier-key'로 변경되었습니다.");
28
- return legacyCliFlag;
41
+ return { value: legacyFlag, source: 'legacy-flag' };
29
42
  }
30
43
  const config = loadConfig();
31
- if (process.env.BOLTA_SUPPLIER_KEY)
32
- return process.env.BOLTA_SUPPLIER_KEY;
33
- if (config.supplierKey)
34
- return config.supplierKey;
44
+ const envKey = normalize(process.env.BOLTA_SUPPLIER_KEY);
45
+ if (envKey)
46
+ return { value: envKey, source: 'env' };
47
+ const configKey = normalize(config.supplierKey);
48
+ if (configKey)
49
+ return { value: configKey, source: 'config' };
35
50
  // 하위호환 폴백: 구 환경변수 / config 필드
36
- if (process.env.BOLTA_CUSTOMER_KEY) {
51
+ const legacyEnv = normalize(process.env.BOLTA_CUSTOMER_KEY);
52
+ if (legacyEnv) {
37
53
  deprecationWarning("'BOLTA_CUSTOMER_KEY' 환경변수는 'BOLTA_SUPPLIER_KEY'로 변경되었습니다.");
38
- return process.env.BOLTA_CUSTOMER_KEY;
54
+ return { value: legacyEnv, source: 'legacy-env' };
39
55
  }
40
- if (config.customerKey) {
56
+ const legacyConfig = normalize(config.customerKey);
57
+ if (legacyConfig) {
41
58
  deprecationWarning("config의 'customer-key'는 'supplier-key'로 변경되었습니다. 'bolta config set supplier-key <값>'으로 갱신하세요.");
42
- return config.customerKey;
59
+ return { value: legacyConfig, source: 'legacy-config' };
60
+ }
61
+ return { source: 'none' };
62
+ }
63
+ export function resolveSupplierKey(cliFlag, legacyCliFlag) {
64
+ return resolveSupplierKeyWithSource(cliFlag, legacyCliFlag).value;
65
+ }
66
+ /** 상세 소스를 사용자 노출용 라벨(flag/env/config/none)로 축약한다. */
67
+ export function supplierKeySourceLabel(source) {
68
+ switch (source) {
69
+ case 'flag':
70
+ case 'legacy-flag':
71
+ return 'flag';
72
+ case 'env':
73
+ case 'legacy-env':
74
+ return 'env';
75
+ case 'config':
76
+ case 'legacy-config':
77
+ return 'config';
78
+ default:
79
+ return 'none';
43
80
  }
44
- return undefined;
45
81
  }
46
82
  export function resolveBaseUrl() {
47
- return process.env.BOLTA_API_BASE_URL || loadConfig().baseUrl || 'https://xapi.bolta.io/v1';
83
+ return (normalize(process.env.BOLTA_API_BASE_URL) ||
84
+ normalize(loadConfig().baseUrl) ||
85
+ 'https://xapi.bolta.io/v1');
48
86
  }
49
87
  export function maskApiKey(key) {
50
- if (key.length <= 8)
51
- return '***';
52
- return key.slice(0, 5) + '***' + key.slice(-3);
88
+ return maskSecret(key, 5, 3);
53
89
  }
54
90
  //# sourceMappingURL=config-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAa,MAAM,SAAS,CAAC;AAC5E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAmB;IAC5C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC,MAAM,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,aAAsB;IACzE,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,IAAI,aAAa,EAAE,CAAC;QAClB,kBAAkB,CAAC,kDAAkD,CAAC,CAAC;QACvE,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC1E,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC;IAElD,8BAA8B;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,kBAAkB,CAAC,2DAA2D,CAAC,CAAC;QAChF,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,kBAAkB,CAAC,+FAA+F,CAAC,CAAC;QACpH,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,UAAU,EAAE,CAAC,OAAO,IAAI,0BAA0B,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { InstallMethod } from '../utils/platform.js';
2
+ export interface UpdateCheckCache {
3
+ /** 마지막 확인 "시도" 시각(ms). 실패해도 기록해 오프라인 재시도 폭주 방지 */
4
+ lastCheckedAt: number;
5
+ /** 확인된 넛지 대상 버전 */
6
+ latestVersion?: string;
7
+ /** 어떤 설치 방식 기준으로 확인했는지 (재설치 감지용) */
8
+ installMethod?: InstallMethod;
9
+ }
10
+ export declare function loadUpdateCheckCache(): UpdateCheckCache | undefined;
11
+ export declare function saveUpdateCheckCache(cache: UpdateCheckCache): boolean;
12
+ //# sourceMappingURL=update-check-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check-cache.d.ts","sourceRoot":"","sources":["../../../src/config/update-check-cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO1D,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,wBAAgB,oBAAoB,IAAI,gBAAgB,GAAG,SAAS,CASnE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAuBrE"}
@@ -0,0 +1,45 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, renameSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { CONFIG_DIR } from './config-manager.js';
4
+ // 업데이트 확인 상태 캐시 (~/.bolta/update-check.json)
5
+ // config.json과 분리: 백그라운드 자식 프로세스와 메인 프로세스의 쓰기 경합 방지
6
+ const CACHE_FILE = join(CONFIG_DIR, 'update-check.json');
7
+ export function loadUpdateCheckCache() {
8
+ try {
9
+ const raw = readFileSync(CACHE_FILE, 'utf-8');
10
+ const parsed = JSON.parse(raw);
11
+ if (typeof parsed.lastCheckedAt !== 'number')
12
+ return undefined;
13
+ return parsed;
14
+ }
15
+ catch {
16
+ return undefined;
17
+ }
18
+ }
19
+ export function saveUpdateCheckCache(cache) {
20
+ try {
21
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
22
+ }
23
+ catch {
24
+ return false;
25
+ }
26
+ const json = JSON.stringify(cache, null, 2);
27
+ const tmpFile = `${CACHE_FILE}.${process.pid}.${Date.now()}.tmp`;
28
+ try {
29
+ // tmp 쓰기 + rename으로 원자적 교체 (동시 실행 시 last-write-wins)
30
+ writeFileSync(tmpFile, json, { mode: 0o600 });
31
+ renameSync(tmpFile, CACHE_FILE);
32
+ return true;
33
+ }
34
+ catch {
35
+ // Windows AV 잠금 등으로 rename 실패 시 직접 쓰기 폴백
36
+ try {
37
+ writeFileSync(CACHE_FILE, json, { mode: 0o600 });
38
+ return true;
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ }
44
+ }
45
+ //# sourceMappingURL=update-check-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-check-cache.js","sourceRoot":"","sources":["../../../src/config/update-check-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,6CAA6C;AAC7C,oDAAoD;AACpD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;AAWzD,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAqB,CAAC;QACnD,IAAI,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAC/D,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,IAAI,CAAC;QACH,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACjE,IAAI,CAAC;QACH,qDAAqD;QACrD,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;QACzC,IAAI,CAAC;YACH,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -129,8 +129,8 @@ export interface BoltaConfig {
129
129
  baseUrl?: string;
130
130
  timeout?: number;
131
131
  maxRetries?: number;
132
- lastUpdateCheck?: number;
133
- latestKnownVersion?: string;
132
+ /** false면 새 버전 넛지 비활성화 (bolta config set update-check false) */
133
+ updateCheck?: boolean;
134
134
  guideShown?: boolean;
135
135
  }
136
136
  export interface GlobalOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/types/api.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,kBAAkB,CAAC;QAC7B,QAAQ,EAAE,kBAAkB,CAAC;QAC7B,KAAK,EAAE,cAAc,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAMD,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,yDAAyD;AACzD,MAAM,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,mDAAmD;AACnD,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAMD,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;CACb;AAMD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;CACH;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,kBAAkB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;AAMhF,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB"}
@@ -0,0 +1,17 @@
1
+ import { BoltaClient } from '../client/bolta-client.js';
2
+ interface GlobalOptions {
3
+ apiKey?: string;
4
+ supplierKey?: string;
5
+ customerKey?: string;
6
+ }
7
+ /**
8
+ * 글로벌 옵션(및 env/config)으로부터 인증을 해석해 BoltaClient를 만든다.
9
+ * 발행/수정 커맨드에서 반복되던 apiKey 확인 + supplierKey 해석 + 클라이언트 생성을 한곳으로 모은다.
10
+ * 커맨드가 요청 시 supplierKey 값을 함께 넘겨야 하므로 client와 함께 반환한다.
11
+ */
12
+ export declare function createClient(globalOpts: GlobalOptions): {
13
+ client: BoltaClient;
14
+ supplierKey?: string;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,aAAa,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAWrG"}