@vritti/api-sdk 0.2.10 → 0.3.2

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 (55) hide show
  1. package/dist/cache.cjs +252 -0
  2. package/dist/cache.cjs.map +1 -0
  3. package/dist/cache.d.cts +25 -0
  4. package/dist/cache.d.ts +25 -0
  5. package/dist/cache.js +214 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/cache.service-_SuJIcNA.d.cts +20 -0
  8. package/dist/cache.service-_SuJIcNA.d.ts +20 -0
  9. package/dist/catalog-resolver.cjs +364 -0
  10. package/dist/catalog-resolver.cjs.map +1 -0
  11. package/dist/catalog-resolver.d.cts +109 -0
  12. package/dist/catalog-resolver.d.ts +109 -0
  13. package/dist/catalog-resolver.js +330 -0
  14. package/dist/catalog-resolver.js.map +1 -0
  15. package/dist/email.cjs +691 -0
  16. package/dist/email.cjs.map +1 -0
  17. package/dist/email.d.cts +35 -0
  18. package/dist/email.d.ts +35 -0
  19. package/dist/email.js +665 -0
  20. package/dist/email.js.map +1 -0
  21. package/dist/fastify-augmentation-CQPBNS5a.d.cts +105 -0
  22. package/dist/fastify-augmentation-CQPBNS5a.d.ts +105 -0
  23. package/dist/icons.cjs +13803 -0
  24. package/dist/icons.cjs.map +1 -0
  25. package/dist/icons.d.cts +8 -0
  26. package/dist/icons.d.ts +8 -0
  27. package/dist/icons.js +13778 -0
  28. package/dist/icons.js.map +1 -0
  29. package/dist/index.cjs +742 -1367
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.d.cts +103 -181
  32. package/dist/index.d.ts +103 -181
  33. package/dist/index.js +601 -1233
  34. package/dist/index.js.map +1 -1
  35. package/dist/license.cjs +104 -0
  36. package/dist/license.cjs.map +1 -0
  37. package/dist/license.d.cts +32 -0
  38. package/dist/license.d.ts +32 -0
  39. package/dist/license.js +75 -0
  40. package/dist/license.js.map +1 -0
  41. package/dist/money.cjs +93 -6
  42. package/dist/money.cjs.map +1 -1
  43. package/dist/money.d.cts +13 -1
  44. package/dist/money.d.ts +13 -1
  45. package/dist/money.js +115 -3
  46. package/dist/money.js.map +1 -1
  47. package/dist/nats.cjs +196 -179
  48. package/dist/nats.cjs.map +1 -1
  49. package/dist/nats.d.cts +13 -11
  50. package/dist/nats.d.ts +13 -11
  51. package/dist/nats.js +172 -155
  52. package/dist/nats.js.map +1 -1
  53. package/dist/types-DQRwj5rr.d.cts +113 -0
  54. package/dist/types-DQRwj5rr.d.ts +113 -0
  55. package/package.json +55 -1
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/license/index.ts
22
+ var license_exports = {};
23
+ __export(license_exports, {
24
+ canonicalStringify: () => canonicalStringify,
25
+ generateLicenseKeyPair: () => generateLicenseKeyPair,
26
+ hashSnapshot: () => hashSnapshot,
27
+ signDocument: () => signDocument,
28
+ verifyDocument: () => verifyDocument
29
+ });
30
+ module.exports = __toCommonJS(license_exports);
31
+
32
+ // src/license/canonical.ts
33
+ var import_node_crypto = require("crypto");
34
+ function canonicalStringify(value) {
35
+ return JSON.stringify(sortKeysDeep(value));
36
+ }
37
+ __name(canonicalStringify, "canonicalStringify");
38
+ function hashSnapshot(value) {
39
+ return (0, import_node_crypto.createHash)("sha256").update(canonicalStringify(value), "utf8").digest("hex");
40
+ }
41
+ __name(hashSnapshot, "hashSnapshot");
42
+ function sortKeysDeep(value) {
43
+ if (Array.isArray(value)) return value.map(sortKeysDeep);
44
+ if (value !== null && typeof value === "object") {
45
+ const record = value;
46
+ const sorted = {};
47
+ for (const key of Object.keys(record).sort()) sorted[key] = sortKeysDeep(record[key]);
48
+ return sorted;
49
+ }
50
+ return value;
51
+ }
52
+ __name(sortKeysDeep, "sortKeysDeep");
53
+
54
+ // src/license/signing.ts
55
+ var import_node_crypto2 = require("crypto");
56
+ function generateLicenseKeyPair() {
57
+ const { privateKey, publicKey } = (0, import_node_crypto2.generateKeyPairSync)("ed25519");
58
+ return {
59
+ privateKey: privateKey.export({
60
+ type: "pkcs8",
61
+ format: "der"
62
+ }).toString("base64"),
63
+ publicKey: publicKey.export({
64
+ type: "spki",
65
+ format: "der"
66
+ }).toString("base64")
67
+ };
68
+ }
69
+ __name(generateLicenseKeyPair, "generateLicenseKeyPair");
70
+ function signDocument(payload, privateKeyBase64) {
71
+ const key = (0, import_node_crypto2.createPrivateKey)({
72
+ key: Buffer.from(privateKeyBase64, "base64"),
73
+ format: "der",
74
+ type: "pkcs8"
75
+ });
76
+ const signature = (0, import_node_crypto2.sign)(null, Buffer.from(canonicalStringify(payload), "utf8"), key).toString("base64");
77
+ return {
78
+ payload,
79
+ signature
80
+ };
81
+ }
82
+ __name(signDocument, "signDocument");
83
+ function verifyDocument(doc, publicKeyBase64) {
84
+ try {
85
+ const key = (0, import_node_crypto2.createPublicKey)({
86
+ key: Buffer.from(publicKeyBase64, "base64"),
87
+ format: "der",
88
+ type: "spki"
89
+ });
90
+ return (0, import_node_crypto2.verify)(null, Buffer.from(canonicalStringify(doc.payload), "utf8"), key, Buffer.from(doc.signature, "base64"));
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+ __name(verifyDocument, "verifyDocument");
96
+ // Annotate the CommonJS export names for ESM import in node:
97
+ 0 && (module.exports = {
98
+ canonicalStringify,
99
+ generateLicenseKeyPair,
100
+ hashSnapshot,
101
+ signDocument,
102
+ verifyDocument
103
+ });
104
+ //# sourceMappingURL=license.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/license/index.ts","../src/license/canonical.ts","../src/license/signing.ts"],"sourcesContent":["// License module — Ed25519-signed catalog + entitlement documents over canonical JSON\nexport { canonicalStringify, hashSnapshot } from './canonical';\nexport { generateLicenseKeyPair, signDocument, verifyDocument } from './signing';\nexport type { CatalogLicense, OrgEntitlement, SignedDocument } from './types';\n","import { createHash } from 'node:crypto';\n\n// Serializes a value as deterministic JSON: object keys recursively sorted, arrays keep their order\nexport function canonicalStringify(value: unknown): string {\n return JSON.stringify(sortKeysDeep(value));\n}\n\n// Computes the sha256 hex digest of a value's canonical JSON\nexport function hashSnapshot(value: unknown): string {\n return createHash('sha256').update(canonicalStringify(value), 'utf8').digest('hex');\n}\n\n// Recursively rebuilds objects with sorted keys so JSON.stringify output is order-independent\nfunction sortKeysDeep(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeysDeep);\n if (value !== null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort()) sorted[key] = sortKeysDeep(record[key]);\n return sorted;\n }\n return value;\n}\n","import { createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from 'node:crypto';\nimport { canonicalStringify } from './canonical';\nimport type { SignedDocument } from './types';\n\n// Generates an Ed25519 key pair as base64 DER strings (pkcs8 private / spki public)\nexport function generateLicenseKeyPair(): { privateKey: string; publicKey: string } {\n const { privateKey, publicKey } = generateKeyPairSync('ed25519');\n return {\n privateKey: privateKey.export({ type: 'pkcs8', format: 'der' }).toString('base64'),\n publicKey: publicKey.export({ type: 'spki', format: 'der' }).toString('base64'),\n };\n}\n\n// Signs a payload's canonical JSON with an Ed25519 private key (base64 pkcs8 DER)\nexport function signDocument<T>(payload: T, privateKeyBase64: string): SignedDocument<T> {\n const key = createPrivateKey({ key: Buffer.from(privateKeyBase64, 'base64'), format: 'der', type: 'pkcs8' });\n const signature = sign(null, Buffer.from(canonicalStringify(payload), 'utf8'), key).toString('base64');\n return { payload, signature };\n}\n\n// Verifies a signed document against an Ed25519 public key (base64 spki DER); malformed input ⇒ false\nexport function verifyDocument<T>(doc: SignedDocument<T>, publicKeyBase64: string): boolean {\n try {\n const key = createPublicKey({ key: Buffer.from(publicKeyBase64, 'base64'), format: 'der', type: 'spki' });\n return verify(\n null,\n Buffer.from(canonicalStringify(doc.payload), 'utf8'),\n key,\n Buffer.from(doc.signature, 'base64'),\n );\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;ACAA,yBAA2B;AAGpB,SAASA,mBAAmBC,OAAc;AAC/C,SAAOC,KAAKC,UAAUC,aAAaH,KAAAA,CAAAA;AACrC;AAFgBD;AAKT,SAASK,aAAaJ,OAAc;AACzC,aAAOK,+BAAW,QAAA,EAAUC,OAAOP,mBAAmBC,KAAAA,GAAQ,MAAA,EAAQO,OAAO,KAAA;AAC/E;AAFgBH;AAKhB,SAASD,aAAaH,OAAc;AAClC,MAAIQ,MAAMC,QAAQT,KAAAA,EAAQ,QAAOA,MAAMU,IAAIP,YAAAA;AAC3C,MAAIH,UAAU,QAAQ,OAAOA,UAAU,UAAU;AAC/C,UAAMW,SAASX;AACf,UAAMY,SAAkC,CAAC;AACzC,eAAWC,OAAOC,OAAOC,KAAKJ,MAAAA,EAAQK,KAAI,EAAIJ,QAAOC,GAAAA,IAAOV,aAAaQ,OAAOE,GAAAA,CAAI;AACpF,WAAOD;EACT;AACA,SAAOZ;AACT;AATSG;;;ACbT,IAAAc,sBAAqF;AAK9E,SAASC,yBAAAA;AACd,QAAM,EAAEC,YAAYC,UAAS,QAAKC,yCAAoB,SAAA;AACtD,SAAO;IACLF,YAAYA,WAAWG,OAAO;MAAEC,MAAM;MAASC,QAAQ;IAAM,CAAA,EAAGC,SAAS,QAAA;IACzEL,WAAWA,UAAUE,OAAO;MAAEC,MAAM;MAAQC,QAAQ;IAAM,CAAA,EAAGC,SAAS,QAAA;EACxE;AACF;AANgBP;AAST,SAASQ,aAAgBC,SAAYC,kBAAwB;AAClE,QAAMC,UAAMC,sCAAiB;IAAED,KAAKE,OAAOC,KAAKJ,kBAAkB,QAAA;IAAWJ,QAAQ;IAAOD,MAAM;EAAQ,CAAA;AAC1G,QAAMU,gBAAYC,0BAAK,MAAMH,OAAOC,KAAKG,mBAAmBR,OAAAA,GAAU,MAAA,GAASE,GAAAA,EAAKJ,SAAS,QAAA;AAC7F,SAAO;IAAEE;IAASM;EAAU;AAC9B;AAJgBP;AAOT,SAASU,eAAkBC,KAAwBC,iBAAuB;AAC/E,MAAI;AACF,UAAMT,UAAMU,qCAAgB;MAAEV,KAAKE,OAAOC,KAAKM,iBAAiB,QAAA;MAAWd,QAAQ;MAAOD,MAAM;IAAO,CAAA;AACvG,eAAOiB,4BACL,MACAT,OAAOC,KAAKG,mBAAmBE,IAAIV,OAAO,GAAG,MAAA,GAC7CE,KACAE,OAAOC,KAAKK,IAAIJ,WAAW,QAAA,CAAA;EAE/B,QAAQ;AACN,WAAO;EACT;AACF;AAZgBG;","names":["canonicalStringify","value","JSON","stringify","sortKeysDeep","hashSnapshot","createHash","update","digest","Array","isArray","map","record","sorted","key","Object","keys","sort","import_node_crypto","generateLicenseKeyPair","privateKey","publicKey","generateKeyPairSync","export","type","format","toString","signDocument","payload","privateKeyBase64","key","createPrivateKey","Buffer","from","signature","sign","canonicalStringify","verifyDocument","doc","publicKeyBase64","createPublicKey","verify"]}
@@ -0,0 +1,32 @@
1
+ import { V as VersionSnapshot } from './types-DQRwj5rr.cjs';
2
+
3
+ declare function canonicalStringify(value: unknown): string;
4
+ declare function hashSnapshot(value: unknown): string;
5
+
6
+ interface SignedDocument<T> {
7
+ payload: T;
8
+ signature: string;
9
+ }
10
+ interface CatalogLicense {
11
+ deploymentId: string;
12
+ version: string;
13
+ hash: string;
14
+ snapshot: VersionSnapshot;
15
+ issuedAt: string;
16
+ }
17
+ interface OrgEntitlement {
18
+ deploymentId: string;
19
+ orgId: string;
20
+ planCode: string;
21
+ businessCode: string;
22
+ issuedAt: string;
23
+ }
24
+
25
+ declare function generateLicenseKeyPair(): {
26
+ privateKey: string;
27
+ publicKey: string;
28
+ };
29
+ declare function signDocument<T>(payload: T, privateKeyBase64: string): SignedDocument<T>;
30
+ declare function verifyDocument<T>(doc: SignedDocument<T>, publicKeyBase64: string): boolean;
31
+
32
+ export { type CatalogLicense, type OrgEntitlement, type SignedDocument, canonicalStringify, generateLicenseKeyPair, hashSnapshot, signDocument, verifyDocument };
@@ -0,0 +1,32 @@
1
+ import { V as VersionSnapshot } from './types-DQRwj5rr.js';
2
+
3
+ declare function canonicalStringify(value: unknown): string;
4
+ declare function hashSnapshot(value: unknown): string;
5
+
6
+ interface SignedDocument<T> {
7
+ payload: T;
8
+ signature: string;
9
+ }
10
+ interface CatalogLicense {
11
+ deploymentId: string;
12
+ version: string;
13
+ hash: string;
14
+ snapshot: VersionSnapshot;
15
+ issuedAt: string;
16
+ }
17
+ interface OrgEntitlement {
18
+ deploymentId: string;
19
+ orgId: string;
20
+ planCode: string;
21
+ businessCode: string;
22
+ issuedAt: string;
23
+ }
24
+
25
+ declare function generateLicenseKeyPair(): {
26
+ privateKey: string;
27
+ publicKey: string;
28
+ };
29
+ declare function signDocument<T>(payload: T, privateKeyBase64: string): SignedDocument<T>;
30
+ declare function verifyDocument<T>(doc: SignedDocument<T>, publicKeyBase64: string): boolean;
31
+
32
+ export { type CatalogLicense, type OrgEntitlement, type SignedDocument, canonicalStringify, generateLicenseKeyPair, hashSnapshot, signDocument, verifyDocument };
@@ -0,0 +1,75 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/license/canonical.ts
5
+ import { createHash } from "crypto";
6
+ function canonicalStringify(value) {
7
+ return JSON.stringify(sortKeysDeep(value));
8
+ }
9
+ __name(canonicalStringify, "canonicalStringify");
10
+ function hashSnapshot(value) {
11
+ return createHash("sha256").update(canonicalStringify(value), "utf8").digest("hex");
12
+ }
13
+ __name(hashSnapshot, "hashSnapshot");
14
+ function sortKeysDeep(value) {
15
+ if (Array.isArray(value)) return value.map(sortKeysDeep);
16
+ if (value !== null && typeof value === "object") {
17
+ const record = value;
18
+ const sorted = {};
19
+ for (const key of Object.keys(record).sort()) sorted[key] = sortKeysDeep(record[key]);
20
+ return sorted;
21
+ }
22
+ return value;
23
+ }
24
+ __name(sortKeysDeep, "sortKeysDeep");
25
+
26
+ // src/license/signing.ts
27
+ import { createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from "crypto";
28
+ function generateLicenseKeyPair() {
29
+ const { privateKey, publicKey } = generateKeyPairSync("ed25519");
30
+ return {
31
+ privateKey: privateKey.export({
32
+ type: "pkcs8",
33
+ format: "der"
34
+ }).toString("base64"),
35
+ publicKey: publicKey.export({
36
+ type: "spki",
37
+ format: "der"
38
+ }).toString("base64")
39
+ };
40
+ }
41
+ __name(generateLicenseKeyPair, "generateLicenseKeyPair");
42
+ function signDocument(payload, privateKeyBase64) {
43
+ const key = createPrivateKey({
44
+ key: Buffer.from(privateKeyBase64, "base64"),
45
+ format: "der",
46
+ type: "pkcs8"
47
+ });
48
+ const signature = sign(null, Buffer.from(canonicalStringify(payload), "utf8"), key).toString("base64");
49
+ return {
50
+ payload,
51
+ signature
52
+ };
53
+ }
54
+ __name(signDocument, "signDocument");
55
+ function verifyDocument(doc, publicKeyBase64) {
56
+ try {
57
+ const key = createPublicKey({
58
+ key: Buffer.from(publicKeyBase64, "base64"),
59
+ format: "der",
60
+ type: "spki"
61
+ });
62
+ return verify(null, Buffer.from(canonicalStringify(doc.payload), "utf8"), key, Buffer.from(doc.signature, "base64"));
63
+ } catch {
64
+ return false;
65
+ }
66
+ }
67
+ __name(verifyDocument, "verifyDocument");
68
+ export {
69
+ canonicalStringify,
70
+ generateLicenseKeyPair,
71
+ hashSnapshot,
72
+ signDocument,
73
+ verifyDocument
74
+ };
75
+ //# sourceMappingURL=license.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/license/canonical.ts","../src/license/signing.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\n// Serializes a value as deterministic JSON: object keys recursively sorted, arrays keep their order\nexport function canonicalStringify(value: unknown): string {\n return JSON.stringify(sortKeysDeep(value));\n}\n\n// Computes the sha256 hex digest of a value's canonical JSON\nexport function hashSnapshot(value: unknown): string {\n return createHash('sha256').update(canonicalStringify(value), 'utf8').digest('hex');\n}\n\n// Recursively rebuilds objects with sorted keys so JSON.stringify output is order-independent\nfunction sortKeysDeep(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortKeysDeep);\n if (value !== null && typeof value === 'object') {\n const record = value as Record<string, unknown>;\n const sorted: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort()) sorted[key] = sortKeysDeep(record[key]);\n return sorted;\n }\n return value;\n}\n","import { createPrivateKey, createPublicKey, generateKeyPairSync, sign, verify } from 'node:crypto';\nimport { canonicalStringify } from './canonical';\nimport type { SignedDocument } from './types';\n\n// Generates an Ed25519 key pair as base64 DER strings (pkcs8 private / spki public)\nexport function generateLicenseKeyPair(): { privateKey: string; publicKey: string } {\n const { privateKey, publicKey } = generateKeyPairSync('ed25519');\n return {\n privateKey: privateKey.export({ type: 'pkcs8', format: 'der' }).toString('base64'),\n publicKey: publicKey.export({ type: 'spki', format: 'der' }).toString('base64'),\n };\n}\n\n// Signs a payload's canonical JSON with an Ed25519 private key (base64 pkcs8 DER)\nexport function signDocument<T>(payload: T, privateKeyBase64: string): SignedDocument<T> {\n const key = createPrivateKey({ key: Buffer.from(privateKeyBase64, 'base64'), format: 'der', type: 'pkcs8' });\n const signature = sign(null, Buffer.from(canonicalStringify(payload), 'utf8'), key).toString('base64');\n return { payload, signature };\n}\n\n// Verifies a signed document against an Ed25519 public key (base64 spki DER); malformed input ⇒ false\nexport function verifyDocument<T>(doc: SignedDocument<T>, publicKeyBase64: string): boolean {\n try {\n const key = createPublicKey({ key: Buffer.from(publicKeyBase64, 'base64'), format: 'der', type: 'spki' });\n return verify(\n null,\n Buffer.from(canonicalStringify(doc.payload), 'utf8'),\n key,\n Buffer.from(doc.signature, 'base64'),\n );\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;AAAA,SAASA,kBAAkB;AAGpB,SAASC,mBAAmBC,OAAc;AAC/C,SAAOC,KAAKC,UAAUC,aAAaH,KAAAA,CAAAA;AACrC;AAFgBD;AAKT,SAASK,aAAaJ,OAAc;AACzC,SAAOK,WAAW,QAAA,EAAUC,OAAOP,mBAAmBC,KAAAA,GAAQ,MAAA,EAAQO,OAAO,KAAA;AAC/E;AAFgBH;AAKhB,SAASD,aAAaH,OAAc;AAClC,MAAIQ,MAAMC,QAAQT,KAAAA,EAAQ,QAAOA,MAAMU,IAAIP,YAAAA;AAC3C,MAAIH,UAAU,QAAQ,OAAOA,UAAU,UAAU;AAC/C,UAAMW,SAASX;AACf,UAAMY,SAAkC,CAAC;AACzC,eAAWC,OAAOC,OAAOC,KAAKJ,MAAAA,EAAQK,KAAI,EAAIJ,QAAOC,GAAAA,IAAOV,aAAaQ,OAAOE,GAAAA,CAAI;AACpF,WAAOD;EACT;AACA,SAAOZ;AACT;AATSG;;;ACbT,SAASc,kBAAkBC,iBAAiBC,qBAAqBC,MAAMC,cAAc;AAK9E,SAASC,yBAAAA;AACd,QAAM,EAAEC,YAAYC,UAAS,IAAKC,oBAAoB,SAAA;AACtD,SAAO;IACLF,YAAYA,WAAWG,OAAO;MAAEC,MAAM;MAASC,QAAQ;IAAM,CAAA,EAAGC,SAAS,QAAA;IACzEL,WAAWA,UAAUE,OAAO;MAAEC,MAAM;MAAQC,QAAQ;IAAM,CAAA,EAAGC,SAAS,QAAA;EACxE;AACF;AANgBP;AAST,SAASQ,aAAgBC,SAAYC,kBAAwB;AAClE,QAAMC,MAAMC,iBAAiB;IAAED,KAAKE,OAAOC,KAAKJ,kBAAkB,QAAA;IAAWJ,QAAQ;IAAOD,MAAM;EAAQ,CAAA;AAC1G,QAAMU,YAAYC,KAAK,MAAMH,OAAOC,KAAKG,mBAAmBR,OAAAA,GAAU,MAAA,GAASE,GAAAA,EAAKJ,SAAS,QAAA;AAC7F,SAAO;IAAEE;IAASM;EAAU;AAC9B;AAJgBP;AAOT,SAASU,eAAkBC,KAAwBC,iBAAuB;AAC/E,MAAI;AACF,UAAMT,MAAMU,gBAAgB;MAAEV,KAAKE,OAAOC,KAAKM,iBAAiB,QAAA;MAAWd,QAAQ;MAAOD,MAAM;IAAO,CAAA;AACvG,WAAOiB,OACL,MACAT,OAAOC,KAAKG,mBAAmBE,IAAIV,OAAO,GAAG,MAAA,GAC7CE,KACAE,OAAOC,KAAKK,IAAIJ,WAAW,QAAA,CAAA;EAE/B,QAAQ;AACN,WAAO;EACT;AACF;AAZgBG;","names":["createHash","canonicalStringify","value","JSON","stringify","sortKeysDeep","hashSnapshot","createHash","update","digest","Array","isArray","map","record","sorted","key","Object","keys","sort","createPrivateKey","createPublicKey","generateKeyPairSync","sign","verify","generateLicenseKeyPair","privateKey","publicKey","generateKeyPairSync","export","type","format","toString","signDocument","payload","privateKeyBase64","key","createPrivateKey","Buffer","from","signature","sign","canonicalStringify","verifyDocument","doc","publicKeyBase64","createPublicKey","verify"]}
package/dist/money.cjs CHANGED
@@ -19,7 +19,20 @@ var __copyProps = (to, from, except, desc) => {
19
19
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
20
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
21
21
 
22
- // src/money.ts
22
+ // src/money/index.ts
23
+ var money_exports2 = {};
24
+ __export(money_exports2, {
25
+ CurrencyAmountDto: () => CurrencyAmountDto,
26
+ IsCurrency: () => IsCurrency,
27
+ IsCurrencyCode: () => IsCurrencyCode,
28
+ SUPPORTED_CURRENCIES: () => SUPPORTED_CURRENCIES,
29
+ majorToMinor: () => majorToMinor,
30
+ minorToMajor: () => minorToMajor,
31
+ resolveCurrency: () => resolveCurrency
32
+ });
33
+ module.exports = __toCommonJS(money_exports2);
34
+
35
+ // src/money/money.ts
23
36
  var money_exports = {};
24
37
  __export(money_exports, {
25
38
  SUPPORTED_CURRENCIES: () => SUPPORTED_CURRENCIES,
@@ -27,7 +40,6 @@ __export(money_exports, {
27
40
  minorToMajor: () => minorToMajor,
28
41
  resolveCurrency: () => resolveCurrency
29
42
  });
30
- module.exports = __toCommonJS(money_exports);
31
43
  var import_bigint = require("dinero.js/bigint");
32
44
  var import_currencies = require("dinero.js/bigint/currencies");
33
45
 
@@ -63,8 +75,8 @@ var ValidationException = class extends HttpProblemException {
63
75
  }
64
76
  };
65
77
 
66
- // src/money.ts
67
- __reExport(money_exports, require("dinero.js/bigint"), module.exports);
78
+ // src/money/money.ts
79
+ __reExport(money_exports, require("dinero.js/bigint"));
68
80
  var ANG = {
69
81
  code: "ANG",
70
82
  base: 10n,
@@ -335,12 +347,87 @@ function majorToMinor(major, currencyCode, field = "amount") {
335
347
  return isNegative ? -minor : minor;
336
348
  }
337
349
  __name(majorToMinor, "majorToMinor");
350
+
351
+ // src/money/currency-amount.dto.ts
352
+ var CurrencyAmountDto = class _CurrencyAmountDto {
353
+ static {
354
+ __name(this, "CurrencyAmountDto");
355
+ }
356
+ currency;
357
+ value;
358
+ static from(minor, currencyCode) {
359
+ if (minor == null) return null;
360
+ const dto = new _CurrencyAmountDto();
361
+ dto.currency = currencyCode;
362
+ dto.value = minorToMajor(minor, currencyCode);
363
+ return dto;
364
+ }
365
+ };
366
+
367
+ // src/money/is-currency.decorator.ts
368
+ var import_class_validator = require("class-validator");
369
+ function IsCurrency(validationOptions) {
370
+ return (target, propertyName) => {
371
+ (0, import_class_validator.registerDecorator)({
372
+ name: "isCurrency",
373
+ target: target.constructor,
374
+ propertyName: String(propertyName),
375
+ options: validationOptions,
376
+ validator: {
377
+ validate(value) {
378
+ if (!value || typeof value !== "object") return false;
379
+ const { currency, value: amount } = value;
380
+ if (typeof currency !== "string" || typeof amount !== "string") return false;
381
+ if (!(currency in SUPPORTED_CURRENCIES)) return false;
382
+ try {
383
+ majorToMinor(amount, currency);
384
+ return true;
385
+ } catch {
386
+ return false;
387
+ }
388
+ },
389
+ defaultMessage(args) {
390
+ return `${args.property} must be {currency, value} where currency is a valid ISO 4217 code and value precision matches the currency exponent.`;
391
+ }
392
+ }
393
+ });
394
+ };
395
+ }
396
+ __name(IsCurrency, "IsCurrency");
397
+
398
+ // src/money/is-currency-code.decorator.ts
399
+ var import_class_validator2 = require("class-validator");
400
+ function IsCurrencyCode(validationOptions) {
401
+ return (target, propertyName) => {
402
+ (0, import_class_validator2.registerDecorator)({
403
+ name: "isCurrencyCode",
404
+ target: target.constructor,
405
+ propertyName: String(propertyName),
406
+ options: validationOptions,
407
+ validator: {
408
+ validate(value) {
409
+ if (typeof value !== "string") return false;
410
+ return value in SUPPORTED_CURRENCIES;
411
+ },
412
+ defaultMessage(args) {
413
+ return `${args.property} must be a valid ISO 4217 currency code.`;
414
+ }
415
+ }
416
+ });
417
+ };
418
+ }
419
+ __name(IsCurrencyCode, "IsCurrencyCode");
420
+
421
+ // src/money/index.ts
422
+ __reExport(money_exports2, money_exports, module.exports);
338
423
  // Annotate the CommonJS export names for ESM import in node:
339
424
  0 && (module.exports = {
425
+ CurrencyAmountDto,
426
+ IsCurrency,
427
+ IsCurrencyCode,
340
428
  SUPPORTED_CURRENCIES,
341
429
  majorToMinor,
342
430
  minorToMajor,
343
- resolveCurrency,
344
- ...require("dinero.js/bigint")
431
+ resolveCurrency
345
432
  });
346
433
  //# sourceMappingURL=money.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/money.ts","../src/exceptions/validation.exception.ts","../src/exceptions/base-field.exception.ts"],"sourcesContent":["import { dinero, toDecimal } from 'dinero.js/bigint';\nimport {\n AED,\n AFN,\n ALL,\n AMD,\n AOA,\n ARS,\n AUD,\n AWG,\n AZN,\n BAM,\n BBD,\n BDT,\n BGN,\n BHD,\n BIF,\n BMD,\n BND,\n BOB,\n BOV,\n BRL,\n BSD,\n BTN,\n BWP,\n BYN,\n BZD,\n CAD,\n CDF,\n CHE,\n CHF,\n CHW,\n CLF,\n CLP,\n CNY,\n COP,\n COU,\n CRC,\n CUP,\n CVE,\n CZK,\n DJF,\n DKK,\n DOP,\n DZD,\n EGP,\n ERN,\n ETB,\n EUR,\n FJD,\n FKP,\n GBP,\n GEL,\n GHS,\n GIP,\n GMD,\n GNF,\n GTQ,\n GYD,\n HKD,\n HNL,\n HTG,\n HUF,\n IDR,\n ILS,\n INR,\n IQD,\n IRR,\n ISK,\n JMD,\n JOD,\n JPY,\n KES,\n KGS,\n KHR,\n KMF,\n KPW,\n KRW,\n KWD,\n KYD,\n KZT,\n LAK,\n LBP,\n LKR,\n LRD,\n LSL,\n LYD,\n MAD,\n MDL,\n MGA,\n MKD,\n MMK,\n MNT,\n MOP,\n MRU,\n MUR,\n MVR,\n MWK,\n MXN,\n MXV,\n MYR,\n MZN,\n NAD,\n NGN,\n NIO,\n NOK,\n NPR,\n NZD,\n OMR,\n PAB,\n PEN,\n PGK,\n PHP,\n PKR,\n PLN,\n PYG,\n QAR,\n RON,\n RSD,\n RUB,\n RWF,\n SAR,\n SBD,\n SCR,\n SDG,\n SEK,\n SGD,\n SHP,\n SLE,\n SOS,\n SRD,\n SSP,\n STN,\n SVC,\n SYP,\n SZL,\n THB,\n TJS,\n TMT,\n TND,\n TOP,\n TRY,\n TTD,\n TWD,\n TZS,\n UAH,\n UGX,\n USD,\n USN,\n UYI,\n UYU,\n UYW,\n UZS,\n VED,\n VES,\n VND,\n VUV,\n WST,\n XAD,\n XAF,\n XCD,\n XCG,\n XOF,\n XPF,\n YER,\n ZAR,\n ZMW,\n ZWG,\n} from 'dinero.js/bigint/currencies';\nimport { ValidationException } from './exceptions/validation.exception';\n\nexport * from 'dinero.js/bigint';\n\nconst ANG = { code: 'ANG', base: 10n, exponent: 2n } as const;\nconst HRK = { code: 'HRK', base: 10n, exponent: 2n } as const;\nconst XAG = { code: 'XAG', base: 10n, exponent: 0n } as const;\nconst XAU = { code: 'XAU', base: 10n, exponent: 0n } as const;\nconst XDR = { code: 'XDR', base: 10n, exponent: 0n } as const;\nconst XPD = { code: 'XPD', base: 10n, exponent: 0n } as const;\nconst XPT = { code: 'XPT', base: 10n, exponent: 0n } as const;\nconst ZWL = { code: 'ZWL', base: 10n, exponent: 2n } as const;\n\nexport const SUPPORTED_CURRENCIES = {\n AED,\n AFN,\n ALL,\n AMD,\n ANG,\n AOA,\n ARS,\n AUD,\n AWG,\n AZN,\n BAM,\n BBD,\n BDT,\n BGN,\n BHD,\n BIF,\n BMD,\n BND,\n BOB,\n BOV,\n BRL,\n BSD,\n BTN,\n BWP,\n BYN,\n BZD,\n CAD,\n CDF,\n CHE,\n CHF,\n CHW,\n CLF,\n CLP,\n CNY,\n COP,\n COU,\n CRC,\n CUP,\n CVE,\n CZK,\n DJF,\n DKK,\n DOP,\n DZD,\n EGP,\n ERN,\n ETB,\n EUR,\n FJD,\n FKP,\n GBP,\n GEL,\n GHS,\n GIP,\n GMD,\n GNF,\n GTQ,\n GYD,\n HKD,\n HNL,\n HRK,\n HTG,\n HUF,\n IDR,\n ILS,\n INR,\n IQD,\n IRR,\n ISK,\n JMD,\n JOD,\n JPY,\n KES,\n KGS,\n KHR,\n KMF,\n KPW,\n KRW,\n KWD,\n KYD,\n KZT,\n LAK,\n LBP,\n LKR,\n LRD,\n LSL,\n LYD,\n MAD,\n MDL,\n MGA,\n MKD,\n MMK,\n MNT,\n MOP,\n MRU,\n MUR,\n MVR,\n MWK,\n MXN,\n MXV,\n MYR,\n MZN,\n NAD,\n NGN,\n NIO,\n NOK,\n NPR,\n NZD,\n OMR,\n PAB,\n PEN,\n PGK,\n PHP,\n PKR,\n PLN,\n PYG,\n QAR,\n RON,\n RSD,\n RUB,\n RWF,\n SAR,\n SBD,\n SCR,\n SDG,\n SEK,\n SGD,\n SHP,\n SLE,\n SOS,\n SRD,\n SSP,\n STN,\n SVC,\n SYP,\n SZL,\n THB,\n TJS,\n TMT,\n TND,\n TOP,\n TRY,\n TTD,\n TWD,\n TZS,\n UAH,\n UGX,\n USD,\n USN,\n UYI,\n UYU,\n UYW,\n UZS,\n VED,\n VES,\n VND,\n VUV,\n WST,\n XAD,\n XAF,\n XAG,\n XAU,\n XCD,\n XCG,\n XDR,\n XOF,\n XPD,\n XPF,\n XPT,\n YER,\n ZAR,\n ZMW,\n ZWG,\n ZWL,\n} as const;\n\nexport type CurrencyCode = keyof typeof SUPPORTED_CURRENCIES;\nexport type Currency = (typeof SUPPORTED_CURRENCIES)[CurrencyCode];\n\nexport type MinorToMajorTransform<TOutput> = (props: { value: string; currency: Currency }) => TOutput;\n\nexport function resolveCurrency(currencyCode: CurrencyCode): Currency {\n return SUPPORTED_CURRENCIES[currencyCode];\n}\n\nexport function minorToMajor<TOutput = string>(\n minor: bigint,\n currencyCode: CurrencyCode,\n transform?: MinorToMajorTransform<TOutput>,\n): string | TOutput {\n const currency = resolveCurrency(currencyCode);\n const amount = dinero({ amount: minor, currency });\n\n if (!transform) {\n return toDecimal(amount);\n }\n\n return toDecimal(amount, ({ value, currency: resolvedCurrency }) => transform({ value, currency: resolvedCurrency }));\n}\n\n// Throws ValidationException (HTTP 422) instead of generic Error so the\n// NestJS error filter maps it to a field-level response automatically.\n// Callers pass `field` so the validation error binds to the right form field.\nexport function majorToMinor(major: string, currencyCode: CurrencyCode, field = 'amount'): bigint {\n const { exponent } = resolveCurrency(currencyCode);\n const scale = typeof exponent === 'bigint' ? Number(exponent) : exponent;\n const trimmed = major.trim();\n\n if (!/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new ValidationException({\n detail: `Invalid amount: \"${major}\".`,\n errors: [{ field, message: 'Enter a valid number.' }],\n });\n }\n\n const isNegative = trimmed.startsWith('-');\n const unsignedValue = isNegative ? trimmed.slice(1) : trimmed;\n const [wholePart, fractionalPart = ''] = unsignedValue.split('.');\n\n if (fractionalPart.length > scale) {\n throw new ValidationException({\n detail: `Too many decimal places for ${currencyCode}. Maximum allowed is ${scale}.`,\n errors: [{ field, message: `${currencyCode} allows up to ${scale} decimal place${scale === 1 ? '' : 's'}.` }],\n });\n }\n\n const paddedFraction = fractionalPart.padEnd(scale, '0');\n const normalizedDigits = `${wholePart}${paddedFraction}`.replace(/^0+(?=\\d)/, '');\n const minor = BigInt(normalizedDigits || '0');\n\n return isNegative ? -minor : minor;\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ValidationException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Validation Failed', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n","import { HttpException, HttpStatus } from '@nestjs/common';\nimport type { FieldError } from '../types/error-response.types';\n\n// Re-export FieldError for backwards compatibility\nexport type { FieldError } from '../types/error-response.types';\n\nexport interface ProblemOptions {\n type?: string;\n label?: string;\n detail?: string;\n errors?: FieldError[];\n}\n\nexport abstract class HttpProblemException extends HttpException {\n constructor(detailOrOptions: string | ProblemOptions, httpStatus: HttpStatus) {\n const options = typeof detailOrOptions === 'string' ? { detail: detailOrOptions } : detailOrOptions;\n\n super(\n {\n type: options.type ?? 'about:blank',\n label: options.label,\n detail: options.detail,\n errors: options.errors ?? [],\n },\n httpStatus,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAAA,oBAAkC;AAClC,wBAuKO;;;ACxKP,IAAAA,iBAA2B;;;ACA3B,oBAA0C;AAanC,IAAeC,uBAAf,cAA4CC,4BAAAA;EAbnD,OAamDA;;;EACjD,YAAYC,iBAA0CC,YAAwB;AAC5E,UAAMC,UAAU,OAAOF,oBAAoB,WAAW;MAAEG,QAAQH;IAAgB,IAAIA;AAEpF,UACE;MACEI,MAAMF,QAAQE,QAAQ;MACtBC,OAAOH,QAAQG;MACfF,QAAQD,QAAQC;MAChBG,QAAQJ,QAAQI,UAAU,CAAA;IAC5B,GACAL,UAAAA;EAEJ;AACF;;;ADxBO,IAAMM,sBAAN,cAAkCC,qBAAAA;EAHzC,OAGyCA;;;EACvC,YAAYC,iBAA2C;AACrD,UAAMA,mBAAmB,qBAAqBC,0BAAWC,oBAAoB;EAC/E;AACF;;;ADoKA,0BAAc,6BA3Kd;AA6KA,IAAMC,MAAM;EAAEC,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMC,MAAM;EAAEH,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAME,MAAM;EAAEJ,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMG,MAAM;EAAEL,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMI,MAAM;EAAEN,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMK,MAAM;EAAEP,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMM,MAAM;EAAER,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMO,MAAM;EAAET,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AAE5C,IAAMQ,uBAAuB;EAClCC;EACAC;EACAC;EACAC;EACAf;EACAgB;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAlE;EACAmE;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACApK;EACAC;EACAoK;EACAC;EACApK;EACAqK;EACApK;EACAqK;EACApK;EACAqK;EACAC;EACAC;EACAC;EACAvK;AACF;AAOO,SAASwK,gBAAgBC,cAA0B;AACxD,SAAOxK,qBAAqBwK,YAAAA;AAC9B;AAFgBD;AAIT,SAASE,aACdC,OACAF,cACAG,WAA0C;AAE1C,QAAMC,WAAWL,gBAAgBC,YAAAA;AACjC,QAAMK,aAASC,sBAAO;IAAED,QAAQH;IAAOE;EAAS,CAAA;AAEhD,MAAI,CAACD,WAAW;AACd,eAAOI,yBAAUF,MAAAA;EACnB;AAEA,aAAOE,yBAAUF,QAAQ,CAAC,EAAEG,OAAOJ,UAAUK,iBAAgB,MAAON,UAAU;IAAEK;IAAOJ,UAAUK;EAAiB,CAAA,CAAA;AACpH;AAbgBR;AAkBT,SAASS,aAAaC,OAAeX,cAA4BY,QAAQ,UAAQ;AACtF,QAAM,EAAE5L,SAAQ,IAAK+K,gBAAgBC,YAAAA;AACrC,QAAMa,QAAQ,OAAO7L,aAAa,WAAW8L,OAAO9L,QAAAA,IAAYA;AAChE,QAAM+L,UAAUJ,MAAMK,KAAI;AAE1B,MAAI,CAAC,kBAAkBC,KAAKF,OAAAA,GAAU;AACpC,UAAM,IAAIG,oBAAoB;MAC5BC,QAAQ,oBAAoBR,KAAAA;MAC5BS,QAAQ;QAAC;UAAER;UAAOS,SAAS;QAAwB;;IACrD,CAAA;EACF;AAEA,QAAMC,aAAaP,QAAQQ,WAAW,GAAA;AACtC,QAAMC,gBAAgBF,aAAaP,QAAQU,MAAM,CAAA,IAAKV;AACtD,QAAM,CAACW,WAAWC,iBAAiB,EAAE,IAAIH,cAAcI,MAAM,GAAA;AAE7D,MAAID,eAAeE,SAAShB,OAAO;AACjC,UAAM,IAAIK,oBAAoB;MAC5BC,QAAQ,+BAA+BnB,YAAAA,wBAAoCa,KAAAA;MAC3EO,QAAQ;QAAC;UAAER;UAAOS,SAAS,GAAGrB,YAAAA,iBAA6Ba,KAAAA,iBAAsBA,UAAU,IAAI,KAAK,GAAA;QAAO;;IAC7G,CAAA;EACF;AAEA,QAAMiB,iBAAiBH,eAAeI,OAAOlB,OAAO,GAAA;AACpD,QAAMmB,mBAAmB,GAAGN,SAAAA,GAAYI,cAAAA,GAAiBG,QAAQ,aAAa,EAAA;AAC9E,QAAM/B,QAAQgC,OAAOF,oBAAoB,GAAA;AAEzC,SAAOV,aAAa,CAACpB,QAAQA;AAC/B;AA5BgBQ;","names":["import_common","HttpProblemException","HttpException","detailOrOptions","httpStatus","options","detail","type","label","errors","ValidationException","HttpProblemException","detailOrOptions","HttpStatus","UNPROCESSABLE_ENTITY","ANG","code","base","exponent","HRK","XAG","XAU","XDR","XPD","XPT","ZWL","SUPPORTED_CURRENCIES","AED","AFN","ALL","AMD","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAD","XAF","XCD","XCG","XOF","XPF","YER","ZAR","ZMW","ZWG","resolveCurrency","currencyCode","minorToMajor","minor","transform","currency","amount","dinero","toDecimal","value","resolvedCurrency","majorToMinor","major","field","scale","Number","trimmed","trim","test","ValidationException","detail","errors","message","isNegative","startsWith","unsignedValue","slice","wholePart","fractionalPart","split","length","paddedFraction","padEnd","normalizedDigits","replace","BigInt"]}
1
+ {"version":3,"sources":["../src/money/index.ts","../src/money/money.ts","../src/exceptions/validation.exception.ts","../src/exceptions/base-field.exception.ts","../src/money/currency-amount.dto.ts","../src/money/is-currency.decorator.ts","../src/money/is-currency-code.decorator.ts"],"sourcesContent":["// Money module — the ONLY entry that touches dinero.js (utilities, validators, DTO, dinero re-export)\nexport { CurrencyAmountDto } from './currency-amount.dto';\nexport { IsCurrency } from './is-currency.decorator';\nexport { IsCurrencyCode } from './is-currency-code.decorator';\nexport * from './money';\n","import { dinero, toDecimal } from 'dinero.js/bigint';\nimport {\n AED,\n AFN,\n ALL,\n AMD,\n AOA,\n ARS,\n AUD,\n AWG,\n AZN,\n BAM,\n BBD,\n BDT,\n BGN,\n BHD,\n BIF,\n BMD,\n BND,\n BOB,\n BOV,\n BRL,\n BSD,\n BTN,\n BWP,\n BYN,\n BZD,\n CAD,\n CDF,\n CHE,\n CHF,\n CHW,\n CLF,\n CLP,\n CNY,\n COP,\n COU,\n CRC,\n CUP,\n CVE,\n CZK,\n DJF,\n DKK,\n DOP,\n DZD,\n EGP,\n ERN,\n ETB,\n EUR,\n FJD,\n FKP,\n GBP,\n GEL,\n GHS,\n GIP,\n GMD,\n GNF,\n GTQ,\n GYD,\n HKD,\n HNL,\n HTG,\n HUF,\n IDR,\n ILS,\n INR,\n IQD,\n IRR,\n ISK,\n JMD,\n JOD,\n JPY,\n KES,\n KGS,\n KHR,\n KMF,\n KPW,\n KRW,\n KWD,\n KYD,\n KZT,\n LAK,\n LBP,\n LKR,\n LRD,\n LSL,\n LYD,\n MAD,\n MDL,\n MGA,\n MKD,\n MMK,\n MNT,\n MOP,\n MRU,\n MUR,\n MVR,\n MWK,\n MXN,\n MXV,\n MYR,\n MZN,\n NAD,\n NGN,\n NIO,\n NOK,\n NPR,\n NZD,\n OMR,\n PAB,\n PEN,\n PGK,\n PHP,\n PKR,\n PLN,\n PYG,\n QAR,\n RON,\n RSD,\n RUB,\n RWF,\n SAR,\n SBD,\n SCR,\n SDG,\n SEK,\n SGD,\n SHP,\n SLE,\n SOS,\n SRD,\n SSP,\n STN,\n SVC,\n SYP,\n SZL,\n THB,\n TJS,\n TMT,\n TND,\n TOP,\n TRY,\n TTD,\n TWD,\n TZS,\n UAH,\n UGX,\n USD,\n USN,\n UYI,\n UYU,\n UYW,\n UZS,\n VED,\n VES,\n VND,\n VUV,\n WST,\n XAD,\n XAF,\n XCD,\n XCG,\n XOF,\n XPF,\n YER,\n ZAR,\n ZMW,\n ZWG,\n} from 'dinero.js/bigint/currencies';\nimport { ValidationException } from '../exceptions/validation.exception';\n\nexport * from 'dinero.js/bigint';\n\nconst ANG = { code: 'ANG', base: 10n, exponent: 2n } as const;\nconst HRK = { code: 'HRK', base: 10n, exponent: 2n } as const;\nconst XAG = { code: 'XAG', base: 10n, exponent: 0n } as const;\nconst XAU = { code: 'XAU', base: 10n, exponent: 0n } as const;\nconst XDR = { code: 'XDR', base: 10n, exponent: 0n } as const;\nconst XPD = { code: 'XPD', base: 10n, exponent: 0n } as const;\nconst XPT = { code: 'XPT', base: 10n, exponent: 0n } as const;\nconst ZWL = { code: 'ZWL', base: 10n, exponent: 2n } as const;\n\nexport const SUPPORTED_CURRENCIES = {\n AED,\n AFN,\n ALL,\n AMD,\n ANG,\n AOA,\n ARS,\n AUD,\n AWG,\n AZN,\n BAM,\n BBD,\n BDT,\n BGN,\n BHD,\n BIF,\n BMD,\n BND,\n BOB,\n BOV,\n BRL,\n BSD,\n BTN,\n BWP,\n BYN,\n BZD,\n CAD,\n CDF,\n CHE,\n CHF,\n CHW,\n CLF,\n CLP,\n CNY,\n COP,\n COU,\n CRC,\n CUP,\n CVE,\n CZK,\n DJF,\n DKK,\n DOP,\n DZD,\n EGP,\n ERN,\n ETB,\n EUR,\n FJD,\n FKP,\n GBP,\n GEL,\n GHS,\n GIP,\n GMD,\n GNF,\n GTQ,\n GYD,\n HKD,\n HNL,\n HRK,\n HTG,\n HUF,\n IDR,\n ILS,\n INR,\n IQD,\n IRR,\n ISK,\n JMD,\n JOD,\n JPY,\n KES,\n KGS,\n KHR,\n KMF,\n KPW,\n KRW,\n KWD,\n KYD,\n KZT,\n LAK,\n LBP,\n LKR,\n LRD,\n LSL,\n LYD,\n MAD,\n MDL,\n MGA,\n MKD,\n MMK,\n MNT,\n MOP,\n MRU,\n MUR,\n MVR,\n MWK,\n MXN,\n MXV,\n MYR,\n MZN,\n NAD,\n NGN,\n NIO,\n NOK,\n NPR,\n NZD,\n OMR,\n PAB,\n PEN,\n PGK,\n PHP,\n PKR,\n PLN,\n PYG,\n QAR,\n RON,\n RSD,\n RUB,\n RWF,\n SAR,\n SBD,\n SCR,\n SDG,\n SEK,\n SGD,\n SHP,\n SLE,\n SOS,\n SRD,\n SSP,\n STN,\n SVC,\n SYP,\n SZL,\n THB,\n TJS,\n TMT,\n TND,\n TOP,\n TRY,\n TTD,\n TWD,\n TZS,\n UAH,\n UGX,\n USD,\n USN,\n UYI,\n UYU,\n UYW,\n UZS,\n VED,\n VES,\n VND,\n VUV,\n WST,\n XAD,\n XAF,\n XAG,\n XAU,\n XCD,\n XCG,\n XDR,\n XOF,\n XPD,\n XPF,\n XPT,\n YER,\n ZAR,\n ZMW,\n ZWG,\n ZWL,\n} as const;\n\nexport type CurrencyCode = keyof typeof SUPPORTED_CURRENCIES;\nexport type Currency = (typeof SUPPORTED_CURRENCIES)[CurrencyCode];\n\nexport type MinorToMajorTransform<TOutput> = (props: { value: string; currency: Currency }) => TOutput;\n\nexport function resolveCurrency(currencyCode: CurrencyCode): Currency {\n return SUPPORTED_CURRENCIES[currencyCode];\n}\n\nexport function minorToMajor<TOutput = string>(\n minor: bigint,\n currencyCode: CurrencyCode,\n transform?: MinorToMajorTransform<TOutput>,\n): string | TOutput {\n const currency = resolveCurrency(currencyCode);\n const amount = dinero({ amount: minor, currency });\n\n if (!transform) {\n return toDecimal(amount);\n }\n\n return toDecimal(amount, ({ value, currency: resolvedCurrency }) => transform({ value, currency: resolvedCurrency }));\n}\n\n// Throws ValidationException (HTTP 422) instead of generic Error so the\n// NestJS error filter maps it to a field-level response automatically.\n// Callers pass `field` so the validation error binds to the right form field.\nexport function majorToMinor(major: string, currencyCode: CurrencyCode, field = 'amount'): bigint {\n const { exponent } = resolveCurrency(currencyCode);\n const scale = typeof exponent === 'bigint' ? Number(exponent) : exponent;\n const trimmed = major.trim();\n\n if (!/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n throw new ValidationException({\n detail: `Invalid amount: \"${major}\".`,\n errors: [{ field, message: 'Enter a valid number.' }],\n });\n }\n\n const isNegative = trimmed.startsWith('-');\n const unsignedValue = isNegative ? trimmed.slice(1) : trimmed;\n const [wholePart, fractionalPart = ''] = unsignedValue.split('.');\n\n if (fractionalPart.length > scale) {\n throw new ValidationException({\n detail: `Too many decimal places for ${currencyCode}. Maximum allowed is ${scale}.`,\n errors: [{ field, message: `${currencyCode} allows up to ${scale} decimal place${scale === 1 ? '' : 's'}.` }],\n });\n }\n\n const paddedFraction = fractionalPart.padEnd(scale, '0');\n const normalizedDigits = `${wholePart}${paddedFraction}`.replace(/^0+(?=\\d)/, '');\n const minor = BigInt(normalizedDigits || '0');\n\n return isNegative ? -minor : minor;\n}\n","import { HttpStatus } from '@nestjs/common';\nimport { HttpProblemException, type ProblemOptions } from './base-field.exception';\n\nexport class ValidationException extends HttpProblemException {\n constructor(detailOrOptions?: string | ProblemOptions) {\n super(detailOrOptions ?? 'Validation Failed', HttpStatus.UNPROCESSABLE_ENTITY);\n }\n}\n","import { HttpException, HttpStatus } from '@nestjs/common';\nimport type { FieldError } from '../types/error-response.types';\n\n// Re-export FieldError for backwards compatibility\nexport type { FieldError } from '../types/error-response.types';\n\nexport interface ProblemOptions {\n type?: string;\n label?: string;\n detail?: string;\n errors?: FieldError[];\n}\n\nexport abstract class HttpProblemException extends HttpException {\n constructor(detailOrOptions: string | ProblemOptions, httpStatus: HttpStatus) {\n const options = typeof detailOrOptions === 'string' ? { detail: detailOrOptions } : detailOrOptions;\n\n super(\n {\n type: options.type ?? 'about:blank',\n label: options.label,\n detail: options.detail,\n errors: options.errors ?? [],\n },\n httpStatus,\n );\n }\n}\n","import { type CurrencyCode, minorToMajor } from './money';\n\nexport class CurrencyAmountDto {\n currency: string;\n value: string;\n\n static from(minor: bigint, currencyCode: string): CurrencyAmountDto;\n static from(minor: bigint | null | undefined, currencyCode: string): CurrencyAmountDto | null;\n static from(minor: bigint | null | undefined, currencyCode: string): CurrencyAmountDto | null {\n if (minor == null) return null;\n const dto = new CurrencyAmountDto();\n dto.currency = currencyCode;\n dto.value = minorToMajor(minor, currencyCode as CurrencyCode);\n return dto;\n }\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { type CurrencyCode, majorToMinor, SUPPORTED_CURRENCIES } from './money';\n\n// Self-contained validator for `{currency, value}` payloads. Intentionally does NOT compose\n// `@ValidateNested()` + `@Type(() => CurrencyAmountDto)` — api-sdk and the consuming app each\n// load their own copy of `class-validator` (different MetadataStorage singletons), so any\n// field-level decorators registered on `CurrencyAmountDto` from inside api-sdk are invisible\n// to the consumer's validator. Doing everything here, at the consumer's call site, sidesteps\n// that and keeps the decorator usable everywhere.\n//\n// Checks performed (in order, short-circuiting):\n// 1. Value is a non-null object.\n// 2. `currency` and `value` are both strings.\n// 3. `currency` is in `SUPPORTED_CURRENCIES`.\n// 4. `majorToMinor(value, currency)` succeeds — enforces decimal precision ≤ currency exponent.\nexport function IsCurrency(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCurrency',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const { currency, value: amount } = value as Record<string, unknown>;\n if (typeof currency !== 'string' || typeof amount !== 'string') return false;\n if (!(currency in SUPPORTED_CURRENCIES)) return false;\n try {\n majorToMinor(amount, currency as CurrencyCode);\n return true;\n } catch {\n return false;\n }\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be {currency, value} where currency is a valid ISO 4217 code and value precision matches the currency exponent.`;\n },\n },\n });\n };\n}\n","import { registerDecorator, type ValidationArguments, type ValidationOptions } from 'class-validator';\nimport { SUPPORTED_CURRENCIES } from './money';\n\nexport function IsCurrencyCode(validationOptions?: ValidationOptions): PropertyDecorator {\n return (target: object, propertyName: string | symbol) => {\n registerDecorator({\n name: 'isCurrencyCode',\n target: target.constructor,\n propertyName: String(propertyName),\n options: validationOptions,\n validator: {\n validate(value: unknown): boolean {\n if (typeof value !== 'string') return false;\n return value in SUPPORTED_CURRENCIES;\n },\n defaultMessage(args: ValidationArguments): string {\n return `${args.property} must be a valid ISO 4217 currency code.`;\n },\n },\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,iBAAA;SAAAA,gBAAA;;;;;;;;;8BAAAA;;;ACAA;;;;;;;AAAA,oBAAkC;AAClC,wBAuKO;;;ACxKP,IAAAC,iBAA2B;;;ACA3B,oBAA0C;AAanC,IAAeC,uBAAf,cAA4CC,4BAAAA;EAbnD,OAamDA;;;EACjD,YAAYC,iBAA0CC,YAAwB;AAC5E,UAAMC,UAAU,OAAOF,oBAAoB,WAAW;MAAEG,QAAQH;IAAgB,IAAIA;AAEpF,UACE;MACEI,MAAMF,QAAQE,QAAQ;MACtBC,OAAOH,QAAQG;MACfF,QAAQD,QAAQC;MAChBG,QAAQJ,QAAQI,UAAU,CAAA;IAC5B,GACAL,UAAAA;EAEJ;AACF;;;ADxBO,IAAMM,sBAAN,cAAkCC,qBAAAA;EAHzC,OAGyCA;;;EACvC,YAAYC,iBAA2C;AACrD,UAAMA,mBAAmB,qBAAqBC,0BAAWC,oBAAoB;EAC/E;AACF;;;ADoKA,0BAAc;AAEd,IAAMC,MAAM;EAAEC,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMC,MAAM;EAAEH,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAME,MAAM;EAAEJ,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMG,MAAM;EAAEL,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMI,MAAM;EAAEN,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMK,MAAM;EAAEP,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMM,MAAM;EAAER,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AACnD,IAAMO,MAAM;EAAET,MAAM;EAAOC,MAAM;EAAKC,UAAU;AAAG;AAE5C,IAAMQ,uBAAuB;EAClCC;EACAC;EACAC;EACAC;EACAf;EACAgB;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAlE;EACAmE;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACApK;EACAC;EACAoK;EACAC;EACApK;EACAqK;EACApK;EACAqK;EACApK;EACAqK;EACAC;EACAC;EACAC;EACAvK;AACF;AAOO,SAASwK,gBAAgBC,cAA0B;AACxD,SAAOxK,qBAAqBwK,YAAAA;AAC9B;AAFgBD;AAIT,SAASE,aACdC,OACAF,cACAG,WAA0C;AAE1C,QAAMC,WAAWL,gBAAgBC,YAAAA;AACjC,QAAMK,aAASC,sBAAO;IAAED,QAAQH;IAAOE;EAAS,CAAA;AAEhD,MAAI,CAACD,WAAW;AACd,eAAOI,yBAAUF,MAAAA;EACnB;AAEA,aAAOE,yBAAUF,QAAQ,CAAC,EAAEG,OAAOJ,UAAUK,iBAAgB,MAAON,UAAU;IAAEK;IAAOJ,UAAUK;EAAiB,CAAA,CAAA;AACpH;AAbgBR;AAkBT,SAASS,aAAaC,OAAeX,cAA4BY,QAAQ,UAAQ;AACtF,QAAM,EAAE5L,SAAQ,IAAK+K,gBAAgBC,YAAAA;AACrC,QAAMa,QAAQ,OAAO7L,aAAa,WAAW8L,OAAO9L,QAAAA,IAAYA;AAChE,QAAM+L,UAAUJ,MAAMK,KAAI;AAE1B,MAAI,CAAC,kBAAkBC,KAAKF,OAAAA,GAAU;AACpC,UAAM,IAAIG,oBAAoB;MAC5BC,QAAQ,oBAAoBR,KAAAA;MAC5BS,QAAQ;QAAC;UAAER;UAAOS,SAAS;QAAwB;;IACrD,CAAA;EACF;AAEA,QAAMC,aAAaP,QAAQQ,WAAW,GAAA;AACtC,QAAMC,gBAAgBF,aAAaP,QAAQU,MAAM,CAAA,IAAKV;AACtD,QAAM,CAACW,WAAWC,iBAAiB,EAAE,IAAIH,cAAcI,MAAM,GAAA;AAE7D,MAAID,eAAeE,SAAShB,OAAO;AACjC,UAAM,IAAIK,oBAAoB;MAC5BC,QAAQ,+BAA+BnB,YAAAA,wBAAoCa,KAAAA;MAC3EO,QAAQ;QAAC;UAAER;UAAOS,SAAS,GAAGrB,YAAAA,iBAA6Ba,KAAAA,iBAAsBA,UAAU,IAAI,KAAK,GAAA;QAAO;;IAC7G,CAAA;EACF;AAEA,QAAMiB,iBAAiBH,eAAeI,OAAOlB,OAAO,GAAA;AACpD,QAAMmB,mBAAmB,GAAGN,SAAAA,GAAYI,cAAAA,GAAiBG,QAAQ,aAAa,EAAA;AAC9E,QAAM/B,QAAQgC,OAAOF,oBAAoB,GAAA;AAEzC,SAAOV,aAAa,CAACpB,QAAQA;AAC/B;AA5BgBQ;;;AGhYT,IAAMyB,oBAAN,MAAMA,mBAAAA;EAFb,OAEaA;;;EACXC;EACAC;EAIA,OAAOC,KAAKC,OAAkCC,cAAgD;AAC5F,QAAID,SAAS,KAAM,QAAO;AAC1B,UAAME,MAAM,IAAIN,mBAAAA;AAChBM,QAAIL,WAAWI;AACfC,QAAIJ,QAAQK,aAAaH,OAAOC,YAAAA;AAChC,WAAOC;EACT;AACF;;;ACfA,6BAAoF;AAe7E,SAASE,WAAWC,mBAAqC;AAC9D,SAAO,CAACC,QAAgBC,iBAAAA;AACtBC,kDAAkB;MAChBC,MAAM;MACNH,QAAQA,OAAO;MACfC,cAAcG,OAAOH,YAAAA;MACrBI,SAASN;MACTO,WAAW;QACTC,SAASC,OAAc;AACrB,cAAI,CAACA,SAAS,OAAOA,UAAU,SAAU,QAAO;AAChD,gBAAM,EAAEC,UAAUD,OAAOE,OAAM,IAAKF;AACpC,cAAI,OAAOC,aAAa,YAAY,OAAOC,WAAW,SAAU,QAAO;AACvE,cAAI,EAAED,YAAYE,sBAAuB,QAAO;AAChD,cAAI;AACFC,yBAAaF,QAAQD,QAAAA;AACrB,mBAAO;UACT,QAAQ;AACN,mBAAO;UACT;QACF;QACAI,eAAeC,MAAyB;AACtC,iBAAO,GAAGA,KAAKC,QAAQ;QACzB;MACF;IACF,CAAA;EACF;AACF;AA1BgBjB;;;ACfhB,IAAAkB,0BAAoF;AAG7E,SAASC,eAAeC,mBAAqC;AAClE,SAAO,CAACC,QAAgBC,iBAAAA;AACtBC,mDAAkB;MAChBC,MAAM;MACNH,QAAQA,OAAO;MACfC,cAAcG,OAAOH,YAAAA;MACrBI,SAASN;MACTO,WAAW;QACTC,SAASC,OAAc;AACrB,cAAI,OAAOA,UAAU,SAAU,QAAO;AACtC,iBAAOA,SAASC;QAClB;QACAC,eAAeC,MAAyB;AACtC,iBAAO,GAAGA,KAAKC,QAAQ;QACzB;MACF;IACF,CAAA;EACF;AACF;AAlBgBd;;;ANChB,WAAAe,gBAAc,eAJd;","names":["money_exports","import_common","HttpProblemException","HttpException","detailOrOptions","httpStatus","options","detail","type","label","errors","ValidationException","HttpProblemException","detailOrOptions","HttpStatus","UNPROCESSABLE_ENTITY","ANG","code","base","exponent","HRK","XAG","XAU","XDR","XPD","XPT","ZWL","SUPPORTED_CURRENCIES","AED","AFN","ALL","AMD","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VES","VND","VUV","WST","XAD","XAF","XCD","XCG","XOF","XPF","YER","ZAR","ZMW","ZWG","resolveCurrency","currencyCode","minorToMajor","minor","transform","currency","amount","dinero","toDecimal","value","resolvedCurrency","majorToMinor","major","field","scale","Number","trimmed","trim","test","ValidationException","detail","errors","message","isNegative","startsWith","unsignedValue","slice","wholePart","fractionalPart","split","length","paddedFraction","padEnd","normalizedDigits","replace","BigInt","CurrencyAmountDto","currency","value","from","minor","currencyCode","dto","minorToMajor","IsCurrency","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","currency","amount","SUPPORTED_CURRENCIES","majorToMinor","defaultMessage","args","property","import_class_validator","IsCurrencyCode","validationOptions","target","propertyName","registerDecorator","name","String","options","validator","validate","value","SUPPORTED_CURRENCIES","defaultMessage","args","property","money_exports"]}
package/dist/money.d.cts CHANGED
@@ -1,6 +1,18 @@
1
+ import { ValidationOptions } from 'class-validator';
1
2
  import * as dinero_js_bigint from 'dinero.js/bigint';
2
3
  export * from 'dinero.js/bigint';
3
4
 
5
+ declare class CurrencyAmountDto {
6
+ currency: string;
7
+ value: string;
8
+ static from(minor: bigint, currencyCode: string): CurrencyAmountDto;
9
+ static from(minor: bigint | null | undefined, currencyCode: string): CurrencyAmountDto | null;
10
+ }
11
+
12
+ declare function IsCurrency(validationOptions?: ValidationOptions): PropertyDecorator;
13
+
14
+ declare function IsCurrencyCode(validationOptions?: ValidationOptions): PropertyDecorator;
15
+
4
16
  declare const SUPPORTED_CURRENCIES: {
5
17
  readonly AED: dinero_js_bigint.DineroCurrency<bigint>;
6
18
  readonly AFN: dinero_js_bigint.DineroCurrency<bigint>;
@@ -219,4 +231,4 @@ declare function resolveCurrency(currencyCode: CurrencyCode): Currency;
219
231
  declare function minorToMajor<TOutput = string>(minor: bigint, currencyCode: CurrencyCode, transform?: MinorToMajorTransform<TOutput>): string | TOutput;
220
232
  declare function majorToMinor(major: string, currencyCode: CurrencyCode, field?: string): bigint;
221
233
 
222
- export { type Currency, type CurrencyCode, type MinorToMajorTransform, SUPPORTED_CURRENCIES, majorToMinor, minorToMajor, resolveCurrency };
234
+ export { type Currency, CurrencyAmountDto, type CurrencyCode, IsCurrency, IsCurrencyCode, type MinorToMajorTransform, SUPPORTED_CURRENCIES, majorToMinor, minorToMajor, resolveCurrency };
package/dist/money.d.ts CHANGED
@@ -1,6 +1,18 @@
1
+ import { ValidationOptions } from 'class-validator';
1
2
  import * as dinero_js_bigint from 'dinero.js/bigint';
2
3
  export * from 'dinero.js/bigint';
3
4
 
5
+ declare class CurrencyAmountDto {
6
+ currency: string;
7
+ value: string;
8
+ static from(minor: bigint, currencyCode: string): CurrencyAmountDto;
9
+ static from(minor: bigint | null | undefined, currencyCode: string): CurrencyAmountDto | null;
10
+ }
11
+
12
+ declare function IsCurrency(validationOptions?: ValidationOptions): PropertyDecorator;
13
+
14
+ declare function IsCurrencyCode(validationOptions?: ValidationOptions): PropertyDecorator;
15
+
4
16
  declare const SUPPORTED_CURRENCIES: {
5
17
  readonly AED: dinero_js_bigint.DineroCurrency<bigint>;
6
18
  readonly AFN: dinero_js_bigint.DineroCurrency<bigint>;
@@ -219,4 +231,4 @@ declare function resolveCurrency(currencyCode: CurrencyCode): Currency;
219
231
  declare function minorToMajor<TOutput = string>(minor: bigint, currencyCode: CurrencyCode, transform?: MinorToMajorTransform<TOutput>): string | TOutput;
220
232
  declare function majorToMinor(major: string, currencyCode: CurrencyCode, field?: string): bigint;
221
233
 
222
- export { type Currency, type CurrencyCode, type MinorToMajorTransform, SUPPORTED_CURRENCIES, majorToMinor, minorToMajor, resolveCurrency };
234
+ export { type Currency, CurrencyAmountDto, type CurrencyCode, IsCurrency, IsCurrencyCode, type MinorToMajorTransform, SUPPORTED_CURRENCIES, majorToMinor, minorToMajor, resolveCurrency };