@arslankhan/doc-forge 0.0.0-stage → 0.1.1

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 (246) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +13 -0
  3. package/LICENSING.md +80 -0
  4. package/README.md +547 -2
  5. package/RELEASE.md +50 -0
  6. package/dist/binding-path.d.ts +15 -0
  7. package/dist/binding-path.d.ts.map +1 -0
  8. package/dist/binding-path.js +37 -0
  9. package/dist/binding-path.js.map +1 -0
  10. package/dist/binding.d.ts +91 -0
  11. package/dist/binding.d.ts.map +1 -0
  12. package/dist/binding.js +229 -0
  13. package/dist/binding.js.map +1 -0
  14. package/dist/designer/Canvas.d.ts +51 -0
  15. package/dist/designer/Canvas.d.ts.map +1 -0
  16. package/dist/designer/Canvas.js +188 -0
  17. package/dist/designer/Canvas.js.map +1 -0
  18. package/dist/designer/DocumentDesigner.d.ts +14 -0
  19. package/dist/designer/DocumentDesigner.d.ts.map +1 -0
  20. package/dist/designer/DocumentDesigner.js +351 -0
  21. package/dist/designer/DocumentDesigner.js.map +1 -0
  22. package/dist/designer/HtmlPreview.d.ts +9 -0
  23. package/dist/designer/HtmlPreview.d.ts.map +1 -0
  24. package/dist/designer/HtmlPreview.js +20 -0
  25. package/dist/designer/HtmlPreview.js.map +1 -0
  26. package/dist/designer/ImageBindingFields.d.ts +11 -0
  27. package/dist/designer/ImageBindingFields.d.ts.map +1 -0
  28. package/dist/designer/ImageBindingFields.js +106 -0
  29. package/dist/designer/ImageBindingFields.js.map +1 -0
  30. package/dist/designer/InvoiceFields.d.ts +13 -0
  31. package/dist/designer/InvoiceFields.d.ts.map +1 -0
  32. package/dist/designer/InvoiceFields.js +85 -0
  33. package/dist/designer/InvoiceFields.js.map +1 -0
  34. package/dist/designer/PreviewDataDialog.d.ts +13 -0
  35. package/dist/designer/PreviewDataDialog.d.ts.map +1 -0
  36. package/dist/designer/PreviewDataDialog.js +16 -0
  37. package/dist/designer/PreviewDataDialog.js.map +1 -0
  38. package/dist/designer/PropertiesPanel.d.ts +15 -0
  39. package/dist/designer/PropertiesPanel.d.ts.map +1 -0
  40. package/dist/designer/PropertiesPanel.js +63 -0
  41. package/dist/designer/PropertiesPanel.js.map +1 -0
  42. package/dist/designer/ReportFields.d.ts +14 -0
  43. package/dist/designer/ReportFields.d.ts.map +1 -0
  44. package/dist/designer/ReportFields.js +257 -0
  45. package/dist/designer/ReportFields.js.map +1 -0
  46. package/dist/designer/StyleFields.d.ts +16 -0
  47. package/dist/designer/StyleFields.d.ts.map +1 -0
  48. package/dist/designer/StyleFields.js +138 -0
  49. package/dist/designer/StyleFields.js.map +1 -0
  50. package/dist/designer/TextBindingFields.d.ts +11 -0
  51. package/dist/designer/TextBindingFields.d.ts.map +1 -0
  52. package/dist/designer/TextBindingFields.js +105 -0
  53. package/dist/designer/TextBindingFields.js.map +1 -0
  54. package/dist/designer/Toolbar.d.ts +52 -0
  55. package/dist/designer/Toolbar.d.ts.map +1 -0
  56. package/dist/designer/Toolbar.js +62 -0
  57. package/dist/designer/Toolbar.js.map +1 -0
  58. package/dist/designer/Toolbox.d.ts +8 -0
  59. package/dist/designer/Toolbox.d.ts.map +1 -0
  60. package/dist/designer/Toolbox.js +43 -0
  61. package/dist/designer/Toolbox.js.map +1 -0
  62. package/dist/designer/border-preview.d.ts +15 -0
  63. package/dist/designer/border-preview.d.ts.map +1 -0
  64. package/dist/designer/border-preview.js +34 -0
  65. package/dist/designer/border-preview.js.map +1 -0
  66. package/dist/designer/history.d.ts +13 -0
  67. package/dist/designer/history.d.ts.map +1 -0
  68. package/dist/designer/history.js +51 -0
  69. package/dist/designer/history.js.map +1 -0
  70. package/dist/designer/index.d.ts +5 -0
  71. package/dist/designer/index.d.ts.map +1 -0
  72. package/dist/designer/index.js +3 -0
  73. package/dist/designer/index.js.map +1 -0
  74. package/dist/designer/page-geometry.d.ts +35 -0
  75. package/dist/designer/page-geometry.d.ts.map +1 -0
  76. package/dist/designer/page-geometry.js +123 -0
  77. package/dist/designer/page-geometry.js.map +1 -0
  78. package/dist/designer/styles.d.ts +3 -0
  79. package/dist/designer/styles.d.ts.map +1 -0
  80. package/dist/designer/styles.js +594 -0
  81. package/dist/designer/styles.js.map +1 -0
  82. package/dist/designer/template-edits.d.ts +26 -0
  83. package/dist/designer/template-edits.d.ts.map +1 -0
  84. package/dist/designer/template-edits.js +323 -0
  85. package/dist/designer/template-edits.js.map +1 -0
  86. package/dist/designer/theme.d.ts +31 -0
  87. package/dist/designer/theme.d.ts.map +1 -0
  88. package/dist/designer/theme.js +92 -0
  89. package/dist/designer/theme.js.map +1 -0
  90. package/dist/examples/bound-invoice.d.ts +143 -0
  91. package/dist/examples/bound-invoice.d.ts.map +1 -0
  92. package/dist/examples/bound-invoice.js +99 -0
  93. package/dist/examples/bound-invoice.js.map +1 -0
  94. package/dist/examples/full-invoice-data.d.ts +81 -0
  95. package/dist/examples/full-invoice-data.d.ts.map +1 -0
  96. package/dist/examples/full-invoice-data.js +86 -0
  97. package/dist/examples/full-invoice-data.js.map +1 -0
  98. package/dist/examples/full-invoice.d.ts +402 -0
  99. package/dist/examples/full-invoice.d.ts.map +1 -0
  100. package/dist/examples/full-invoice.js +199 -0
  101. package/dist/examples/full-invoice.js.map +1 -0
  102. package/dist/examples/invoice-data.d.ts +51 -0
  103. package/dist/examples/invoice-data.d.ts.map +1 -0
  104. package/dist/examples/invoice-data.js +51 -0
  105. package/dist/examples/invoice-data.js.map +1 -0
  106. package/dist/examples/invoice.d.ts +90 -0
  107. package/dist/examples/invoice.d.ts.map +1 -0
  108. package/dist/examples/invoice.js +62 -0
  109. package/dist/examples/invoice.js.map +1 -0
  110. package/dist/examples/jobs-report-data.d.ts +84 -0
  111. package/dist/examples/jobs-report-data.d.ts.map +1 -0
  112. package/dist/examples/jobs-report-data.js +79 -0
  113. package/dist/examples/jobs-report-data.js.map +1 -0
  114. package/dist/examples/jobs-report.d.ts +182 -0
  115. package/dist/examples/jobs-report.d.ts.map +1 -0
  116. package/dist/examples/jobs-report.js +96 -0
  117. package/dist/examples/jobs-report.js.map +1 -0
  118. package/dist/index.d.ts +31 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +21 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/invoice/calculate.d.ts +59 -0
  123. package/dist/invoice/calculate.d.ts.map +1 -0
  124. package/dist/invoice/calculate.js +270 -0
  125. package/dist/invoice/calculate.js.map +1 -0
  126. package/dist/invoice/context.d.ts +15 -0
  127. package/dist/invoice/context.d.ts.map +1 -0
  128. package/dist/invoice/context.js +79 -0
  129. package/dist/invoice/context.js.map +1 -0
  130. package/dist/invoice/format.d.ts +10 -0
  131. package/dist/invoice/format.d.ts.map +1 -0
  132. package/dist/invoice/format.js +95 -0
  133. package/dist/invoice/format.js.map +1 -0
  134. package/dist/license/capabilities.d.ts +17 -0
  135. package/dist/license/capabilities.d.ts.map +1 -0
  136. package/dist/license/capabilities.js +46 -0
  137. package/dist/license/capabilities.js.map +1 -0
  138. package/dist/license/client.d.ts +109 -0
  139. package/dist/license/client.d.ts.map +1 -0
  140. package/dist/license/client.js +346 -0
  141. package/dist/license/client.js.map +1 -0
  142. package/dist/license/codec.d.ts +5 -0
  143. package/dist/license/codec.d.ts.map +1 -0
  144. package/dist/license/codec.js +26 -0
  145. package/dist/license/codec.js.map +1 -0
  146. package/dist/license/errors.d.ts +11 -0
  147. package/dist/license/errors.d.ts.map +1 -0
  148. package/dist/license/errors.js +19 -0
  149. package/dist/license/errors.js.map +1 -0
  150. package/dist/license/features.d.ts +20 -0
  151. package/dist/license/features.d.ts.map +1 -0
  152. package/dist/license/features.js +28 -0
  153. package/dist/license/features.js.map +1 -0
  154. package/dist/license/index.d.ts +16 -0
  155. package/dist/license/index.d.ts.map +1 -0
  156. package/dist/license/index.js +9 -0
  157. package/dist/license/index.js.map +1 -0
  158. package/dist/license/provider.d.ts +59 -0
  159. package/dist/license/provider.d.ts.map +1 -0
  160. package/dist/license/provider.js +150 -0
  161. package/dist/license/provider.js.map +1 -0
  162. package/dist/license/redact.d.ts +4 -0
  163. package/dist/license/redact.d.ts.map +1 -0
  164. package/dist/license/redact.js +15 -0
  165. package/dist/license/redact.js.map +1 -0
  166. package/dist/license/store.d.ts +26 -0
  167. package/dist/license/store.d.ts.map +1 -0
  168. package/dist/license/store.js +90 -0
  169. package/dist/license/store.js.map +1 -0
  170. package/dist/license/token.d.ts +45 -0
  171. package/dist/license/token.d.ts.map +1 -0
  172. package/dist/license/token.js +195 -0
  173. package/dist/license/token.js.map +1 -0
  174. package/dist/pdf/browser-blocked.d.ts +12 -0
  175. package/dist/pdf/browser-blocked.d.ts.map +1 -0
  176. package/dist/pdf/browser-blocked.js +25 -0
  177. package/dist/pdf/browser-blocked.js.map +1 -0
  178. package/dist/pdf/browser.d.ts +12 -0
  179. package/dist/pdf/browser.d.ts.map +1 -0
  180. package/dist/pdf/browser.js +69 -0
  181. package/dist/pdf/browser.js.map +1 -0
  182. package/dist/pdf/errors.d.ts +6 -0
  183. package/dist/pdf/errors.d.ts.map +1 -0
  184. package/dist/pdf/errors.js +11 -0
  185. package/dist/pdf/errors.js.map +1 -0
  186. package/dist/pdf/index.d.ts +10 -0
  187. package/dist/pdf/index.d.ts.map +1 -0
  188. package/dist/pdf/index.js +9 -0
  189. package/dist/pdf/index.js.map +1 -0
  190. package/dist/pdf/options.d.ts +143 -0
  191. package/dist/pdf/options.d.ts.map +1 -0
  192. package/dist/pdf/options.js +322 -0
  193. package/dist/pdf/options.js.map +1 -0
  194. package/dist/pdf/render-pdf.d.ts +13 -0
  195. package/dist/pdf/render-pdf.d.ts.map +1 -0
  196. package/dist/pdf/render-pdf.js +195 -0
  197. package/dist/pdf/render-pdf.js.map +1 -0
  198. package/dist/render/appearance.d.ts +25 -0
  199. package/dist/render/appearance.d.ts.map +1 -0
  200. package/dist/render/appearance.js +149 -0
  201. package/dist/render/appearance.js.map +1 -0
  202. package/dist/render/css.d.ts +17 -0
  203. package/dist/render/css.d.ts.map +1 -0
  204. package/dist/render/css.js +170 -0
  205. package/dist/render/css.js.map +1 -0
  206. package/dist/render/errors.d.ts +6 -0
  207. package/dist/render/errors.d.ts.map +1 -0
  208. package/dist/render/errors.js +11 -0
  209. package/dist/render/errors.js.map +1 -0
  210. package/dist/render/escape.d.ts +7 -0
  211. package/dist/render/escape.d.ts.map +1 -0
  212. package/dist/render/escape.js +27 -0
  213. package/dist/render/escape.js.map +1 -0
  214. package/dist/render/image-policy.d.ts +21 -0
  215. package/dist/render/image-policy.d.ts.map +1 -0
  216. package/dist/render/image-policy.js +62 -0
  217. package/dist/render/image-policy.js.map +1 -0
  218. package/dist/render/render-html.d.ts +28 -0
  219. package/dist/render/render-html.d.ts.map +1 -0
  220. package/dist/render/render-html.js +364 -0
  221. package/dist/render/render-html.js.map +1 -0
  222. package/dist/render/render-report.d.ts +23 -0
  223. package/dist/render/render-report.d.ts.map +1 -0
  224. package/dist/render/render-report.js +313 -0
  225. package/dist/render/render-report.js.map +1 -0
  226. package/dist/report/process.d.ts +48 -0
  227. package/dist/report/process.d.ts.map +1 -0
  228. package/dist/report/process.js +347 -0
  229. package/dist/report/process.js.map +1 -0
  230. package/dist/schema.d.ts +30 -0
  231. package/dist/schema.d.ts.map +1 -0
  232. package/dist/schema.js +8 -0
  233. package/dist/schema.js.map +1 -0
  234. package/dist/serialize.d.ts +13 -0
  235. package/dist/serialize.d.ts.map +1 -0
  236. package/dist/serialize.js +42 -0
  237. package/dist/serialize.js.map +1 -0
  238. package/dist/types.d.ts +335 -0
  239. package/dist/types.d.ts.map +1 -0
  240. package/dist/types.js +40 -0
  241. package/dist/types.js.map +1 -0
  242. package/dist/validate.d.ts +15 -0
  243. package/dist/validate.d.ts.map +1 -0
  244. package/dist/validate.js +977 -0
  245. package/dist/validate.js.map +1 -0
  246. package/package.json +105 -4
