@ai-billing/polar 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +29 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -7
- package/dist/index.d.ts +1 -7
- package/dist/index.js +29 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -34,28 +34,40 @@ function createPolarDestination(options) {
|
|
|
34
34
|
});
|
|
35
35
|
return (0, import_core.createDestination)("polar", async (event) => {
|
|
36
36
|
const tags = event.tags ?? {};
|
|
37
|
-
const internalId = tags[options.customerIdKey] ?? tags.
|
|
38
|
-
const externalId = tags[options.externalCustomerIdKey] ?? tags.
|
|
37
|
+
const internalId = options.customerIdKey ? tags[options.customerIdKey] : tags.customerId ?? tags.polarCustomerId ?? tags.customer_id;
|
|
38
|
+
const externalId = options.externalCustomerIdKey ? tags[options.externalCustomerIdKey] : tags.userId ?? tags.externalId ?? tags.user_id;
|
|
39
39
|
if (!internalId && !externalId) {
|
|
40
40
|
console.warn(
|
|
41
41
|
"[ai-billing] Polar: No identity found in tags. Skipping event."
|
|
42
42
|
);
|
|
43
43
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
const eventName = typeof options.eventName === "function" ? options.eventName(event) : options.eventName;
|
|
45
|
+
let metadata;
|
|
46
|
+
if (options.mapMetadata) {
|
|
47
|
+
metadata = options.mapMetadata(event);
|
|
48
|
+
} else {
|
|
49
|
+
metadata = {
|
|
50
|
+
...(0, import_core.buildMeterMetadata)(event),
|
|
51
|
+
...event.cost ? {
|
|
52
|
+
cost_nanos: (0, import_core.costToNumber)(event.cost, "nanos"),
|
|
53
|
+
cost_currency: event.cost.currency
|
|
54
|
+
} : {}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await polar.events.ingest({
|
|
59
|
+
events: [
|
|
60
|
+
{
|
|
61
|
+
name: eventName,
|
|
62
|
+
customerId: String(internalId),
|
|
63
|
+
...externalId ? { externalId: String(externalId) } : {},
|
|
64
|
+
metadata
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
});
|
|
68
|
+
} catch (error) {
|
|
69
|
+
console.error("[ai-billing] Failed to ingest event to Polar:", error);
|
|
70
|
+
}
|
|
59
71
|
});
|
|
60
72
|
}
|
|
61
73
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/destination/polar-destination.ts"],"sourcesContent":["export * from './destination/index.js';\n","import { Polar } from '@polar-sh/sdk';\nimport {\n createDestination,\n costToNumber,\n buildMeterMetadata,\n} from '@ai-billing/core';\nimport type { BillingEvent, DefaultTags, Destination } from '@ai-billing/core';\n\nexport interface PolarDestinationOptions<\n TTags extends DefaultTags = DefaultTags,\n> {\n client?: Polar;\n accessToken?: string;\n server?: 'sandbox' | 'production';\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/destination/polar-destination.ts"],"sourcesContent":["export * from './destination/index.js';\n","import { Polar } from '@polar-sh/sdk';\nimport {\n createDestination,\n costToNumber,\n buildMeterMetadata,\n} from '@ai-billing/core';\nimport type { BillingEvent, DefaultTags, Destination } from '@ai-billing/core';\nimport { EventMetadataInput } from '@polar-sh/sdk/models/components/eventmetadatainput.js';\n\nexport interface PolarDestinationOptions<\n TTags extends DefaultTags = DefaultTags,\n> {\n client?: Polar;\n accessToken?: string;\n server?: 'sandbox' | 'production';\n eventName: string | ((event: BillingEvent<TTags>) => string);\n customerIdKey?: keyof TTags;\n externalCustomerIdKey?: keyof TTags;\n\n mapMetadata?: (\n event: BillingEvent<TTags>,\n ) => Record<string, string | number | boolean>;\n}\n\nexport function createPolarDestination<TTags extends DefaultTags = DefaultTags>(\n options: PolarDestinationOptions<TTags>,\n): Destination<TTags> {\n const polar =\n options.client ??\n new Polar({\n accessToken: options.accessToken,\n server: options.server,\n });\n\n return createDestination<TTags>('polar', async event => {\n const tags = (event.tags ?? {}) as Record<\n string,\n string | number | boolean\n >;\n\n const internalId = options.customerIdKey\n ? tags[options.customerIdKey as string]\n : (tags.customerId ?? tags.polarCustomerId ?? tags.customer_id);\n\n const externalId = options.externalCustomerIdKey\n ? tags[options.externalCustomerIdKey as string]\n : (tags.userId ?? tags.externalId ?? tags.user_id);\n\n if (!internalId && !externalId) {\n console.warn(\n '[ai-billing] Polar: No identity found in tags. Skipping event.',\n );\n }\n\n const eventName =\n typeof options.eventName === 'function'\n ? options.eventName(event)\n : options.eventName;\n\n let metadata: Record<string, EventMetadataInput>;\n\n if (options.mapMetadata) {\n metadata = options.mapMetadata(event);\n } else {\n metadata = {\n ...(buildMeterMetadata(event) as Record<\n string,\n string | number | boolean\n >),\n ...(event.cost\n ? {\n cost_nanos: costToNumber(event.cost, 'nanos'),\n cost_currency: event.cost.currency,\n }\n : {}),\n };\n }\n\n try {\n await polar.events.ingest({\n events: [\n {\n name: eventName,\n customerId: String(internalId),\n ...(externalId ? { externalId: String(externalId) } : {}),\n metadata,\n },\n ],\n });\n } catch (error) {\n console.error('[ai-billing] Failed to ingest event to Polar:', error);\n }\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAsB;AACtB,kBAIO;AAmBA,SAAS,uBACd,SACoB;AACpB,QAAM,QACJ,QAAQ,UACR,IAAI,iBAAM;AAAA,IACR,aAAa,QAAQ;AAAA,IACrB,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAEH,aAAO,+BAAyB,SAAS,OAAM,UAAS;AACtD,UAAM,OAAQ,MAAM,QAAQ,CAAC;AAK7B,UAAM,aAAa,QAAQ,gBACvB,KAAK,QAAQ,aAAuB,IACnC,KAAK,cAAc,KAAK,mBAAmB,KAAK;AAErD,UAAM,aAAa,QAAQ,wBACvB,KAAK,QAAQ,qBAA+B,IAC3C,KAAK,UAAU,KAAK,cAAc,KAAK;AAE5C,QAAI,CAAC,cAAc,CAAC,YAAY;AAC9B,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YACJ,OAAO,QAAQ,cAAc,aACzB,QAAQ,UAAU,KAAK,IACvB,QAAQ;AAEd,QAAI;AAEJ,QAAI,QAAQ,aAAa;AACvB,iBAAW,QAAQ,YAAY,KAAK;AAAA,IACtC,OAAO;AACL,iBAAW;AAAA,QACT,OAAI,gCAAmB,KAAK;AAAA,QAI5B,GAAI,MAAM,OACN;AAAA,UACE,gBAAY,0BAAa,MAAM,MAAM,OAAO;AAAA,UAC5C,eAAe,MAAM,KAAK;AAAA,QAC5B,IACA,CAAC;AAAA,MACP;AAAA,IACF;AAEA,QAAI;AACF,YAAM,MAAM,OAAO,OAAO;AAAA,QACxB,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,YAAY,OAAO,UAAU;AAAA,YAC7B,GAAI,aAAa,EAAE,YAAY,OAAO,UAAU,EAAE,IAAI,CAAC;AAAA,YACvD;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,MAAM,iDAAiD,KAAK;AAAA,IACtE;AAAA,EACF,CAAC;AACH;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -5,14 +5,8 @@ interface PolarDestinationOptions<TTags extends DefaultTags = DefaultTags> {
|
|
|
5
5
|
client?: Polar;
|
|
6
6
|
accessToken?: string;
|
|
7
7
|
server?: 'sandbox' | 'production';
|
|
8
|
-
|
|
9
|
-
/** * Custom key to look for in tags for Polar's internal customer ID (cus_...).
|
|
10
|
-
* Defaults to: 'customerId' | 'polarCustomerId'
|
|
11
|
-
*/
|
|
8
|
+
eventName: string | ((event: BillingEvent<TTags>) => string);
|
|
12
9
|
customerIdKey?: keyof TTags;
|
|
13
|
-
/** * Custom key to look for in tags for your system's ID.
|
|
14
|
-
* Defaults to: 'userId' | 'externalId'
|
|
15
|
-
*/
|
|
16
10
|
externalCustomerIdKey?: keyof TTags;
|
|
17
11
|
mapMetadata?: (event: BillingEvent<TTags>) => Record<string, string | number | boolean>;
|
|
18
12
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,14 +5,8 @@ interface PolarDestinationOptions<TTags extends DefaultTags = DefaultTags> {
|
|
|
5
5
|
client?: Polar;
|
|
6
6
|
accessToken?: string;
|
|
7
7
|
server?: 'sandbox' | 'production';
|
|
8
|
-
|
|
9
|
-
/** * Custom key to look for in tags for Polar's internal customer ID (cus_...).
|
|
10
|
-
* Defaults to: 'customerId' | 'polarCustomerId'
|
|
11
|
-
*/
|
|
8
|
+
eventName: string | ((event: BillingEvent<TTags>) => string);
|
|
12
9
|
customerIdKey?: keyof TTags;
|
|
13
|
-
/** * Custom key to look for in tags for your system's ID.
|
|
14
|
-
* Defaults to: 'userId' | 'externalId'
|
|
15
|
-
*/
|
|
16
10
|
externalCustomerIdKey?: keyof TTags;
|
|
17
11
|
mapMetadata?: (event: BillingEvent<TTags>) => Record<string, string | number | boolean>;
|
|
18
12
|
}
|
package/dist/index.js
CHANGED
|
@@ -12,28 +12,40 @@ function createPolarDestination(options) {
|
|
|
12
12
|
});
|
|
13
13
|
return createDestination("polar", async (event) => {
|
|
14
14
|
const tags = event.tags ?? {};
|
|
15
|
-
const internalId = tags[options.customerIdKey] ?? tags.
|
|
16
|
-
const externalId = tags[options.externalCustomerIdKey] ?? tags.
|
|
15
|
+
const internalId = options.customerIdKey ? tags[options.customerIdKey] : tags.customerId ?? tags.polarCustomerId ?? tags.customer_id;
|
|
16
|
+
const externalId = options.externalCustomerIdKey ? tags[options.externalCustomerIdKey] : tags.userId ?? tags.externalId ?? tags.user_id;
|
|
17
17
|
if (!internalId && !externalId) {
|
|
18
18
|
console.warn(
|
|
19
19
|
"[ai-billing] Polar: No identity found in tags. Skipping event."
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
const eventName = typeof options.eventName === "function" ? options.eventName(event) : options.eventName;
|
|
23
|
+
let metadata;
|
|
24
|
+
if (options.mapMetadata) {
|
|
25
|
+
metadata = options.mapMetadata(event);
|
|
26
|
+
} else {
|
|
27
|
+
metadata = {
|
|
28
|
+
...buildMeterMetadata(event),
|
|
29
|
+
...event.cost ? {
|
|
30
|
+
cost_nanos: costToNumber(event.cost, "nanos"),
|
|
31
|
+
cost_currency: event.cost.currency
|
|
32
|
+
} : {}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
await polar.events.ingest({
|
|
37
|
+
events: [
|
|
38
|
+
{
|
|
39
|
+
name: eventName,
|
|
40
|
+
customerId: String(internalId),
|
|
41
|
+
...externalId ? { externalId: String(externalId) } : {},
|
|
42
|
+
metadata
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
console.error("[ai-billing] Failed to ingest event to Polar:", error);
|
|
48
|
+
}
|
|
37
49
|
});
|
|
38
50
|
}
|
|
39
51
|
export {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/destination/polar-destination.ts"],"sourcesContent":["import { Polar } from '@polar-sh/sdk';\nimport {\n createDestination,\n costToNumber,\n buildMeterMetadata,\n} from '@ai-billing/core';\nimport type { BillingEvent, DefaultTags, Destination } from '@ai-billing/core';\n\nexport interface PolarDestinationOptions<\n TTags extends DefaultTags = DefaultTags,\n> {\n client?: Polar;\n accessToken?: string;\n server?: 'sandbox' | 'production';\n
|
|
1
|
+
{"version":3,"sources":["../src/destination/polar-destination.ts"],"sourcesContent":["import { Polar } from '@polar-sh/sdk';\nimport {\n createDestination,\n costToNumber,\n buildMeterMetadata,\n} from '@ai-billing/core';\nimport type { BillingEvent, DefaultTags, Destination } from '@ai-billing/core';\nimport { EventMetadataInput } from '@polar-sh/sdk/models/components/eventmetadatainput.js';\n\nexport interface PolarDestinationOptions<\n TTags extends DefaultTags = DefaultTags,\n> {\n client?: Polar;\n accessToken?: string;\n server?: 'sandbox' | 'production';\n eventName: string | ((event: BillingEvent<TTags>) => string);\n customerIdKey?: keyof TTags;\n externalCustomerIdKey?: keyof TTags;\n\n mapMetadata?: (\n event: BillingEvent<TTags>,\n ) => Record<string, string | number | boolean>;\n}\n\nexport function createPolarDestination<TTags extends DefaultTags = DefaultTags>(\n options: PolarDestinationOptions<TTags>,\n): Destination<TTags> {\n const polar =\n options.client ??\n new Polar({\n accessToken: options.accessToken,\n server: options.server,\n });\n\n return createDestination<TTags>('polar', async event => {\n const tags = (event.tags ?? {}) as Record<\n string,\n string | number | boolean\n >;\n\n const internalId = options.customerIdKey\n ? tags[options.customerIdKey as string]\n : (tags.customerId ?? tags.polarCustomerId ?? tags.customer_id);\n\n const externalId = options.externalCustomerIdKey\n ? tags[options.externalCustomerIdKey as string]\n : (tags.userId ?? tags.externalId ?? tags.user_id);\n\n if (!internalId && !externalId) {\n console.warn(\n '[ai-billing] Polar: No identity found in tags. Skipping event.',\n );\n }\n\n const eventName =\n typeof options.eventName === 'function'\n ? options.eventName(event)\n : options.eventName;\n\n let metadata: Record<string, EventMetadataInput>;\n\n if (options.mapMetadata) {\n metadata = options.mapMetadata(event);\n } else {\n metadata = {\n ...(buildMeterMetadata(event) as Record<\n string,\n string | number | boolean\n >),\n ...(event.cost\n ? {\n cost_nanos: costToNumber(event.cost, 'nanos'),\n cost_currency: event.cost.currency,\n }\n : {}),\n };\n }\n\n try {\n await polar.events.ingest({\n events: [\n {\n name: eventName,\n customerId: String(internalId),\n ...(externalId ? { externalId: String(externalId) } : {}),\n metadata,\n },\n ],\n });\n } catch (error) {\n console.error('[ai-billing] Failed to ingest event to Polar:', error);\n }\n });\n}\n"],"mappings":";AAAA,SAAS,aAAa;AACtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAmBA,SAAS,uBACd,SACoB;AACpB,QAAM,QACJ,QAAQ,UACR,IAAI,MAAM;AAAA,IACR,aAAa,QAAQ;AAAA,IACrB,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAEH,SAAO,kBAAyB,SAAS,OAAM,UAAS;AACtD,UAAM,OAAQ,MAAM,QAAQ,CAAC;AAK7B,UAAM,aAAa,QAAQ,gBACvB,KAAK,QAAQ,aAAuB,IACnC,KAAK,cAAc,KAAK,mBAAmB,KAAK;AAErD,UAAM,aAAa,QAAQ,wBACvB,KAAK,QAAQ,qBAA+B,IAC3C,KAAK,UAAU,KAAK,cAAc,KAAK;AAE5C,QAAI,CAAC,cAAc,CAAC,YAAY;AAC9B,cAAQ;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YACJ,OAAO,QAAQ,cAAc,aACzB,QAAQ,UAAU,KAAK,IACvB,QAAQ;AAEd,QAAI;AAEJ,QAAI,QAAQ,aAAa;AACvB,iBAAW,QAAQ,YAAY,KAAK;AAAA,IACtC,OAAO;AACL,iBAAW;AAAA,QACT,GAAI,mBAAmB,KAAK;AAAA,QAI5B,GAAI,MAAM,OACN;AAAA,UACE,YAAY,aAAa,MAAM,MAAM,OAAO;AAAA,UAC5C,eAAe,MAAM,KAAK;AAAA,QAC5B,IACA,CAAC;AAAA,MACP;AAAA,IACF;AAEA,QAAI;AACF,YAAM,MAAM,OAAO,OAAO;AAAA,QACxB,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,YAAY,OAAO,UAAU;AAAA,YAC7B,GAAI,aAAa,EAAE,YAAY,OAAO,UAAU,EAAE,IAAI,CAAC;AAAA,YACvD;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,SAAS,OAAO;AACd,cAAQ,MAAM,iDAAiD,KAAK;AAAA,IACtE;AAAA,EACF,CAAC;AACH;","names":[]}
|