{"_id":"@designbasekorea/figma-license-core","_rev":"6-152c7e9ad203af5d5beabb220d1d67aa","name":"@designbasekorea/figma-license-core","dist-tags":{"latest":"0.3.3"},"versions":{"0.1.0":{"name":"@designbasekorea/figma-license-core","version":"0.1.0","_id":"@designbasekorea/figma-license-core@0.1.0","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"homepage":"https://github.com/designbase/designbase-library#readme","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"069b7c21375b3743b63fb6e06328f7313c4988c9","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.1.0.tgz","fileCount":20,"integrity":"sha512-Wdo3FIkH25uYvyAyLKZWfeCEOiLsud4riryz8peE6IJ38I38dHt/ImVB/Mp6d4iWQazGyfLfKks5WcRJS85Gxg==","signatures":[{"sig":"MEQCIBmDGHoKpgTq9OUO2VO0Q1Jap+/kSCyuh0KugXwP4zEaAiAjLcFuTlsL3TFGLalsNLjF9q4GoP+lW032CsdaJk/T5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161053},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"b17e9f38ca3cbad7d1a48bc72b73d8f2d0ae9ce2","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.2.4","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"_nodeVersion":"20.11.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^3.29.2","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^11.1.3","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"tmp":"tmp/figma-license-core_0.1.0_1774349979393_0.3142107813550048","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@designbasekorea/figma-license-core","version":"0.2.1","_id":"@designbasekorea/figma-license-core@0.2.1","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"homepage":"https://github.com/designbase/designbase-library#readme","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"99dc283f574bb46fd34308ba015678b84c51a3a2","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.2.1.tgz","fileCount":23,"integrity":"sha512-RX9R3PGfSgOLgd+TqkvMEgq7eX2UuG0cVMMPNu+i/sBB01eRpxT9UuiURxhRzZVHYsj/X5kkAD3Dfv7BFCx2zw==","signatures":[{"sig":"MEUCIHsm9B6mykSm5hjN8kFX7Wjj97L61ijWk1EuqKCJAU8dAiEAzqVtWWXz51srxqJDie/H8kECe/pvCxBru/QhxTVas2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":369583},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"56b7386074975610fdbe2fae8d1dac3737f1d1f8","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.9.7","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^3.29.2","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^11.1.3","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"tmp":"tmp/figma-license-core_0.2.1_1787729031736_0.972431175377449","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@designbasekorea/figma-license-core","version":"0.3.0","_id":"@designbasekorea/figma-license-core@0.3.0","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"homepage":"https://github.com/designbase/designbase-library#readme","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"08dd632c85b12ca8f343a7b58da67e7336417984","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.3.0.tgz","fileCount":23,"integrity":"sha512-Dvq8hMBFMhpuDFQxC6yfDb58KpuvhmTomMOWPY4h/s3P4j6Cf7lRm+JO04w9xqaYVn0SKGSyZTMg9sSFdv7syA==","signatures":[{"sig":"MEQCIHtM59YrUzdiYWm/qBfJwpYstMtCSBQ66D9xh8MOSgddAiB2OnpjpfjnuHd0+0fOVWvRLE4r3wLFsoARwJbrVlnxxA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC/uXzq2K5cIn05ZnEkuiCpbWqTQDLHE5nxLBFm0IBSEAIhANCG/JjaqWToWEFstaEs8qzkEwFugMrjoRlumQuQDtpd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380915},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7ee968edd12ad26415e4e9ea1cfcc2091834972d","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.9.7","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^4.63.1","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"tmp":"tmp/figma-license-core_0.3.0_1789098524680_0.7693276193405243","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@designbasekorea/figma-license-core","version":"0.3.1","_id":"@designbasekorea/figma-license-core@0.3.1","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"homepage":"https://github.com/designbase/designbase-library#readme","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"0e2fdd60e9f5eb3345746a67cd5fbf53bf84786b","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.3.1.tgz","fileCount":23,"integrity":"sha512-efAs7IFw+mJhbRhdAYRWN4Ur4oFM3jCWY3Ev6bl5tcxgEq+LljHVRiq8LLU64aMVTRmikQLUUVImwphAYUWD7g==","signatures":[{"sig":"MEYCIQD/E9QfGgr+9PGmr3FEVTI9Qv8ExsqrfbjNdx4EvhJVfwIhAObxAQ1ikwA6ZvlDYD47/JXJPyRA4+Rpf0HzxNunt/dn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHPqns8M7T+xaRTzZZJz5GmwUhFxywvrVs5tNP9FsGCtAiEAwfXWjkmu2bI+J+T8OblT4Q7JJPHh3CVldejXyG16l4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":384434},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"14a5c41fe7a3afd5a7ca7b6334c3d9f590b62505","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.9.7","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^4.63.1","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"tmp":"tmp/figma-license-core_0.3.1_1789182390750_0.6787098485336391","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@designbasekorea/figma-license-core","version":"0.3.2","_id":"@designbasekorea/figma-license-core@0.3.2","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"homepage":"https://github.com/designbase/designbase-library#readme","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"0b0a5d35491d964c716f77a57944f5ca9b847653","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.3.2.tgz","fileCount":23,"integrity":"sha512-riMx+C/o17foAnyX0kfo9SBaR4Dv9earkZ4zo2TETOCdjrvwdZeDJaz7HXwO0eYGYWio47e/J094YptPX4aIrQ==","signatures":[{"sig":"MEUCIA1Lqek6Gugs/1ooz0VHMLU7cNt64XBKZMMkF9fQPhwLAiEAnj4838CWp7PZFkuZgH3cR1Qi/knL+OSJHGwvFKhlW5o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzEEwHJ20teuh03UjAUXLI2C67aDK1vD9sDJI1JvN6JgIgInIxQXV2UxaD9MHBpU876Kodq15rI71oSuQIbNyeIAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":397971},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"ba002748b94c6616979c6f143331213a794d208b","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.9.7","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^4.63.1","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"tmp":"tmp/figma-license-core_0.3.2_1789824933012_0.9066453983085365","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"_id":"@designbasekorea/figma-license-core@0.3.3","bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"dist":{"shasum":"56f88d3f9177c1d7c2607a4019e033cc5ecb06db","tarball":"https://registry.npmjs.org/@designbasekorea/figma-license-core/-/figma-license-core-0.3.3.tgz","fileCount":23,"integrity":"sha512-YasK1iHssW2L31KRciLH67IUbdoW9tnupReSWOOZ+Eoee506vmzKRWIog8JDXeogfx/M7DvIp8lD3PvNtSQrsw==","signatures":[{"sig":"MEUCIQCwibJgy+SZ7zL1G4E3PRZo5xvNDWYDtaTk40FKkDLFFAIgTI4srIUMdk1iei7CrAxT/riGmRtK3TBJHI5lr3/Ot8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCDmPZAcvQBIgsT8Wo9k+AULiA+M/hheXl4vHFJ8q4oJwIhANypNiuNuz6re64ZowBFCrO57BqvYPiSFSDne0yMqv0Y"}],"unpackedSize":399351},"main":"dist/index.js","name":"@designbasekorea/figma-license-core","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3374711a33f1f7853ca2b027474703fbb9c2d914","scripts":{"dev":"rollup -c --watch","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","clean":"rimraf dist","storybook":"echo 'figma-license-core package does not have storybook'","test:watch":"jest --watch"},"version":"0.3.3","_npmUser":{"name":"designbasekorea","email":"designbasekorea@gmail.com"},"homepage":"https://github.com/designbase/designbase-library#readme","repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"_npmVersion":"10.9.7","description":"Figma plugin license core and status manager for reusable license workflows","directories":{},"maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.4","rimraf":"^5.0.1","rollup":"^4.63.1","typescript":"^5.2.2","@types/jest":"^29.5.5","jest-environment-jsdom":"^29.6.4","@rollup/plugin-commonjs":"^25.0.4","@rollup/plugin-typescript":"^12.3.0","@rollup/plugin-node-resolve":"^15.2.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/figma-license-core_0.3.3_1790732104058_0.46543875468757356"}}},"time":{"created":"2026-03-24T10:59:39.248Z","modified":"2026-09-30T01:35:04.287Z","0.1.0":"2026-03-24T10:59:39.541Z","0.2.1":"2026-08-26T07:23:51.905Z","0.3.0":"2026-09-11T03:48:44.762Z","0.3.1":"2026-09-12T03:06:30.843Z","0.3.2":"2026-09-19T13:35:33.104Z","0.3.3":"2026-09-30T01:35:04.139Z"},"bugs":{"url":"https://github.com/designbase/designbase-library/issues"},"homepage":"https://github.com/designbase/designbase-library#readme","repository":{"url":"git+https://github.com/designbase/designbase-library.git","type":"git","directory":"packages/figma-license-core"},"description":"Figma plugin license core and status manager for reusable license workflows","maintainers":[{"name":"designbasekorea","email":"designbasekorea@gmail.com"}],"readme":"# @designbasekorea/figma-license-core\n\nFigma 플러그인의 라이선스 상태/사용량 정책/기능 제한을 공통으로 처리하는 패키지입니다.\n\n## 핵심 기능\n\n- 라이선스 상태 판별\n  - `hasLicenseKey`: 라이선스 키가 저장되어 있는지\n  - `isLicenseRegistered`: 실제 유효 등록(PAID + key) 상태인지\n- 티어별 사용량 정책\n- 일간 리셋 (`daily`), 주간 리셋 (`weekly`), 월간 리셋 (`monthly`), 리셋 없음 (`none`)\n  - `limit: number | 'unlimited'`\n- 티어별 기능 제한\n  - `allow`/`deny` 기반 기능 접근 제어\n- Figma 메시지 연동\n  - 기본: `initialize`, `verify-license`, `deactivate-license`\n  - 추가: `check-feature-access`, `consume-usage`\n\n## 빠른 시작\n\n```ts\nimport { createFigmaLicenseStatusManager } from '@designbasekorea/figma-license-core';\n\nconst statusManager = createFigmaLicenseStatusManager({\n  config: {\n    productId: 'korean-dummy-plugin',\n    endpoint: 'https://api.example.com/license/verify',\n    deactivateEndpoint: 'https://api.example.com/license/deactivate',\n    instanceName: figma.root?.name || 'korean-dummy-plugin',\n    storagePrefix: 'korean-dummy-plugin-license',\n    policy: {\n      defaultTier: 'FREE',\n      freeTier: 'FREE',\n      paidTier: 'PRO',\n      usageByTier: {\n        FREE: { limit: 10, reset: 'daily' },\n        PRO: { limit: 20, reset: 'monthly' },\n        ENTERPRISE: { limit: 'unlimited', reset: 'none' },\n      },\n      featuresByTier: {\n        FREE: { deny: ['bulk_apply', 'advanced_batch'] },\n        PRO: { deny: [] },\n        ENTERPRISE: { defaultAllowed: true },\n      },\n    },\n  },\n});\n\nstatusManager.bindToOnMessage(async (msg) => {\n  if ((msg as { type?: string }).type === 'process') {\n    // 기존 플러그인 로직\n  }\n});\n\nawait statusManager.initialize();\n```\n\n## 메시지 계약\n\n### UI -> Main\n\n- `initialize`\n- `verify-license` (`licenseKey` 포함)\n- `deactivate-license`\n- `check-feature-access` (`featureKey` 선택)\n- `consume-usage` (`amount`, `featureKey` 선택)\n\n`amount`가 남은 수량보다 크면 소비되지 않습니다. 마지막 1회를 소비한 응답도\n`success: true`, `remaining: 0`으로 반환되므로 실행 성공 여부와 다음 차단 상태를 혼동하지 않습니다.\n\n## 플러그인 공통 사용 규칙\n\n모든 플러그인은 기능 실행 직전에 같은 순서를 사용합니다.\n\n```ts\nconst access = await statusManager.canUseFeature('bulk_apply', 1);\nif (!access.allowed) {\n  // access.reason === 'FEATURE_NOT_ALLOWED' 또는 'USAGE_LIMIT_REACHED'\n  return;\n}\n\nconst result = await statusManager.consumeUsage(1, 'bulk_apply');\nif (!result.consumed) {\n  return;\n}\n\nawait runBulkApply();\n```\n\nUI 메시지를 사용하는 경우에는 `check-feature-access`로 미리 확인한 뒤\n`consume-usage`를 실행 직전에 전송합니다. 서버에서 최종 권한을 판정하는 제품은\n동일한 feature key를 서버와 코어 설정에 사용해야 합니다.\n\n### Main -> UI\n\n- `update-plugin-status`\n- `license-verification-result`\n- `license-deactivation-result`\n- `feature-access-result`\n- `usage-consume-result`\n\n## 에러 코드\n\n- `ACTIVATION_LIMIT_REACHED`\n- `INVALID_LICENSE`\n- `PRODUCT_MISMATCH`\n- `NETWORK_ERROR`\n- `STORAGE_ERROR`\n- `SERVER_ERROR`\n- `UNKNOWN_ERROR`\n\n## 운영 권장사항\n\n- 운영 배포에서는 `masterCode`를 사용하지 마세요.\n- 최종 권한 판정은 서버 검증 결과 기준으로 처리하세요.\n- 클라이언트 상태(`paymentStatus`, `usageCount`)는 변조 가능하다고 가정하세요.\n- 모든 플러그인의 리셋 단위·무료 한도·차단 기능은 `policy`에서만 선언하고,\n  플러그인별 임의 카운터를 추가하지 마세요.\n\n## 문서\n\n- 상세 적용 가이드: `docs/PLUGIN_INTEGRATION_KO.md`\n","readmeFilename":"README.md"}