@microwiseai/snapshot 0.3.6 → 0.3.27
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/dist/commands/install.d.ts +13 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +526 -49
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/license.d.ts +21 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +120 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/index.js +46 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +32 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +89 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/gitlab.d.ts +26 -20
- package/dist/lib/gitlab.d.ts.map +1 -1
- package/dist/lib/gitlab.js +100 -153
- package/dist/lib/gitlab.js.map +1 -1
- package/dist/lib/package-resolver.d.ts +48 -0
- package/dist/lib/package-resolver.d.ts.map +1 -0
- package/dist/lib/package-resolver.js +178 -0
- package/dist/lib/package-resolver.js.map +1 -0
- package/dist/lib/skit-adapter.d.ts +56 -0
- package/dist/lib/skit-adapter.d.ts.map +1 -0
- package/dist/lib/skit-adapter.js +166 -0
- package/dist/lib/skit-adapter.js.map +1 -0
- package/dist/lib/transitive-resolver.d.ts +86 -0
- package/dist/lib/transitive-resolver.d.ts.map +1 -0
- package/dist/lib/transitive-resolver.js +431 -0
- package/dist/lib/transitive-resolver.js.map +1 -0
- package/dist/lib/types.d.ts +6 -0
- package/dist/lib/types.d.ts.map +1 -1
- package/dist/lib.d.ts +59 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +134 -0
- package/dist/lib.js.map +1 -0
- package/dist/tools/snapshot-to-license.d.ts +13 -0
- package/dist/tools/snapshot-to-license.d.ts.map +1 -0
- package/dist/tools/snapshot-to-license.js +105 -0
- package/dist/tools/snapshot-to-license.js.map +1 -0
- package/node_modules/@microwiseai/cache/README.md +143 -0
- package/node_modules/@microwiseai/cache/dist/file.d.ts +97 -0
- package/node_modules/@microwiseai/cache/dist/file.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/file.js +256 -0
- package/node_modules/@microwiseai/cache/dist/file.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/index.d.ts +10 -0
- package/node_modules/@microwiseai/cache/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/index.js +11 -0
- package/node_modules/@microwiseai/cache/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/memory.d.ts +69 -0
- package/node_modules/@microwiseai/cache/dist/memory.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/memory.js +152 -0
- package/node_modules/@microwiseai/cache/dist/memory.js.map +1 -0
- package/node_modules/@microwiseai/cache/dist/types.d.ts +76 -0
- package/node_modules/@microwiseai/cache/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/cache/dist/types.js +5 -0
- package/node_modules/@microwiseai/cache/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/cache/package.json +40 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.d.ts +7 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.js +139 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/detector.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.d.ts +8 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.js +195 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/reporter.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.d.ts +8 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.js +97 -0
- package/node_modules/@microwiseai/import-telemetry/dist/__tests__/types.test.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.d.ts +16 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.js +103 -0
- package/node_modules/@microwiseai/import-telemetry/dist/detector.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.d.ts +48 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.js +56 -0
- package/node_modules/@microwiseai/import-telemetry/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.d.ts +16 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.js +147 -0
- package/node_modules/@microwiseai/import-telemetry/dist/reporter.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.d.ts +75 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.js +23 -0
- package/node_modules/@microwiseai/import-telemetry/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/import-telemetry/package.json +40 -0
- package/node_modules/@microwiseai/license/README.md +157 -0
- package/node_modules/@microwiseai/license/dist/api/client.d.ts +37 -0
- package/node_modules/@microwiseai/license/dist/api/client.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/client.js +95 -0
- package/node_modules/@microwiseai/license/dist/api/client.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.d.ts +25 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.js +101 -0
- package/node_modules/@microwiseai/license/dist/api/endpoints.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/api/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/api/index.js +8 -0
- package/node_modules/@microwiseai/license/dist/api/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/file.d.ts +38 -0
- package/node_modules/@microwiseai/license/dist/cache/file.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/file.js +140 -0
- package/node_modules/@microwiseai/license/dist/cache/file.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/cache/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/index.js +10 -0
- package/node_modules/@microwiseai/license/dist/cache/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.d.ts +35 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.js +77 -0
- package/node_modules/@microwiseai/license/dist/cache/memory.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.d.ts +29 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.js +58 -0
- package/node_modules/@microwiseai/license/dist/cache/offline.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/client.d.ts +42 -0
- package/node_modules/@microwiseai/license/dist/client.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/client.js +83 -0
- package/node_modules/@microwiseai/license/dist/client.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/config.d.ts +27 -0
- package/node_modules/@microwiseai/license/dist/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/config.js +52 -0
- package/node_modules/@microwiseai/license/dist/config.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/activate.d.ts +21 -0
- package/node_modules/@microwiseai/license/dist/core/activate.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/activate.js +72 -0
- package/node_modules/@microwiseai/license/dist/core/activate.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/check.d.ts +19 -0
- package/node_modules/@microwiseai/license/dist/core/check.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/check.js +244 -0
- package/node_modules/@microwiseai/license/dist/core/check.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/core/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/index.js +10 -0
- package/node_modules/@microwiseai/license/dist/core/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/verify.d.ts +39 -0
- package/node_modules/@microwiseai/license/dist/core/verify.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/core/verify.js +188 -0
- package/node_modules/@microwiseai/license/dist/core/verify.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/env.d.ts +33 -0
- package/node_modules/@microwiseai/license/dist/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/env.js +69 -0
- package/node_modules/@microwiseai/license/dist/env.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.d.ts +97 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.js +198 -0
- package/node_modules/@microwiseai/license/dist/helpers/cache.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.js +9 -0
- package/node_modules/@microwiseai/license/dist/helpers/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.d.ts +68 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.js +119 -0
- package/node_modules/@microwiseai/license/dist/helpers/telemetry.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/index.d.ts +34 -0
- package/node_modules/@microwiseai/license/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/index.js +48 -0
- package/node_modules/@microwiseai/license/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/id.d.ts +19 -0
- package/node_modules/@microwiseai/license/dist/machine/id.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/id.js +83 -0
- package/node_modules/@microwiseai/license/dist/machine/id.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/index.d.ts +6 -0
- package/node_modules/@microwiseai/license/dist/machine/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/machine/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.d.ts +23 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.js +52 -0
- package/node_modules/@microwiseai/license/dist/machine/instance.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.d.ts +6 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/telemetry/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.d.ts +53 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.js +125 -0
- package/node_modules/@microwiseai/license/dist/telemetry/manager.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.d.ts +17 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.js +65 -0
- package/node_modules/@microwiseai/license/dist/telemetry/payload.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/api.d.ts +120 -0
- package/node_modules/@microwiseai/license/dist/types/api.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/api.js +5 -0
- package/node_modules/@microwiseai/license/dist/types/api.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/config.d.ts +80 -0
- package/node_modules/@microwiseai/license/dist/types/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/config.js +12 -0
- package/node_modules/@microwiseai/license/dist/types/config.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/errors.d.ts +93 -0
- package/node_modules/@microwiseai/license/dist/types/errors.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/errors.js +144 -0
- package/node_modules/@microwiseai/license/dist/types/errors.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/index.d.ts +10 -0
- package/node_modules/@microwiseai/license/dist/types/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/index.js +6 -0
- package/node_modules/@microwiseai/license/dist/types/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/license.d.ts +113 -0
- package/node_modules/@microwiseai/license/dist/types/license.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/types/license.js +5 -0
- package/node_modules/@microwiseai/license/dist/types/license.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/date.d.ts +45 -0
- package/node_modules/@microwiseai/license/dist/utils/date.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/date.js +95 -0
- package/node_modules/@microwiseai/license/dist/utils/date.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/env.d.ts +41 -0
- package/node_modules/@microwiseai/license/dist/utils/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/env.js +80 -0
- package/node_modules/@microwiseai/license/dist/utils/env.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/index.d.ts +7 -0
- package/node_modules/@microwiseai/license/dist/utils/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/index.js +7 -0
- package/node_modules/@microwiseai/license/dist/utils/index.js.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.d.ts +27 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.d.ts.map +1 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.js +67 -0
- package/node_modules/@microwiseai/license/dist/utils/mask.js.map +1 -0
- package/node_modules/@microwiseai/license/package.json +52 -0
- package/node_modules/@microwiseai/license-types/README.md +84 -0
- package/node_modules/@microwiseai/license-types/dist/api.d.ts +120 -0
- package/node_modules/@microwiseai/license-types/dist/api.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/api.js +5 -0
- package/node_modules/@microwiseai/license-types/dist/api.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/config.d.ts +80 -0
- package/node_modules/@microwiseai/license-types/dist/config.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/config.js +12 -0
- package/node_modules/@microwiseai/license-types/dist/config.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/errors.d.ts +93 -0
- package/node_modules/@microwiseai/license-types/dist/errors.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/errors.js +144 -0
- package/node_modules/@microwiseai/license-types/dist/errors.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/index.d.ts +10 -0
- package/node_modules/@microwiseai/license-types/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/index.js +6 -0
- package/node_modules/@microwiseai/license-types/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/license.d.ts +113 -0
- package/node_modules/@microwiseai/license-types/dist/license.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-types/dist/license.js +5 -0
- package/node_modules/@microwiseai/license-types/dist/license.js.map +1 -0
- package/node_modules/@microwiseai/license-types/package.json +38 -0
- package/node_modules/@microwiseai/license-utils/README.md +82 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.d.ts +2 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.js +124 -0
- package/node_modules/@microwiseai/license-utils/dist/__tests__/machine.test.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/index.d.ts +7 -0
- package/node_modules/@microwiseai/license-utils/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/index.js +15 -0
- package/node_modules/@microwiseai/license-utils/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.d.ts +19 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.js +83 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/id.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.d.ts +6 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.js +6 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.d.ts +23 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.js +52 -0
- package/node_modules/@microwiseai/license-utils/dist/machine/instance.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.d.ts +45 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.js +95 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/date.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.d.ts +16 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.js +22 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/env.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.d.ts +7 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.js +7 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/index.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.d.ts +27 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.d.ts.map +1 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.js +67 -0
- package/node_modules/@microwiseai/license-utils/dist/utils/mask.js.map +1 -0
- package/node_modules/@microwiseai/license-utils/package.json +45 -0
- package/node_modules/@microwiseai/telemetry/README.md +86 -0
- package/node_modules/@microwiseai/telemetry/dist/index.d.ts +9 -0
- package/node_modules/@microwiseai/telemetry/dist/index.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/index.js +10 -0
- package/node_modules/@microwiseai/telemetry/dist/index.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.d.ts +71 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.js +171 -0
- package/node_modules/@microwiseai/telemetry/dist/manager.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.d.ts +13 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.js +35 -0
- package/node_modules/@microwiseai/telemetry/dist/payload.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/types.d.ts +76 -0
- package/node_modules/@microwiseai/telemetry/dist/types.d.ts.map +1 -0
- package/node_modules/@microwiseai/telemetry/dist/types.js +13 -0
- package/node_modules/@microwiseai/telemetry/dist/types.js.map +1 -0
- package/node_modules/@microwiseai/telemetry/package.json +43 -0
- package/node_modules/chalk/license +9 -0
- package/node_modules/chalk/package.json +83 -0
- package/node_modules/chalk/readme.md +297 -0
- package/node_modules/chalk/source/index.d.ts +325 -0
- package/node_modules/chalk/source/index.js +225 -0
- package/node_modules/chalk/source/utilities.js +33 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.d.ts +236 -0
- package/node_modules/chalk/source/vendor/ansi-styles/index.js +223 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.d.ts +1 -0
- package/node_modules/chalk/source/vendor/supports-color/browser.js +34 -0
- package/node_modules/chalk/source/vendor/supports-color/index.d.ts +55 -0
- package/node_modules/chalk/source/vendor/supports-color/index.js +190 -0
- package/package.json +26 -2
package/dist/commands/install.js
CHANGED
|
@@ -1,21 +1,172 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
|
+
import { writeFileSync, existsSync, readFileSync, unlinkSync } from 'fs';
|
|
4
|
+
import { homedir, platform, arch } from 'os';
|
|
5
|
+
import { join } from 'path';
|
|
3
6
|
import { fetchSnapshotFromRepo, snapshotNameToRepoName } from '../lib/gitlab.js';
|
|
4
7
|
import { saveCurrentSnapshot } from '../lib/snapshot.js';
|
|
5
|
-
import {
|
|
8
|
+
import { getLicenseKey, REGISTRY_PROXY_URL, VENDOR_NAME, STORE_URL, PACKAGE_NAME, getIstCredentials, LICENSE_API_URL } from '../lib/config.js';
|
|
9
|
+
import { resolveSnapshotDependencies, detectPackageType } from '../lib/package-resolver.js';
|
|
10
|
+
import { resolveDepsFromLicenseAPI } from '../lib/transitive-resolver.js';
|
|
11
|
+
import { installSkitPackage } from '../lib/skit-adapter.js';
|
|
12
|
+
import { createLicenseClient, markLicenseChecked } from '@microwiseai/license';
|
|
13
|
+
// CLI version (from package.json)
|
|
14
|
+
const CLI_VERSION = '0.3.27';
|
|
15
|
+
/**
|
|
16
|
+
* Send install telemetry to license-api (fire and forget)
|
|
17
|
+
*/
|
|
18
|
+
async function sendInstallTelemetry(data) {
|
|
19
|
+
try {
|
|
20
|
+
const telemetry = {
|
|
21
|
+
event: 'install',
|
|
22
|
+
...data,
|
|
23
|
+
timestamp: new Date().toISOString(),
|
|
24
|
+
};
|
|
25
|
+
// Fire and forget - don't block on response
|
|
26
|
+
fetch(`${LICENSE_API_URL}/telemetry`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({
|
|
30
|
+
machineId: data.userId || 'anonymous',
|
|
31
|
+
instanceName: data.package,
|
|
32
|
+
vendorName: VENDOR_NAME,
|
|
33
|
+
packageName: data.package,
|
|
34
|
+
packageVersion: data.version,
|
|
35
|
+
sdkVersion: data.cliVersion,
|
|
36
|
+
licenseStatus: data.success ? 'valid' : 'invalid',
|
|
37
|
+
licenseType: 'beta',
|
|
38
|
+
productId: 'snapshot-cli',
|
|
39
|
+
platform: data.platform,
|
|
40
|
+
nodeVersion: process.version,
|
|
41
|
+
// Custom fields in metadata
|
|
42
|
+
metadata: JSON.stringify(telemetry),
|
|
43
|
+
}),
|
|
44
|
+
}).catch(() => {
|
|
45
|
+
// Silently ignore telemetry errors
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Silently ignore telemetry errors
|
|
50
|
+
}
|
|
51
|
+
}
|
|
6
52
|
// Default installers for backward compatibility
|
|
7
53
|
const DEFAULT_INSTALLERS = {
|
|
54
|
+
'glpkg': {
|
|
55
|
+
command: 'glpkg install {pkg}',
|
|
56
|
+
check: 'glpkg --version',
|
|
57
|
+
hint: 'npm install -g @glpkg/cli',
|
|
58
|
+
},
|
|
59
|
+
// Legacy alias for backward compatibility
|
|
8
60
|
'gitlab-install': {
|
|
9
|
-
command: '
|
|
10
|
-
check: '
|
|
11
|
-
hint: 'npm install -g @glpkg/
|
|
61
|
+
command: 'glpkg install {pkg}',
|
|
62
|
+
check: 'glpkg --version',
|
|
63
|
+
hint: 'npm install -g @glpkg/cli (gitlab-install is deprecated, use glpkg)',
|
|
12
64
|
},
|
|
13
65
|
'skit': {
|
|
14
66
|
command: 'skit install {pkg}',
|
|
15
67
|
check: 'skit --version',
|
|
16
68
|
hint: 'npm install -g @ist/skit',
|
|
17
69
|
},
|
|
70
|
+
'npm-proxy': {
|
|
71
|
+
command: 'npm install -g {pkg}',
|
|
72
|
+
check: 'npm --version',
|
|
73
|
+
hint: 'npm is required',
|
|
74
|
+
},
|
|
18
75
|
};
|
|
76
|
+
/**
|
|
77
|
+
* Configure .npmrc for registry-proxy with session token
|
|
78
|
+
*/
|
|
79
|
+
function configureNpmrcForProxy(scopes, licenseKey) {
|
|
80
|
+
const npmrcPath = join(homedir(), '.npmrc');
|
|
81
|
+
let originalContent = null;
|
|
82
|
+
// Backup existing .npmrc
|
|
83
|
+
if (existsSync(npmrcPath)) {
|
|
84
|
+
originalContent = readFileSync(npmrcPath, 'utf-8');
|
|
85
|
+
}
|
|
86
|
+
// Build new .npmrc content
|
|
87
|
+
const proxyHost = REGISTRY_PROXY_URL.replace('https://', '');
|
|
88
|
+
const lines = [];
|
|
89
|
+
// Keep existing content that's not related to our scopes
|
|
90
|
+
if (originalContent) {
|
|
91
|
+
const existingLines = originalContent.split('\n');
|
|
92
|
+
for (const line of existingLines) {
|
|
93
|
+
// Skip lines related to our scopes or proxy
|
|
94
|
+
const isOurScope = scopes.some(s => line.includes(`${s}:registry`));
|
|
95
|
+
const isProxyAuth = line.includes(proxyHost);
|
|
96
|
+
if (!isOurScope && !isProxyAuth && line.trim()) {
|
|
97
|
+
lines.push(line);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Add proxy registry config for each scope
|
|
102
|
+
for (const scope of scopes) {
|
|
103
|
+
lines.push(`${scope}:registry=${REGISTRY_PROXY_URL}/`);
|
|
104
|
+
}
|
|
105
|
+
// Add auth token for proxy
|
|
106
|
+
lines.push(`//${proxyHost}/:_authToken=${licenseKey}`);
|
|
107
|
+
writeFileSync(npmrcPath, lines.join('\n') + '\n');
|
|
108
|
+
return { path: npmrcPath, content: originalContent };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Restore original .npmrc
|
|
112
|
+
*/
|
|
113
|
+
function restoreNpmrc(backup) {
|
|
114
|
+
if (backup.content === null) {
|
|
115
|
+
// Original didn't exist, remove it
|
|
116
|
+
if (existsSync(backup.path)) {
|
|
117
|
+
unlinkSync(backup.path);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
// Restore original content
|
|
122
|
+
writeFileSync(backup.path, backup.content);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Configure .npmrc for registry-proxy WITHOUT auth token (anonymous access)
|
|
127
|
+
*/
|
|
128
|
+
function configureNpmrcForProxyAnonymous(scopes) {
|
|
129
|
+
const npmrcPath = join(homedir(), '.npmrc');
|
|
130
|
+
let originalContent = null;
|
|
131
|
+
// Backup existing .npmrc
|
|
132
|
+
if (existsSync(npmrcPath)) {
|
|
133
|
+
originalContent = readFileSync(npmrcPath, 'utf-8');
|
|
134
|
+
}
|
|
135
|
+
// Build new .npmrc content
|
|
136
|
+
const proxyHost = REGISTRY_PROXY_URL.replace('https://', '');
|
|
137
|
+
const lines = [];
|
|
138
|
+
// Keep existing content that's not related to our scopes
|
|
139
|
+
if (originalContent) {
|
|
140
|
+
const existingLines = originalContent.split('\n');
|
|
141
|
+
for (const line of existingLines) {
|
|
142
|
+
// Skip lines related to our scopes or proxy
|
|
143
|
+
const isOurScope = scopes.some(s => line.includes(`${s}:registry`));
|
|
144
|
+
const isProxyAuth = line.includes(proxyHost);
|
|
145
|
+
if (!isOurScope && !isProxyAuth && line.trim()) {
|
|
146
|
+
lines.push(line);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Add proxy registry config for each scope (NO auth token)
|
|
151
|
+
for (const scope of scopes) {
|
|
152
|
+
lines.push(`${scope}:registry=${REGISTRY_PROXY_URL}/`);
|
|
153
|
+
}
|
|
154
|
+
writeFileSync(npmrcPath, lines.join('\n') + '\n');
|
|
155
|
+
return { path: npmrcPath, content: originalContent };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Extract scopes from packages
|
|
159
|
+
*/
|
|
160
|
+
function extractScopes(packages) {
|
|
161
|
+
const scopes = new Set();
|
|
162
|
+
for (const name of Object.keys(packages)) {
|
|
163
|
+
if (name.startsWith('@')) {
|
|
164
|
+
const scope = name.split('/')[0];
|
|
165
|
+
scopes.add(scope);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return Array.from(scopes);
|
|
169
|
+
}
|
|
19
170
|
function commandExists(cmd) {
|
|
20
171
|
try {
|
|
21
172
|
const checkCmd = process.platform === 'win32'
|
|
@@ -37,17 +188,123 @@ function runCommand(command) {
|
|
|
37
188
|
return false;
|
|
38
189
|
}
|
|
39
190
|
}
|
|
40
|
-
|
|
191
|
+
/**
|
|
192
|
+
* PackageType을 installer 이름으로 변환
|
|
193
|
+
*/
|
|
194
|
+
function packageTypeToInstaller(type, useProxy) {
|
|
195
|
+
switch (type) {
|
|
196
|
+
case 'skit':
|
|
197
|
+
return 'skit';
|
|
198
|
+
case 'npm':
|
|
199
|
+
return useProxy ? 'npm-proxy' : 'glpkg';
|
|
200
|
+
case 'generic':
|
|
201
|
+
default:
|
|
202
|
+
return 'glpkg';
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Skit 패키지 설치 (lib 우선, CLI fallback)
|
|
207
|
+
* @ist/skit lib가 있으면 직접 호출, 없으면 CLI 사용
|
|
208
|
+
*/
|
|
209
|
+
async function installSkitPackages(packages, snapshotName, indent) {
|
|
210
|
+
const result = { installed: [], failed: [] };
|
|
211
|
+
const packageEntries = Object.entries(packages);
|
|
212
|
+
if (packageEntries.length === 0) {
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
const total = packageEntries.length;
|
|
216
|
+
console.log('');
|
|
217
|
+
console.log(chalk.yellow(`${indent}=== ${snapshotName}: ${total} skits ===`));
|
|
218
|
+
// Install packages using skit-adapter
|
|
219
|
+
for (let i = 0; i < packageEntries.length; i++) {
|
|
220
|
+
const [name, version] = packageEntries[i];
|
|
221
|
+
const pkgSpec = `${name}@${version}`;
|
|
222
|
+
const progress = `[${i + 1}/${total}]`;
|
|
223
|
+
process.stdout.write(`${indent}${chalk.blue(progress)} ${pkgSpec}...`);
|
|
224
|
+
try {
|
|
225
|
+
const installResult = await installSkitPackage(name, version);
|
|
226
|
+
if (installResult.success) {
|
|
227
|
+
console.log(chalk.green(' ✓'));
|
|
228
|
+
result.installed.push(pkgSpec);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
console.log(chalk.red(' ✗'));
|
|
232
|
+
if (installResult.error) {
|
|
233
|
+
console.log(chalk.gray(`${indent} ${installResult.error}`));
|
|
234
|
+
}
|
|
235
|
+
result.failed.push(pkgSpec);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
console.log(chalk.red(' ✗'));
|
|
240
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
241
|
+
console.log(chalk.gray(`${indent} ${errMsg}`));
|
|
242
|
+
result.failed.push(pkgSpec);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return result;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* 타입별 패키지 설치 (non-skit)
|
|
249
|
+
*/
|
|
250
|
+
async function installPackagesByType(packages, installerName, installers, snapshotName, indent, typeLabel) {
|
|
251
|
+
const result = { installed: [], failed: [] };
|
|
252
|
+
const packageEntries = Object.entries(packages);
|
|
253
|
+
if (packageEntries.length === 0) {
|
|
254
|
+
return result;
|
|
255
|
+
}
|
|
256
|
+
// Skit packages use dedicated function
|
|
257
|
+
if (installerName === 'skit') {
|
|
258
|
+
return installSkitPackages(packages, snapshotName, indent);
|
|
259
|
+
}
|
|
260
|
+
const installerConfig = installers[installerName] || DEFAULT_INSTALLERS[installerName];
|
|
261
|
+
if (!installerConfig) {
|
|
262
|
+
console.log(chalk.red(`${indent}Unknown installer: ${installerName}`));
|
|
263
|
+
result.failed.push(...packageEntries.map(([n, v]) => `${n}@${v}`));
|
|
264
|
+
return result;
|
|
265
|
+
}
|
|
266
|
+
const total = packageEntries.length;
|
|
267
|
+
console.log('');
|
|
268
|
+
console.log(chalk.yellow(`${indent}=== ${snapshotName}: ${total} ${typeLabel} (${installerName}) ===`));
|
|
269
|
+
// Check if installer exists
|
|
270
|
+
const cmdName = installerConfig.check.split(' ')[0];
|
|
271
|
+
if (!commandExists(cmdName)) {
|
|
272
|
+
console.log(chalk.red(`${indent}${installerName} not found.`));
|
|
273
|
+
console.log(chalk.yellow(`${indent}Install: ${installerConfig.hint}`));
|
|
274
|
+
result.failed.push(...packageEntries.map(([n, v]) => `${n}@${v}`));
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
// Install packages
|
|
278
|
+
for (let i = 0; i < packageEntries.length; i++) {
|
|
279
|
+
const [name, version] = packageEntries[i];
|
|
280
|
+
const pkgSpec = `${name}@${version}`;
|
|
281
|
+
const progress = `[${i + 1}/${total}]`;
|
|
282
|
+
const command = installerConfig.command.replace('{pkg}', pkgSpec);
|
|
283
|
+
process.stdout.write(`${indent}${chalk.blue(progress)} ${pkgSpec}...`);
|
|
284
|
+
if (runCommand(command)) {
|
|
285
|
+
console.log(chalk.green(' ✓'));
|
|
286
|
+
result.installed.push(pkgSpec);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
console.log(chalk.red(' ✗'));
|
|
290
|
+
result.failed.push(pkgSpec);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
export async function installSnapshot(snapshot, depth = 0, parentInstallers = {}, options = {}) {
|
|
41
296
|
const indent = ' '.repeat(depth);
|
|
42
297
|
const result = {
|
|
43
298
|
installed: [],
|
|
44
299
|
failed: [],
|
|
45
300
|
};
|
|
46
|
-
// Merge installers:
|
|
47
|
-
let installers = { ...
|
|
301
|
+
// Merge installers: snapshot + parent (parent takes precedence for overrides like npm-proxy)
|
|
302
|
+
let installers = { ...DEFAULT_INSTALLERS };
|
|
48
303
|
if (snapshot.installers) {
|
|
49
304
|
installers = { ...installers, ...snapshot.installers };
|
|
50
305
|
}
|
|
306
|
+
// Parent installers take precedence (for effectiveInstallers override)
|
|
307
|
+
installers = { ...installers, ...parentInstallers };
|
|
51
308
|
// Handle extends - install base snapshot first
|
|
52
309
|
if (snapshot.extends) {
|
|
53
310
|
console.log('');
|
|
@@ -55,7 +312,7 @@ async function installSnapshot(snapshot, depth = 0, parentInstallers = {}) {
|
|
|
55
312
|
try {
|
|
56
313
|
const baseSnapshot = await fetchSnapshotFromRepo(snapshot.extends);
|
|
57
314
|
console.log(chalk.gray(`${indent} Installing base snapshot...`));
|
|
58
|
-
const baseResult = await installSnapshot(baseSnapshot, depth + 1, installers);
|
|
315
|
+
const baseResult = await installSnapshot(baseSnapshot, depth + 1, installers, options);
|
|
59
316
|
result.installed.push(...baseResult.result.installed);
|
|
60
317
|
result.failed.push(...baseResult.result.failed);
|
|
61
318
|
// Update installers with any from base
|
|
@@ -81,12 +338,50 @@ async function installSnapshot(snapshot, depth = 0, parentInstallers = {}) {
|
|
|
81
338
|
}
|
|
82
339
|
}
|
|
83
340
|
}
|
|
341
|
+
// ============================================================
|
|
342
|
+
// Auto-detect mode: 패키지 타입 자동 판별
|
|
343
|
+
// ============================================================
|
|
344
|
+
if (options.autoDetect && !snapshot.install) {
|
|
345
|
+
console.log(chalk.gray(`${indent} Auto-detecting package types...`));
|
|
346
|
+
const resolved = await resolveSnapshotDependencies(snapshot, { skipRegistry: true });
|
|
347
|
+
// skit 패키지 설치 (skit-adapter 사용: lib 우선, CLI fallback)
|
|
348
|
+
if (Object.keys(resolved.skit).length > 0) {
|
|
349
|
+
const skitResult = await installSkitPackages(resolved.skit, snapshot.name, indent);
|
|
350
|
+
result.installed.push(...skitResult.installed);
|
|
351
|
+
result.failed.push(...skitResult.failed);
|
|
352
|
+
}
|
|
353
|
+
// npm 패키지 설치 (proxy 사용 시 npm-proxy, 아니면 glpkg)
|
|
354
|
+
if (Object.keys(resolved.npm).length > 0) {
|
|
355
|
+
const npmInstaller = options.useProxy ? 'npm-proxy' : 'glpkg';
|
|
356
|
+
const npmResult = await installPackagesByType(resolved.npm, npmInstaller, installers, snapshot.name, indent, 'npm packages');
|
|
357
|
+
result.installed.push(...npmResult.installed);
|
|
358
|
+
result.failed.push(...npmResult.failed);
|
|
359
|
+
}
|
|
360
|
+
// generic 패키지 설치 (glpkg)
|
|
361
|
+
if (Object.keys(resolved.generic).length > 0) {
|
|
362
|
+
const genericInstaller = options.useProxy ? 'npm-proxy' : 'glpkg';
|
|
363
|
+
const genericResult = await installPackagesByType(resolved.generic, genericInstaller, installers, snapshot.name, indent, 'packages');
|
|
364
|
+
result.installed.push(...genericResult.installed);
|
|
365
|
+
result.failed.push(...genericResult.failed);
|
|
366
|
+
}
|
|
367
|
+
return { result, installers };
|
|
368
|
+
}
|
|
369
|
+
// ============================================================
|
|
370
|
+
// Legacy mode: 기존 방식 (하위호환)
|
|
371
|
+
// ============================================================
|
|
84
372
|
// New structure: install block
|
|
85
373
|
if (snapshot.install) {
|
|
86
374
|
for (const [installerName, packages] of Object.entries(snapshot.install)) {
|
|
87
375
|
const packageEntries = Object.entries(packages);
|
|
88
376
|
if (packageEntries.length === 0)
|
|
89
377
|
continue;
|
|
378
|
+
// Skit packages: use skit-adapter (lib 우선, CLI fallback)
|
|
379
|
+
if (installerName === 'skit') {
|
|
380
|
+
const skitResult = await installSkitPackages(packages, snapshot.name, indent);
|
|
381
|
+
result.installed.push(...skitResult.installed);
|
|
382
|
+
result.failed.push(...skitResult.failed);
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
90
385
|
const installerConfig = installers[installerName] || DEFAULT_INSTALLERS[installerName];
|
|
91
386
|
if (!installerConfig) {
|
|
92
387
|
console.log(chalk.red(`${indent}Unknown installer: ${installerName}`));
|
|
@@ -122,16 +417,16 @@ async function installSnapshot(snapshot, depth = 0, parentInstallers = {}) {
|
|
|
122
417
|
}
|
|
123
418
|
}
|
|
124
419
|
}
|
|
125
|
-
// Legacy: packages (use
|
|
420
|
+
// Legacy: packages (use glpkg)
|
|
126
421
|
if (snapshot.packages && Object.keys(snapshot.packages).length > 0) {
|
|
127
422
|
const packageEntries = Object.entries(snapshot.packages);
|
|
128
423
|
const total = packageEntries.length;
|
|
129
|
-
const installerConfig = installers['
|
|
424
|
+
const installerConfig = installers['glpkg'] || DEFAULT_INSTALLERS['glpkg'];
|
|
130
425
|
console.log('');
|
|
131
426
|
console.log(chalk.yellow(`${indent}=== ${snapshot.name}: ${total} packages ===`));
|
|
132
427
|
const cmdName = installerConfig.check.split(' ')[0];
|
|
133
428
|
if (!commandExists(cmdName)) {
|
|
134
|
-
console.log(chalk.red(`${indent}
|
|
429
|
+
console.log(chalk.red(`${indent}glpkg not found.`));
|
|
135
430
|
console.log(chalk.yellow(`${indent}Install: ${installerConfig.hint}`));
|
|
136
431
|
result.failed.push(...packageEntries.map(([n, v]) => `${n}@${v}`));
|
|
137
432
|
}
|
|
@@ -153,36 +448,11 @@ async function installSnapshot(snapshot, depth = 0, parentInstallers = {}) {
|
|
|
153
448
|
}
|
|
154
449
|
}
|
|
155
450
|
}
|
|
156
|
-
// Legacy: skits (use skit)
|
|
451
|
+
// Legacy: skits (use skit-adapter: lib 우선, CLI fallback)
|
|
157
452
|
if (snapshot.skits && Object.keys(snapshot.skits).length > 0) {
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
console.log('');
|
|
162
|
-
console.log(chalk.yellow(`${indent}=== ${snapshot.name}: ${total} skits ===`));
|
|
163
|
-
const cmdName = installerConfig.check.split(' ')[0];
|
|
164
|
-
if (!commandExists(cmdName)) {
|
|
165
|
-
console.log(chalk.red(`${indent}skit not found.`));
|
|
166
|
-
console.log(chalk.yellow(`${indent}Install: ${installerConfig.hint}`));
|
|
167
|
-
result.failed.push(...skitEntries.map(([n, v]) => `${n}@${v}`));
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
for (let i = 0; i < skitEntries.length; i++) {
|
|
171
|
-
const [name, version] = skitEntries[i];
|
|
172
|
-
const skitSpec = `${name}@${version}`;
|
|
173
|
-
const progress = `[${i + 1}/${total}]`;
|
|
174
|
-
const command = installerConfig.command.replace('{pkg}', skitSpec);
|
|
175
|
-
process.stdout.write(`${indent}${chalk.blue(progress)} ${skitSpec}...`);
|
|
176
|
-
if (runCommand(command)) {
|
|
177
|
-
console.log(chalk.green(' ✓'));
|
|
178
|
-
result.installed.push(skitSpec);
|
|
179
|
-
}
|
|
180
|
-
else {
|
|
181
|
-
console.log(chalk.red(' ✗'));
|
|
182
|
-
result.failed.push(skitSpec);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
453
|
+
const skitResult = await installSkitPackages(snapshot.skits, snapshot.name, indent);
|
|
454
|
+
result.installed.push(...skitResult.installed);
|
|
455
|
+
result.failed.push(...skitResult.failed);
|
|
186
456
|
}
|
|
187
457
|
return { result, installers };
|
|
188
458
|
}
|
|
@@ -192,6 +462,43 @@ export async function installCommand(name) {
|
|
|
192
462
|
║ Snapshot Installer ║
|
|
193
463
|
╚══════════════════════════════════════════════════════════════╝
|
|
194
464
|
`));
|
|
465
|
+
// ========== IST Login Check ==========
|
|
466
|
+
// Public packages (@ist/minimal, @ist/foundation) can be installed without login
|
|
467
|
+
const PUBLIC_PACKAGES = ['@ist/minimal', '@ist/foundation'];
|
|
468
|
+
const isPublicPackage = PUBLIC_PACKAGES.includes(name);
|
|
469
|
+
const istCredentials = getIstCredentials();
|
|
470
|
+
if (istCredentials?.userId) {
|
|
471
|
+
console.log(chalk.green('✓') + ' IST login verified');
|
|
472
|
+
}
|
|
473
|
+
else if (isPublicPackage) {
|
|
474
|
+
console.log(chalk.yellow('⚠') + ' No IST login - installing public package');
|
|
475
|
+
}
|
|
476
|
+
else {
|
|
477
|
+
console.log(chalk.red('⛔ IST login required for non-public packages'));
|
|
478
|
+
console.log(chalk.gray(' Run: ist auth login'));
|
|
479
|
+
console.log(chalk.gray(' Or install @ist/minimal first (no login required)'));
|
|
480
|
+
process.exit(1);
|
|
481
|
+
}
|
|
482
|
+
// ======================================
|
|
483
|
+
// ========== License Check ==========
|
|
484
|
+
const apiUrl = process.env.LICENSE_API_URL || 'https://license-api.sisung-kim1.workers.dev/api';
|
|
485
|
+
const license = createLicenseClient({
|
|
486
|
+
vendorName: VENDOR_NAME,
|
|
487
|
+
apiUrl,
|
|
488
|
+
cliCommand: 'snapshot license',
|
|
489
|
+
storeUrl: STORE_URL,
|
|
490
|
+
});
|
|
491
|
+
const licenseResult = await license.checkLicense();
|
|
492
|
+
if (licenseResult.valid) {
|
|
493
|
+
markLicenseChecked(PACKAGE_NAME);
|
|
494
|
+
console.log(chalk.green('✓') + ' License verified');
|
|
495
|
+
}
|
|
496
|
+
else {
|
|
497
|
+
// License invalid - try anonymous access (public packages will work via registry-proxy)
|
|
498
|
+
console.log(chalk.yellow('⚠') + ' No license - trying anonymous access...');
|
|
499
|
+
console.log(chalk.gray(' (Public packages will install without license)'));
|
|
500
|
+
}
|
|
501
|
+
// ====================================
|
|
195
502
|
// Validate name
|
|
196
503
|
let repoName;
|
|
197
504
|
try {
|
|
@@ -208,16 +515,17 @@ export async function installCommand(name) {
|
|
|
208
515
|
}
|
|
209
516
|
console.log(chalk.gray(`Snapshot: ${name}`));
|
|
210
517
|
console.log(chalk.gray(`Repo: ${repoName}`));
|
|
211
|
-
// Check
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
console.log(chalk.
|
|
216
|
-
|
|
518
|
+
// Check auth: license key for registry-proxy
|
|
519
|
+
const licenseKey = getLicenseKey();
|
|
520
|
+
const useProxy = true; // Always use registry-proxy
|
|
521
|
+
if (licenseKey) {
|
|
522
|
+
console.log(chalk.green('✓') + ' Using registry-proxy with license key');
|
|
523
|
+
}
|
|
524
|
+
else {
|
|
525
|
+
console.log(chalk.yellow('⚠') + ' No license key - trying anonymous access');
|
|
217
526
|
}
|
|
218
|
-
console.log(chalk.green('✓') + ' GitLab token found');
|
|
219
527
|
// Fetch snapshot
|
|
220
|
-
console.log(chalk.gray('Fetching snapshot
|
|
528
|
+
console.log(chalk.gray('Fetching snapshot...'));
|
|
221
529
|
let snapshot;
|
|
222
530
|
try {
|
|
223
531
|
snapshot = await fetchSnapshotFromRepo(name);
|
|
@@ -232,8 +540,162 @@ export async function installCommand(name) {
|
|
|
232
540
|
if (snapshot.description) {
|
|
233
541
|
console.log(chalk.gray(` ${snapshot.description}`));
|
|
234
542
|
}
|
|
543
|
+
// ========== Resolve Dependencies via Registry Proxy API ==========
|
|
544
|
+
let apiResolvedDeps = null;
|
|
545
|
+
if (licenseKey && snapshot.registry && snapshot.install) {
|
|
546
|
+
// Extract scopes and first groupId from snapshot.registry
|
|
547
|
+
const scopes = [];
|
|
548
|
+
let groupId = null;
|
|
549
|
+
for (const [scope, config] of Object.entries(snapshot.registry)) {
|
|
550
|
+
const normalizedScope = scope.startsWith('@') ? scope : `@${scope}`;
|
|
551
|
+
scopes.push(normalizedScope);
|
|
552
|
+
if (config.group && !groupId) {
|
|
553
|
+
groupId = config.group;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// Extract packages from snapshot.install (all installers)
|
|
557
|
+
const packages = [];
|
|
558
|
+
for (const pkgs of Object.values(snapshot.install)) {
|
|
559
|
+
for (const [name, version] of Object.entries(pkgs)) {
|
|
560
|
+
packages.push(`${name}@${version}`);
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
if (packages.length > 0 && groupId && scopes.length > 0) {
|
|
564
|
+
console.log(chalk.gray('Resolving dependencies via Registry Proxy API...'));
|
|
565
|
+
try {
|
|
566
|
+
apiResolvedDeps = await resolveDepsFromLicenseAPI({
|
|
567
|
+
packages,
|
|
568
|
+
groupId,
|
|
569
|
+
scopes,
|
|
570
|
+
includePeer: true,
|
|
571
|
+
});
|
|
572
|
+
const depCount = Object.keys(apiResolvedDeps.dependencies).length;
|
|
573
|
+
const peerCount = Object.keys(apiResolvedDeps.peerDependencies || {}).length;
|
|
574
|
+
console.log(chalk.green('✓') + ` Resolved ${depCount} dependencies, ${peerCount} peer dependencies`);
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
578
|
+
console.log(chalk.yellow('⚠') + ` Registry Proxy API resolve failed: ${errMsg}`);
|
|
579
|
+
console.log(chalk.gray(' Falling back to local dependency resolution...'));
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
// ================================================================
|
|
584
|
+
// ========== Snapshot Access Check ==========
|
|
585
|
+
if (snapshot.access && typeof snapshot.access === 'object' && snapshot.access.type === 'licensed') {
|
|
586
|
+
const productId = snapshot.access.productId;
|
|
587
|
+
const accessResult = await license.checkLicense({ productId });
|
|
588
|
+
if (!accessResult.valid) {
|
|
589
|
+
console.log('');
|
|
590
|
+
console.log(chalk.red('⛔ This snapshot requires a license'));
|
|
591
|
+
console.log(chalk.gray(` Product: ${productId}`));
|
|
592
|
+
console.log(chalk.gray(` Activate: snapshot license activate <KEY>`));
|
|
593
|
+
process.exit(1);
|
|
594
|
+
}
|
|
595
|
+
console.log(chalk.green('✓') + ` License verified for ${productId}`);
|
|
596
|
+
}
|
|
597
|
+
// access가 없거나 'public'이면 그냥 통과
|
|
598
|
+
// ============================================
|
|
599
|
+
// Collect all packages to determine scopes
|
|
600
|
+
const allPackages = {
|
|
601
|
+
...(snapshot.packages || {}),
|
|
602
|
+
};
|
|
603
|
+
if (snapshot.install) {
|
|
604
|
+
for (const pkgs of Object.values(snapshot.install)) {
|
|
605
|
+
Object.assign(allPackages, pkgs);
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
// Configure .npmrc for proxy (with or without auth token)
|
|
609
|
+
let npmrcBackup = null;
|
|
610
|
+
if (useProxy) {
|
|
611
|
+
const scopes = extractScopes(allPackages);
|
|
612
|
+
if (scopes.length > 0) {
|
|
613
|
+
if (licenseKey) {
|
|
614
|
+
console.log(chalk.gray(`Configuring registry-proxy for scopes: ${scopes.join(', ')}`));
|
|
615
|
+
npmrcBackup = configureNpmrcForProxy(scopes, licenseKey);
|
|
616
|
+
}
|
|
617
|
+
else {
|
|
618
|
+
// Anonymous mode - configure proxy without auth token
|
|
619
|
+
console.log(chalk.gray(`Configuring registry-proxy (anonymous) for scopes: ${scopes.join(', ')}`));
|
|
620
|
+
npmrcBackup = configureNpmrcForProxyAnonymous(scopes);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
// Determine which installers to use
|
|
625
|
+
const effectiveInstallers = { ...DEFAULT_INSTALLERS };
|
|
626
|
+
if (useProxy) {
|
|
627
|
+
// When using proxy, override glpkg with npm-proxy
|
|
628
|
+
effectiveInstallers['glpkg'] = DEFAULT_INSTALLERS['npm-proxy'];
|
|
629
|
+
effectiveInstallers['gitlab-install'] = DEFAULT_INSTALLERS['npm-proxy'];
|
|
630
|
+
}
|
|
235
631
|
// Install (handles extends recursively)
|
|
236
|
-
|
|
632
|
+
let installError = null;
|
|
633
|
+
let result = { installed: [], failed: [] };
|
|
634
|
+
try {
|
|
635
|
+
// API 결과가 있으면 snapshot.install 구성
|
|
636
|
+
let effectiveSnapshot = snapshot;
|
|
637
|
+
if (apiResolvedDeps) {
|
|
638
|
+
// API 결과를 타입별로 분류
|
|
639
|
+
const allDeps = {
|
|
640
|
+
...apiResolvedDeps.dependencies,
|
|
641
|
+
...(apiResolvedDeps.peerDependencies || {}),
|
|
642
|
+
};
|
|
643
|
+
const classified = {
|
|
644
|
+
skit: {},
|
|
645
|
+
npm: {},
|
|
646
|
+
generic: {},
|
|
647
|
+
};
|
|
648
|
+
// 병렬로 타입 판별
|
|
649
|
+
const entries = Object.entries(allDeps);
|
|
650
|
+
const types = await Promise.all(entries.map(([name]) => detectPackageType(name, { skipRegistry: true })));
|
|
651
|
+
for (let i = 0; i < entries.length; i++) {
|
|
652
|
+
const [name, version] = entries[i];
|
|
653
|
+
const type = types[i];
|
|
654
|
+
classified[type][name] = version;
|
|
655
|
+
}
|
|
656
|
+
// snapshot.install 구성
|
|
657
|
+
const newInstall = {};
|
|
658
|
+
if (Object.keys(classified.skit).length > 0) {
|
|
659
|
+
newInstall['skit'] = classified.skit;
|
|
660
|
+
}
|
|
661
|
+
if (Object.keys(classified.npm).length > 0) {
|
|
662
|
+
newInstall[useProxy ? 'npm-proxy' : 'glpkg'] = classified.npm;
|
|
663
|
+
}
|
|
664
|
+
if (Object.keys(classified.generic).length > 0) {
|
|
665
|
+
newInstall[useProxy ? 'npm-proxy' : 'glpkg'] = {
|
|
666
|
+
...(newInstall[useProxy ? 'npm-proxy' : 'glpkg'] || {}),
|
|
667
|
+
...classified.generic,
|
|
668
|
+
};
|
|
669
|
+
}
|
|
670
|
+
// 기존 snapshot 복사 후 install 오버라이드
|
|
671
|
+
effectiveSnapshot = {
|
|
672
|
+
...snapshot,
|
|
673
|
+
install: newInstall,
|
|
674
|
+
};
|
|
675
|
+
console.log(chalk.gray(` skit: ${Object.keys(classified.skit).length}, npm: ${Object.keys(classified.npm).length}, generic: ${Object.keys(classified.generic).length}`));
|
|
676
|
+
}
|
|
677
|
+
// Auto-detect 모드: snapshot.install이 없으면 자동 판별 (API 실패 시 fallback)
|
|
678
|
+
const autoDetect = !effectiveSnapshot.install;
|
|
679
|
+
const installResult = await installSnapshot(effectiveSnapshot, 0, effectiveInstallers, {
|
|
680
|
+
useProxy,
|
|
681
|
+
autoDetect,
|
|
682
|
+
});
|
|
683
|
+
result = installResult.result;
|
|
684
|
+
}
|
|
685
|
+
catch (err) {
|
|
686
|
+
installError = err instanceof Error ? err : new Error(String(err));
|
|
687
|
+
}
|
|
688
|
+
finally {
|
|
689
|
+
// Restore .npmrc
|
|
690
|
+
if (npmrcBackup) {
|
|
691
|
+
restoreNpmrc(npmrcBackup);
|
|
692
|
+
console.log(chalk.gray('Restored .npmrc'));
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
if (installError) {
|
|
696
|
+
console.log(chalk.red(`Error during installation: ${installError.message}`));
|
|
697
|
+
process.exit(1);
|
|
698
|
+
}
|
|
237
699
|
// Summary
|
|
238
700
|
console.log('');
|
|
239
701
|
console.log(chalk.yellow('═══════════════════════════════════'));
|
|
@@ -259,6 +721,21 @@ export async function installCommand(name) {
|
|
|
259
721
|
console.log('');
|
|
260
722
|
console.log(chalk.green('✓') + ' Snapshot info saved');
|
|
261
723
|
}
|
|
724
|
+
// Send telemetry (fire and forget)
|
|
725
|
+
sendInstallTelemetry({
|
|
726
|
+
package: snapshot.name,
|
|
727
|
+
version: snapshot.version,
|
|
728
|
+
success: result.failed.length === 0,
|
|
729
|
+
installedCount: result.installed.length,
|
|
730
|
+
failedCount: result.failed.length,
|
|
731
|
+
error: result.failed.length > 0 ? `Failed: ${result.failed.join(', ')}` : undefined,
|
|
732
|
+
userId: istCredentials?.userId,
|
|
733
|
+
userEmail: istCredentials?.email,
|
|
734
|
+
licenseKey: licenseKey ? licenseKey.substring(0, 9) : undefined,
|
|
735
|
+
platform: platform(),
|
|
736
|
+
arch: arch(),
|
|
737
|
+
cliVersion: CLI_VERSION,
|
|
738
|
+
});
|
|
262
739
|
if (result.failed.length > 0) {
|
|
263
740
|
process.exit(1);
|
|
264
741
|
}
|