@@ -0,0 +1,109 @@
1
+ import { type LicenseFeature } from "./features.js";
2
+ import type { LicenseProvider } from "./provider.js";
3
+ import { type LicenseStore } from "./store.js";
4
+ import { type LicensePublicKey } from "./token.js";
5
+ export declare const LICENSE_STATUSES: readonly ["unconfigured", "valid", "expired", "invalid", "revoked", "network_unavailable"];
6
+ export type LicenseStatus = (typeof LICENSE_STATUSES)[number];
7
+ export type LicenseEnforcement = "off" | "enforce";
8
+ export interface LicenseClientConfig {
9
+ /** Product identity required in the signed token. There is no default deployment. */
10
+ productId?: string;
11
+ /** Expected `iss` claim. Required before a token can be accepted. */
12
+ issuer?: string;
13
+ /** Expected `aud` claim. Required before a token can be accepted. */
14
+ audience?: string;
15
+ /** Public verification keys. The private signing key must stay on the license server. */
16
+ keys?: readonly LicensePublicKey[];
17
+ /** When omitted, activation stays unconfigured. */
18
+ provider?: LicenseProvider;
19
+ store?: LicenseStore;
20
+ /**
21
+ * `off` keeps every registered feature available.
22
+ * `enforce` grants a feature only when a verified token includes it.
23
+ * Existing document features are not disabled by the default.
24
+ */
25
+ enforcement?: LicenseEnforcement;
26
+ /** Token ids the host received from a trusted revocation source. */
27
+ revokedTokenIds?: readonly string[];
28
+ /** How long a verified token may be used before refresh is attempted. Default one day. */
29
+ refreshIntervalMs?: number;
30
+ /** Allowed clock difference in seconds. Default 60. */
31
+ clockSkewSeconds?: number;
32
+ /** Passed to the provider as an abort signal. Default 10 seconds. */
33
+ fetchTimeoutMs?: number;
34
+ now?: () => Date;
35
+ }
36
+ export interface LicenseSnapshot {
37
+ status: LicenseStatus;
38
+ configured: boolean;
39
+ enforcement: LicenseEnforcement;
40
+ productId?: string;
41
+ entitlements: readonly LicenseFeature[];
42
+ unrecognizedEntitlements: readonly string[];
43
+ plan?: string;
44
+ subject?: string;
45
+ tokenId?: string;
46
+ /** ISO time, when the token has an expiry. */
47
+ expiresAt?: string;
48
+ verification: "none" | "offline" | "online";
49
+ /** True when the signature checked out. An expired or revoked token can still have a valid signature. */
50
+ signatureValid: boolean;
51
+ /**
52
+ * True when a signature-valid token could not be checked with the license service.
53
+ * Offline verification cannot prove that the license is still unrevoked.
54
+ */
55
+ revocationUnknown: boolean;
56
+ message?: string;
57
+ }
58
+ export interface EntitlementReport {
59
+ enforcement: LicenseEnforcement;
60
+ status: LicenseStatus;
61
+ features: readonly LicenseFeature[];
62
+ }
63
+ export interface LicenseCallOptions {
64
+ client?: LicenseClient;
65
+ }
66
+ export declare class LicenseClient {
67
+ readonly productId: string | undefined;
68
+ readonly issuer: string | undefined;
69
+ readonly audience: string | undefined;
70
+ readonly enforcement: LicenseEnforcement;
71
+ private readonly keys;
72
+ private readonly provider;
73
+ private readonly store;
74
+ private readonly revokedTokenIds;
75
+ private readonly refreshIntervalMs;
76
+ private readonly clockSkewSeconds;
77
+ private readonly fetchTimeoutMs;
78
+ private readonly now;
79
+ constructor(config?: LicenseClientConfig);
80
+ activate(key: string): Promise<LicenseSnapshot>;
81
+ getStatus(): Promise<LicenseSnapshot>;
82
+ getEntitlements(): Promise<EntitlementReport>;
83
+ /**
84
+ * Returns false for names that are not in the feature registry.
85
+ * With enforcement off, every registered feature returns true so existing
86
+ * product behavior stays available until tiers are defined.
87
+ */
88
+ hasFeature(feature: string): Promise<boolean>;
89
+ deactivate(): Promise<LicenseSnapshot>;
90
+ private setupSnapshot;
91
+ private applyServiceResult;
92
+ private keepPreviousOrUnavailable;
93
+ private checkToken;
94
+ private refreshDue;
95
+ private snapshot;
96
+ private readStore;
97
+ private failureSnapshot;
98
+ private providerContext;
99
+ }
100
+ export declare function createLicenseClient(config?: LicenseClientConfig): LicenseClient;
101
+ /** Installs the client used by the module-level license functions. */
102
+ export declare function configureLicense(config?: LicenseClientConfig): LicenseClient;
103
+ export declare function resetLicenseConfiguration(): void;
104
+ export declare function activateLicense(key: string, options?: LicenseCallOptions): Promise<LicenseSnapshot>;
105
+ export declare function getLicenseStatus(options?: LicenseCallOptions): Promise<LicenseSnapshot>;
106
+ export declare function getEntitlements(options?: LicenseCallOptions): Promise<EntitlementReport>;
107
+ export declare function hasFeature(feature: string, options?: LicenseCallOptions): Promise<boolean>;
108
+ export declare function deactivateLicense(options?: LicenseCallOptions): Promise<LicenseSnapshot>;
109
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/license/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,346 @@
1
+ import { LicenseError } from "./errors.js";
2
+ import { LICENSE_FEATURES, isLicenseFeature } from "./features.js";
3
+ import { createMemoryLicenseStore } from "./store.js";
4
+ import { verifyLicenseToken } from "./token.js";
5
+ export const LICENSE_STATUSES = ["unconfigured", "valid", "expired", "invalid", "revoked", "network_unavailable"];
6
+ const DAY_MS = 24 * 60 * 60 * 1000;
7
+ const DEFAULT_TIMEOUT_MS = 10_000;
8
+ const DEFAULT_SKEW_SECONDS = 60;
9
+ const KEY_PATTERN = /^[\x21-\x7E]{8,512}$/u;
10
+ export class LicenseClient {
11
+ productId;
12
+ issuer;
13
+ audience;
14
+ enforcement;
15
+ keys;
16
+ provider;
17
+ store;
18
+ revokedTokenIds;
19
+ refreshIntervalMs;
20
+ clockSkewSeconds;
21
+ fetchTimeoutMs;
22
+ now;
23
+ constructor(config = {}) {
24
+ this.productId = blankToUndefined(config.productId);
25
+ this.issuer = blankToUndefined(config.issuer);
26
+ this.audience = blankToUndefined(config.audience);
27
+ this.keys = config.keys === undefined ? [] : [...config.keys];
28
+ this.provider = config.provider;
29
+ this.store = config.store ?? createMemoryLicenseStore();
30
+ this.enforcement = config.enforcement ?? "off";
31
+ this.revokedTokenIds = config.revokedTokenIds === undefined ? [] : [...config.revokedTokenIds];
32
+ this.refreshIntervalMs = config.refreshIntervalMs ?? DAY_MS;
33
+ this.clockSkewSeconds = config.clockSkewSeconds ?? DEFAULT_SKEW_SECONDS;
34
+ this.fetchTimeoutMs = config.fetchTimeoutMs ?? DEFAULT_TIMEOUT_MS;
35
+ this.now = config.now ?? (() => new Date());
36
+ if (this.refreshIntervalMs < 0 || this.clockSkewSeconds < 0 || this.fetchTimeoutMs < 0) {
37
+ throw new LicenseError("invalid_input", "License timing options cannot be negative.");
38
+ }
39
+ }
40
+ async activate(key) {
41
+ const licenseKey = validateLicenseKey(key);
42
+ const setup = this.setupSnapshot();
43
+ if (setup) {
44
+ return setup;
45
+ }
46
+ if (!this.provider) {
47
+ return this.snapshot("unconfigured", {
48
+ message: "No license provider is configured. Activation has not been performed.",
49
+ });
50
+ }
51
+ try {
52
+ const result = await this.provider.activate({ key: licenseKey, productId: this.productId ?? "" }, this.providerContext());
53
+ return await this.applyServiceResult(result);
54
+ }
55
+ catch (error) {
56
+ return this.failureSnapshot(error);
57
+ }
58
+ }
59
+ async getStatus() {
60
+ const setup = this.setupSnapshot();
61
+ if (setup) {
62
+ return setup;
63
+ }
64
+ const stored = await this.readStore();
65
+ if (!stored) {
66
+ return this.snapshot("unconfigured", { message: "No license is activated." });
67
+ }
68
+ const checked = await this.checkToken(stored.token);
69
+ if (checked.snapshot.status !== "valid") {
70
+ return checked.snapshot;
71
+ }
72
+ if (!this.refreshDue(stored) || !this.provider?.refresh) {
73
+ return this.snapshot("valid", {
74
+ claims: checked.claims,
75
+ verification: "offline",
76
+ signatureValid: true,
77
+ revocationUnknown: true,
78
+ message: "The license token signature is valid. Revocation status has not been refreshed.",
79
+ });
80
+ }
81
+ try {
82
+ const result = await this.provider.refresh({ token: stored.token, productId: this.productId ?? "" }, this.providerContext());
83
+ return await this.applyServiceResult(result, stored.token);
84
+ }
85
+ catch (error) {
86
+ const failure = this.failureSnapshot(error);
87
+ if (failure.status !== "network_unavailable") {
88
+ return failure;
89
+ }
90
+ return this.snapshot("network_unavailable", {
91
+ claims: checked.claims,
92
+ verification: "offline",
93
+ signatureValid: true,
94
+ revocationUnknown: true,
95
+ message: "The license service could not be reached. The saved token still has a valid signature.",
96
+ });
97
+ }
98
+ }
99
+ async getEntitlements() {
100
+ const snapshot = await this.getStatus();
101
+ if (this.enforcement !== "enforce") {
102
+ return { enforcement: "off", status: snapshot.status, features: [...LICENSE_FEATURES] };
103
+ }
104
+ const trusted = snapshot.status === "valid" || (snapshot.status === "network_unavailable" && snapshot.signatureValid);
105
+ return {
106
+ enforcement: "enforce",
107
+ status: snapshot.status,
108
+ features: trusted ? [...snapshot.entitlements] : [],
109
+ };
110
+ }
111
+ /**
112
+ * Returns false for names that are not in the feature registry.
113
+ * With enforcement off, every registered feature returns true so existing
114
+ * product behavior stays available until tiers are defined.
115
+ */
116
+ async hasFeature(feature) {
117
+ if (!isLicenseFeature(feature)) {
118
+ return false;
119
+ }
120
+ if (this.enforcement !== "enforce") {
121
+ return true;
122
+ }
123
+ const report = await this.getEntitlements();
124
+ return report.features.includes(feature);
125
+ }
126
+ async deactivate() {
127
+ const setup = this.setupSnapshot();
128
+ if (setup && !this.provider) {
129
+ return setup;
130
+ }
131
+ const stored = await this.readStore();
132
+ if (this.provider?.deactivate) {
133
+ try {
134
+ await this.provider.deactivate({ token: stored?.token, productId: this.productId ?? "" }, this.providerContext());
135
+ }
136
+ catch (error) {
137
+ return this.failureSnapshot(error, "The license service could not be reached. This installation was not deactivated.");
138
+ }
139
+ }
140
+ await this.store.clear();
141
+ if (setup) {
142
+ return setup;
143
+ }
144
+ return this.snapshot("unconfigured", { message: "No license is activated on this installation." });
145
+ }
146
+ setupSnapshot() {
147
+ if (this.productId && this.issuer && this.audience && this.keys.length > 0) {
148
+ return undefined;
149
+ }
150
+ return this.snapshot("unconfigured", {
151
+ message: "License verification is unconfigured. Set the product, issuer, audience, and public key before activation.",
152
+ });
153
+ }
154
+ async applyServiceResult(result, previousToken) {
155
+ if (result.status === "unconfigured") {
156
+ return this.snapshot("unconfigured", {
157
+ message: result.message ?? "License activation is unconfigured.",
158
+ });
159
+ }
160
+ if (result.status === "network_unavailable") {
161
+ return this.keepPreviousOrUnavailable(previousToken, result.message);
162
+ }
163
+ if (result.status === "revoked") {
164
+ await this.store.clear();
165
+ return this.snapshot("revoked", { message: result.message ?? "The license has been revoked." });
166
+ }
167
+ if (result.status === "expired") {
168
+ await this.store.clear();
169
+ return this.snapshot("expired", { message: result.message ?? "The license has expired." });
170
+ }
171
+ if (result.status !== "valid" || result.token === undefined) {
172
+ return this.snapshot("invalid", { message: result.message ?? "The license was rejected." });
173
+ }
174
+ const checked = await this.checkToken(result.token);
175
+ if (checked.snapshot.status !== "valid" || !checked.claims) {
176
+ return checked.snapshot;
177
+ }
178
+ await this.store.write({ token: result.token, lastVerifiedAt: this.now().toISOString() });
179
+ return this.snapshot("valid", {
180
+ claims: checked.claims,
181
+ verification: "online",
182
+ signatureValid: true,
183
+ revocationUnknown: false,
184
+ message: result.message,
185
+ });
186
+ }
187
+ async keepPreviousOrUnavailable(previousToken, message) {
188
+ if (previousToken) {
189
+ const checked = await this.checkToken(previousToken);
190
+ if (checked.snapshot.status === "valid" && checked.claims) {
191
+ return this.snapshot("network_unavailable", {
192
+ claims: checked.claims,
193
+ verification: "offline",
194
+ signatureValid: true,
195
+ revocationUnknown: true,
196
+ message: message ?? "The license service could not be reached. The saved token still has a valid signature.",
197
+ });
198
+ }
199
+ }
200
+ return this.snapshot("network_unavailable", {
201
+ message: message ?? "The license service could not be reached. The license was not marked invalid.",
202
+ });
203
+ }
204
+ async checkToken(token) {
205
+ const verified = await verifyLicenseToken(token, {
206
+ productId: this.productId ?? "",
207
+ issuer: this.issuer ?? "",
208
+ audience: this.audience ?? "",
209
+ keys: this.keys,
210
+ now: this.now(),
211
+ clockSkewSeconds: this.clockSkewSeconds,
212
+ revokedTokenIds: this.revokedTokenIds,
213
+ });
214
+ if (verified.ok) {
215
+ return {
216
+ claims: verified.claims,
217
+ snapshot: this.snapshot("valid", { claims: verified.claims, verification: "offline", signatureValid: true, revocationUnknown: true }),
218
+ };
219
+ }
220
+ if (verified.reason === "expired") {
221
+ return {
222
+ claims: verified.claims,
223
+ snapshot: this.snapshot("expired", {
224
+ claims: verified.claims,
225
+ verification: "offline",
226
+ signatureValid: true,
227
+ message: verified.message,
228
+ }),
229
+ };
230
+ }
231
+ if (verified.reason === "revoked") {
232
+ return {
233
+ claims: verified.claims,
234
+ snapshot: this.snapshot("revoked", {
235
+ claims: verified.claims,
236
+ verification: "offline",
237
+ signatureValid: true,
238
+ message: verified.message,
239
+ }),
240
+ };
241
+ }
242
+ return { snapshot: this.snapshot("invalid", { message: verified.message }) };
243
+ }
244
+ refreshDue(stored) {
245
+ if (!stored.lastVerifiedAt) {
246
+ return true;
247
+ }
248
+ const verifiedAt = Date.parse(stored.lastVerifiedAt);
249
+ if (Number.isNaN(verifiedAt)) {
250
+ return true;
251
+ }
252
+ return this.now().getTime() - verifiedAt >= this.refreshIntervalMs;
253
+ }
254
+ snapshot(status, details = {}) {
255
+ const claims = details.claims;
256
+ return {
257
+ status,
258
+ configured: Boolean(this.productId && this.issuer && this.audience && this.keys.length > 0),
259
+ enforcement: this.enforcement,
260
+ productId: this.productId,
261
+ entitlements: claims ? [...claims.entitlements] : [],
262
+ unrecognizedEntitlements: claims ? [...claims.unrecognizedEntitlements] : [],
263
+ plan: claims?.plan,
264
+ subject: claims?.subject,
265
+ tokenId: claims?.tokenId,
266
+ expiresAt: claims ? new Date(claims.expiresAt * 1000).toISOString() : undefined,
267
+ verification: details.verification ?? "none",
268
+ signatureValid: details.signatureValid ?? false,
269
+ revocationUnknown: details.revocationUnknown ?? false,
270
+ message: details.message,
271
+ };
272
+ }
273
+ async readStore() {
274
+ try {
275
+ const stored = await this.store.read();
276
+ if (!stored || stored.token.length === 0) {
277
+ return null;
278
+ }
279
+ return stored;
280
+ }
281
+ catch (error) {
282
+ if (error instanceof LicenseError) {
283
+ throw error;
284
+ }
285
+ throw new LicenseError("persistence", "The license store could not be read.");
286
+ }
287
+ }
288
+ failureSnapshot(error, fallback = "The license service could not be reached. The license was not marked invalid.") {
289
+ if (error instanceof LicenseError && (error.code === "invalid_input" || error.code === "persistence")) {
290
+ throw error;
291
+ }
292
+ return this.snapshot("network_unavailable", { message: fallback });
293
+ }
294
+ providerContext() {
295
+ const signal = typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function" ? AbortSignal.timeout(this.fetchTimeoutMs) : undefined;
296
+ return { productId: this.productId ?? "", signal };
297
+ }
298
+ }
299
+ export function createLicenseClient(config = {}) {
300
+ return new LicenseClient(config);
301
+ }
302
+ let configured;
303
+ /** Installs the client used by the module-level license functions. */
304
+ export function configureLicense(config = {}) {
305
+ configured = createLicenseClient(config);
306
+ return configured;
307
+ }
308
+ export function resetLicenseConfiguration() {
309
+ configured = undefined;
310
+ }
311
+ function activeClient(options) {
312
+ return options?.client ?? configured ?? createLicenseClient();
313
+ }
314
+ export async function activateLicense(key, options) {
315
+ return activeClient(options).activate(key);
316
+ }
317
+ export async function getLicenseStatus(options) {
318
+ return activeClient(options).getStatus();
319
+ }
320
+ export async function getEntitlements(options) {
321
+ return activeClient(options).getEntitlements();
322
+ }
323
+ export async function hasFeature(feature, options) {
324
+ return activeClient(options).hasFeature(feature);
325
+ }
326
+ export async function deactivateLicense(options) {
327
+ return activeClient(options).deactivate();
328
+ }
329
+ function validateLicenseKey(key) {
330
+ if (typeof key !== "string") {
331
+ throw new LicenseError("invalid_input", "License key must be a string.");
332
+ }
333
+ const trimmed = key.trim();
334
+ if (!KEY_PATTERN.test(trimmed)) {
335
+ throw new LicenseError("invalid_input", "License key must be 8 to 512 printable characters without spaces.");
336
+ }
337
+ return trimmed;
338
+ }
339
+ function blankToUndefined(value) {
340
+ if (value === undefined) {
341
+ return undefined;
342
+ }
343
+ const trimmed = value.trim();
344
+ return trimmed.length > 0 ? trimmed : undefined;
345
+ }
346
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/license/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function utf8Bytes(value: string): Uint8Array;
2
+ export declare function utf8String(bytes: Uint8Array): string;
3
+ export declare function encodeBase64Url(bytes: Uint8Array): string;
4
+ export declare function decodeBase64Url(value: string): Uint8Array;
5
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/license/codec.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAMzD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAWzD"}
@@ -0,0 +1,26 @@
1
+ export function utf8Bytes(value) {
2
+ return new TextEncoder().encode(value);
3
+ }
4
+ export function utf8String(bytes) {
5
+ return new TextDecoder("utf-8", { fatal: true }).decode(bytes);
6
+ }
7
+ export function encodeBase64Url(bytes) {
8
+ let binary = "";
9
+ for (const byte of bytes) {
10
+ binary += String.fromCharCode(byte);
11
+ }
12
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/u, "");
13
+ }
14
+ export function decodeBase64Url(value) {
15
+ if (!/^[A-Za-z0-9_-]+$/u.test(value)) {
16
+ throw new Error("License token segment is not base64url.");
17
+ }
18
+ const padded = value.replaceAll("-", "+").replaceAll("_", "/") + "=".repeat((4 - (value.length % 4)) % 4);
19
+ const binary = atob(padded);
20
+ const bytes = new Uint8Array(binary.length);
21
+ for (let index = 0; index < binary.length; index += 1) {
22
+ bytes[index] = binary.charCodeAt(index);
23
+ }
24
+ return bytes;
25
+ }
26
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/license/codec.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type LicenseErrorCode = "invalid_input" | "persistence" | "unavailable_runtime";
2
+ /** Raised for a caller mistake or a runtime that cannot store or verify a license. A rejected license is a status, not this error. */
3
+ export declare class LicenseError extends Error {
4
+ readonly code: LicenseErrorCode;
5
+ constructor(code: LicenseErrorCode, message: string);
6
+ }
7
+ /** The license service could not be reached. Callers must not treat this as an invalid license. */
8
+ export declare class LicenseNetworkError extends LicenseError {
9
+ constructor(message?: string);
10
+ }
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/license/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,aAAa,GAAG,qBAAqB,CAAC;AAEvF,sIAAsI;AACtI,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;gBAEpB,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM;CAMpD;AAED,mGAAmG;AACnG,qBAAa,mBAAoB,SAAQ,YAAY;gBACvC,OAAO,SAA8C;CAKlE"}
@@ -0,0 +1,19 @@
1
+ /** Raised for a caller mistake or a runtime that cannot store or verify a license. A rejected license is a status, not this error. */
2
+ export class LicenseError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.name = "LicenseError";
7
+ this.code = code;
8
+ Object.setPrototypeOf(this, new.target.prototype);
9
+ }
10
+ }
11
+ /** The license service could not be reached. Callers must not treat this as an invalid license. */
12
+ export class LicenseNetworkError extends LicenseError {
13
+ constructor(message = "The license service could not be reached.") {
14
+ super("unavailable_runtime", message);
15
+ this.name = "LicenseNetworkError";
16
+ Object.setPrototypeOf(this, new.target.prototype);
17
+ }
18
+ }
19
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/license/errors.ts"],"names":[],"mappings":"AAEA,sIAAsI;AACtI,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAmB;IAEhC,YAAY,IAAsB,EAAE,OAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,mGAAmG;AACnG,MAAM,OAAO,mBAAoB,SAAQ,YAAY;IACnD,YAAY,OAAO,GAAG,2CAA2C;QAC/D,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Premium features the license server may grant.
3
+ * The names are stable. Which plan includes which feature is decided by the
4
+ * host that signs the token, not by a hard-coded plan table in this package.
5
+ * Checking a feature does not turn the feature off. Enforcement stays off
6
+ * until the host sets `enforcement` to `"enforce"`.
7
+ */
8
+ export declare const LICENSE_FEATURES: readonly ["report.grouping", "report.aggregates", "designer.premium", "styling.premium", "pdf.export", "tables.advanced", "support.commercial"];
9
+ export type LicenseFeature = (typeof LICENSE_FEATURES)[number];
10
+ export declare function isLicenseFeature(value: string): value is LicenseFeature;
11
+ /**
12
+ * Plan ids mapped to features. The license server should call this when it
13
+ * builds a token, then put the returned names in the signed `entitlements`
14
+ * claim. The client does not apply this map, because a browser can change it.
15
+ */
16
+ export interface LicensePlanMap {
17
+ readonly [planId: string]: readonly LicenseFeature[];
18
+ }
19
+ export declare function entitlementsForPlan(planId: string, plans: LicensePlanMap): readonly LicenseFeature[];
20
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/license/features.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,iJAQnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAI/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,cAAc,CAEvE;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAAC;CACtD;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS,cAAc,EAAE,CAMpG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Premium features the license server may grant.
3
+ * The names are stable. Which plan includes which feature is decided by the
4
+ * host that signs the token, not by a hard-coded plan table in this package.
5
+ * Checking a feature does not turn the feature off. Enforcement stays off
6
+ * until the host sets `enforcement` to `"enforce"`.
7
+ */
8
+ export const LICENSE_FEATURES = [
9
+ "report.grouping",
10
+ "report.aggregates",
11
+ "designer.premium",
12
+ "styling.premium",
13
+ "pdf.export",
14
+ "tables.advanced",
15
+ "support.commercial",
16
+ ];
17
+ const FEATURE_SET = new Set(LICENSE_FEATURES);
18
+ export function isLicenseFeature(value) {
19
+ return FEATURE_SET.has(value);
20
+ }
21
+ export function entitlementsForPlan(planId, plans) {
22
+ const features = plans[planId];
23
+ if (!features) {
24
+ return [];
25
+ }
26
+ return features.filter((feature) => isLicenseFeature(feature));
27
+ }
28
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/license/features.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,iBAAiB;IACjB,mBAAmB;IACnB,kBAAkB;IAClB,iBAAiB;IACjB,YAAY;IACZ,iBAAiB;IACjB,oBAAoB;CACZ,CAAC;AAIX,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAEnE,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAWD,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,KAAqB;IACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,16 @@
1
+ export { inspectDocumentCapabilities } from "./capabilities.js";
2
+ export type { DocumentCapabilities } from "./capabilities.js";
3
+ export { activateLicense, configureLicense, createLicenseClient, deactivateLicense, getEntitlements, getLicenseStatus, hasFeature, LicenseClient, LICENSE_STATUSES, resetLicenseConfiguration, } from "./client.js";
4
+ export type { EntitlementReport, LicenseCallOptions, LicenseClientConfig, LicenseEnforcement, LicenseSnapshot, LicenseStatus, } from "./client.js";
5
+ export { LicenseError, LicenseNetworkError } from "./errors.js";
6
+ export type { LicenseErrorCode } from "./errors.js";
7
+ export { entitlementsForPlan, isLicenseFeature, LICENSE_FEATURES } from "./features.js";
8
+ export type { LicenseFeature, LicensePlanMap } from "./features.js";
9
+ export { createHttpLicenseProvider, createMockLicenseProvider } from "./provider.js";
10
+ export type { HttpLicenseProviderOptions, LicenseProvider, LicenseProviderContext, LicenseServiceResult, LicenseServiceStatus, MockLicenseHandlers, } from "./provider.js";
11
+ export { redactSecret } from "./redact.js";
12
+ export { createBrowserLicenseStore, createMemoryLicenseStore, LICENSE_STORAGE_KEY } from "./store.js";
13
+ export type { LicenseStore, StoredLicense } from "./store.js";
14
+ export { verifyLicenseToken } from "./token.js";
15
+ export type { LicenseClaims, LicensePublicKey, TokenVerification } from "./token.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/license/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxF,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACrF,YAAY,EACV,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtG,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}