deepline 0.3.342 → 0.3.344
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/bundling-sources/sdk/src/http.ts +9 -1
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +9 -1
- package/dist/bundling-sources/shared_libs/plays/csv-text-repair.ts +145 -0
- package/dist/bundling-sources/shared_libs/product-notifications/billing-sales.ts +2 -0
- package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +33 -0
- package/dist/bundling-sources/shared_libs/product-notifications/events.ts +15 -0
- package/dist/cli/auth-6ABMIWQQ.js +31 -0
- package/dist/cli/{auth-7GVSCIFY.mjs → auth-KHHPB2DO.mjs} +4 -4
- package/dist/cli/{billing-CQDTIFBF.js → billing-HAR4AJZT.js} +71 -71
- package/dist/cli/{billing-BVCHOOOJ.mjs → billing-RLK734WE.mjs} +4 -4
- package/dist/cli/{chunk-SBXCXMYT.mjs → chunk-23D4YCM6.mjs} +1 -1
- package/dist/cli/{chunk-4LPBIUQ2.mjs → chunk-2MSG6WCC.mjs} +2 -2
- package/dist/cli/{chunk-W5BMDA4F.js → chunk-475OQE7H.js} +2 -2
- package/dist/cli/{chunk-FT4V72RC.mjs → chunk-4DIFNYJZ.mjs} +2 -2
- package/dist/cli/{chunk-ECBT2RXL.mjs → chunk-BQYPKV4P.mjs} +8 -8
- package/dist/cli/{chunk-VZHA6YHU.mjs → chunk-CIV43IXR.mjs} +4 -4
- package/dist/cli/{chunk-GEGCG7MG.mjs → chunk-CMK6UNJA.mjs} +8 -8
- package/dist/cli/{chunk-OJH4W52K.mjs → chunk-DRHVFFMJ.mjs} +94 -6
- package/dist/cli/{chunk-ERC3XIUO.js → chunk-FHCBNR7M.js} +27 -28
- package/dist/cli/{chunk-BIA27ZNI.mjs → chunk-GJYCHN2L.mjs} +2 -2
- package/dist/cli/{chunk-G6TM2GK2.mjs → chunk-J5NN6XCF.mjs} +5 -1
- package/dist/cli/{chunk-B2PMPAIJ.js → chunk-J5P35NOT.js} +60 -60
- package/dist/cli/{chunk-K2P365R2.js → chunk-JXCEXXKW.js} +57 -67
- package/dist/cli/{chunk-5Y2DDT5K.js → chunk-LELCMU5K.js} +26 -26
- package/dist/cli/{chunk-IDTUEEF4.mjs → chunk-M5FYGL42.mjs} +1 -1
- package/dist/cli/{chunk-DP2XSXRA.js → chunk-MQIHCQ5Z.js} +8 -8
- package/dist/cli/{chunk-3BY3UMYO.js → chunk-QO6T7ETF.js} +15 -15
- package/dist/cli/{chunk-GAQGAH34.mjs → chunk-QZMF7VDU.mjs} +22 -23
- package/dist/cli/{chunk-AC7QCWXV.mjs → chunk-RN7NIZIL.mjs} +1 -1
- package/dist/cli/{chunk-3BGGXEO5.js → chunk-SJIF45BK.js} +8 -4
- package/dist/cli/{chunk-KM3JYG56.js → chunk-TYPYDSNY.js} +9 -9
- package/dist/cli/{chunk-4EW5CMVL.js → chunk-UWV3BA43.js} +227 -227
- package/dist/cli/{chunk-DL5YQFZ6.js → chunk-VL5IYXS3.js} +112 -24
- package/dist/cli/{chunk-XAMWA45P.mjs → chunk-XRZUDK6O.mjs} +11 -21
- package/dist/cli/{chunk-KYHNFT7T.js → chunk-Y6PJVWDY.js} +1 -1
- package/dist/cli/{chunk-LQGHKRNZ.js → chunk-ZUHK5OX3.js} +48 -48
- package/dist/cli/{client-UMFL6LP2.mjs → client-JWDU663V.mjs} +3 -3
- package/dist/cli/client-KETSZR46.js +20 -0
- package/dist/cli/{csv-HYZKDWVL.js → csv-7AW5GZ4K.js} +12 -12
- package/dist/cli/{csv-EFHLVMV2.mjs → csv-CIAWYPZO.mjs} +3 -3
- package/dist/cli/{db-GVC55S5W.mjs → db-SX73JJBH.mjs} +4 -4
- package/dist/cli/{db-RPWOYGIJ.js → db-UENUIWQN.js} +29 -29
- package/dist/cli/{describe-X5WLZXOS.mjs → describe-4SC5G2FG.mjs} +8 -8
- package/dist/cli/{describe-EPNNEVZG.js → describe-7OGZQAGF.js} +15 -15
- package/dist/cli/{executions-MEQFDGRU.js → executions-UDXQNB34.js} +6 -6
- package/dist/cli/{executions-MPEF66XO.mjs → executions-YB4IAUTW.mjs} +4 -4
- package/dist/cli/{feedback-SCZSITXP.js → feedback-5SGAGRAW.js} +7 -7
- package/dist/cli/{feedback-I4UNJEHC.mjs → feedback-76QWZSW3.mjs} +3 -3
- package/dist/cli/git-4PRJV7B3.js +23 -0
- package/dist/cli/{git-5H4ZVTTV.mjs → git-ESESPEVB.mjs} +4 -4
- package/dist/cli/index.js +80 -80
- package/dist/cli/index.mjs +32 -32
- package/dist/cli/{legacy-noops-326HSG4F.mjs → legacy-noops-6F6QSRDB.mjs} +4 -4
- package/dist/cli/{legacy-noops-BH6IRSKQ.js → legacy-noops-E74OIJCW.js} +7 -7
- package/dist/cli/{monitors-SIXPXBKU.js → monitors-4MIXICCR.js} +85 -85
- package/dist/cli/{monitors-AZ64IIUO.mjs → monitors-USOHPXUY.mjs} +4 -4
- package/dist/cli/{org-2FAU4GBK.mjs → org-2RRIFNXJ.mjs} +4 -4
- package/dist/cli/{org-4VX6L3SZ.js → org-DO3Q6L7S.js} +60 -60
- package/dist/cli/{play-7VQABXW7.mjs → play-KAXYPLCQ.mjs} +7 -7
- package/dist/cli/play-SHRBJAO4.js +153 -0
- package/dist/cli/{providers-DOFRWRDC.mjs → providers-FKHLPGQO.mjs} +4 -4
- package/dist/cli/{providers-WWEGDKWO.js → providers-RCUITFFY.js} +7 -7
- package/dist/cli/{quickstart-JXN53CUE.mjs → quickstart-CDBWA6IK.mjs} +3 -3
- package/dist/cli/{quickstart-64NWQZXP.js → quickstart-XGU4M4Z5.js} +5 -5
- package/dist/cli/{search-NREYIQO7.mjs → search-QA4DAJPS.mjs} +5 -5
- package/dist/cli/search-ZHYH2BA3.js +26 -0
- package/dist/cli/{secrets-LO2S3ASQ.mjs → secrets-6S2CDL2M.mjs} +4 -4
- package/dist/cli/{secrets-FGZSIICG.js → secrets-KYKXEHNR.js} +13 -13
- package/dist/cli/{sessions-VOLIMKDL.js → sessions-PWAIUF7I.js} +5 -5
- package/dist/cli/{sessions-FYHXMESN.mjs → sessions-WGLVMQYC.mjs} +4 -4
- package/dist/cli/{settings-EYQHZTCR.js → settings-CNWO5VFJ.js} +74 -74
- package/dist/cli/{settings-WABX7ZVG.mjs → settings-FQ5CWYNQ.mjs} +7 -7
- package/dist/cli/{setup-7H5EAAZK.js → setup-ABIO2LJD.js} +41 -41
- package/dist/cli/{setup-JVECE4TU.mjs → setup-RRT66ENS.mjs} +6 -6
- package/dist/cli/{skills-BEVLJDUH.mjs → skills-3LY2RQE3.mjs} +4 -4
- package/dist/cli/skills-OBTT3OF7.js +28 -0
- package/dist/cli/tools-DMXHSMU2.js +40 -0
- package/dist/cli/{tools-5D32S2CY.mjs → tools-TQMHPW3U.mjs} +6 -6
- package/dist/cli/update-4CK752WQ.js +28 -0
- package/dist/cli/{update-EMNDLIDA.mjs → update-6U4ASVZX.mjs} +6 -6
- package/dist/cli/{workflow-BBMZ2A2Y.js → workflow-GVXAFVXF.js} +15 -15
- package/dist/cli/{workflow-MMTSJB3D.mjs → workflow-XLE4N3W3.mjs} +5 -5
- package/dist/{client-B-hjM1NX.d.mts → client-BHReRdWK.d.mts} +41 -0
- package/dist/{client-txa3om01.d.ts → client-DW3zASj8.d.ts} +41 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +6 -6
- package/dist/index.mjs +3 -3
- package/dist/install-integrity.json +77 -76
- package/dist/plays/run-request.d.mts +1 -1
- package/dist/plays/run-request.d.ts +1 -1
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +2 -2
- package/dist/release.mjs +1 -1
- package/package.json +1 -1
- package/dist/cli/auth-BFOCE76P.js +0 -31
- package/dist/cli/client-FCOLYBLU.js +0 -20
- package/dist/cli/git-YA73D6HG.js +0 -23
- package/dist/cli/play-SDZWMYJM.js +0 -153
- package/dist/cli/search-VKOBBQAN.js +0 -26
- package/dist/cli/skills-4WHWKCUN.js +0 -28
- package/dist/cli/tools-SGLGLR2H.js +0 -40
- package/dist/cli/update-HRB4G5LS.js +0 -28
|
@@ -36,7 +36,11 @@ import {
|
|
|
36
36
|
import { SDK_API_CONTRACT, SDK_VERSION } from './version.js';
|
|
37
37
|
import { apiErrorCodeFromResponse, apiErrorMessage } from './api-error';
|
|
38
38
|
import type { LiveEventEnvelope } from './types.js';
|
|
39
|
-
import {
|
|
39
|
+
import {
|
|
40
|
+
agentSessionIdFromEnvironment,
|
|
41
|
+
detectAgentRuntime,
|
|
42
|
+
isCoworkLikeSandbox,
|
|
43
|
+
} from './agent-runtime.js';
|
|
40
44
|
import { readSdkSkillsLocalVersion } from './skills-version.js';
|
|
41
45
|
import { deploymentProtectionHeaders } from './deployment-protection.js';
|
|
42
46
|
import {
|
|
@@ -289,6 +293,10 @@ export class HttpClient {
|
|
|
289
293
|
if (skillsVersion) {
|
|
290
294
|
headers['X-Deepline-Skills-Version'] = skillsVersion;
|
|
291
295
|
}
|
|
296
|
+
const agentSessionId = agentSessionIdFromEnvironment();
|
|
297
|
+
if (agentSessionId) {
|
|
298
|
+
headers['X-Deepline-Agent-Session-Id'] = agentSessionId;
|
|
299
|
+
}
|
|
292
300
|
const playArtifactR2Prefix =
|
|
293
301
|
typeof process !== 'undefined'
|
|
294
302
|
? process.env?.DEEPLINE_PLAY_ARTIFACT_R2_PREFIX
|
|
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
|
|
|
200
200
|
// getters keep their established compatibility behavior.
|
|
201
201
|
// 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
|
|
202
202
|
// 0.3.90 is the first deliberately versioned SDK release for API v3.
|
|
203
|
-
version: '0.3.
|
|
203
|
+
version: '0.3.344',
|
|
204
204
|
updateSummary:
|
|
205
205
|
'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
|
|
206
206
|
packageCapabilities: {
|
|
@@ -10,6 +10,7 @@ import { compileFunction } from 'node:vm';
|
|
|
10
10
|
import { gunzipSync } from 'node:zlib';
|
|
11
11
|
import { Readable } from 'node:stream';
|
|
12
12
|
import { parse } from 'csv-parse';
|
|
13
|
+
import { csvInputTextOptions } from '../../plays/csv-text-repair';
|
|
13
14
|
import { install as installSourceMapSupport } from 'source-map-support';
|
|
14
15
|
import {
|
|
15
16
|
createDeferredPlayDataset,
|
|
@@ -1559,7 +1560,14 @@ async function emitAndExit(
|
|
|
1559
1560
|
function parseCsvStream(
|
|
1560
1561
|
source: NodeJS.ReadableStream,
|
|
1561
1562
|
): AsyncIterable<Record<string, unknown>> {
|
|
1562
|
-
|
|
1563
|
+
// Every Play's CSV input passes through here, so this is where a customer
|
|
1564
|
+
// file's BOM and mis-decoded UTF-8 ("j̩r̫me", "o’malley") get fixed before
|
|
1565
|
+
// any row reaches a provider. See ../../plays/csv-text-repair.
|
|
1566
|
+
const parser = parse({
|
|
1567
|
+
...csvInputTextOptions(),
|
|
1568
|
+
skip_empty_lines: true,
|
|
1569
|
+
trim: true,
|
|
1570
|
+
});
|
|
1563
1571
|
// `Readable.pipe()` does not forward source errors to the destination. A
|
|
1564
1572
|
// missing staged file therefore used to emit an unhandled `error` from
|
|
1565
1573
|
// createReadStream and kill the Daytona process outside main().catch().
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repair UTF-8 text that was decoded with the wrong single-byte code page and
|
|
3
|
+
* re-encoded ("mojibake"), the way Excel exports and copy-pasted sheets often
|
|
4
|
+
* arrive: "jérôme" as "jérôme" (read as Windows-1252) or "o’malley" as
|
|
5
|
+
* "o’malley" (read as Mac Roman).
|
|
6
|
+
*
|
|
7
|
+
* Why this exists: a 2026-08 ContactOut batch of 50 LinkedIn profiles was
|
|
8
|
+
* rejected outright because one slug carried "o’malley", and the same corrupt
|
|
9
|
+
* URLs had already been sent to LimaData and LeadMagic as paid misses. The
|
|
10
|
+
* corruption is in the customer's file, so the fix belongs where every CSV
|
|
11
|
+
* enters a Play: the runtime's CSV parser and the CLI's local CSV reader.
|
|
12
|
+
*
|
|
13
|
+
* Only runs of non-ASCII characters are touched, and a run is rewritten only
|
|
14
|
+
* when mapping it back through one of the two code pages yields strictly
|
|
15
|
+
* valid UTF-8. Correctly encoded text ("José", "Zoltán Erdős", CJK, emoji)
|
|
16
|
+
* never satisfies that test and passes through unchanged.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** Windows-1252 bytes 0x80-0x9F that are not Latin-1 identity. */
|
|
20
|
+
const CP1252_HIGH_TO_BYTE = new Map<number, number>([
|
|
21
|
+
[0x20ac, 0x80],
|
|
22
|
+
[0x201a, 0x82],
|
|
23
|
+
[0x0192, 0x83],
|
|
24
|
+
[0x201e, 0x84],
|
|
25
|
+
[0x2026, 0x85],
|
|
26
|
+
[0x2020, 0x86],
|
|
27
|
+
[0x2021, 0x87],
|
|
28
|
+
[0x02c6, 0x88],
|
|
29
|
+
[0x2030, 0x89],
|
|
30
|
+
[0x0160, 0x8a],
|
|
31
|
+
[0x2039, 0x8b],
|
|
32
|
+
[0x0152, 0x8c],
|
|
33
|
+
[0x017d, 0x8e],
|
|
34
|
+
[0x2018, 0x91],
|
|
35
|
+
[0x2019, 0x92],
|
|
36
|
+
[0x201c, 0x93],
|
|
37
|
+
[0x201d, 0x94],
|
|
38
|
+
[0x2022, 0x95],
|
|
39
|
+
[0x2013, 0x96],
|
|
40
|
+
[0x2014, 0x97],
|
|
41
|
+
[0x02dc, 0x98],
|
|
42
|
+
[0x2122, 0x99],
|
|
43
|
+
[0x0161, 0x9a],
|
|
44
|
+
[0x203a, 0x9b],
|
|
45
|
+
[0x0153, 0x9c],
|
|
46
|
+
[0x017e, 0x9e],
|
|
47
|
+
[0x0178, 0x9f],
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
/** Mac OS Roman bytes 0x80-0xFF, in order (Python `bytes(range(128,256)).decode('mac_roman')`). */
|
|
51
|
+
const MAC_ROMAN_HIGH =
|
|
52
|
+
'ÄÅÇÉÑÖÜáàâäãåçéè' +
|
|
53
|
+
'êëíìîïñóòôöõúùûü' +
|
|
54
|
+
'†°¢£§•¶ß®©™´¨≠ÆØ' +
|
|
55
|
+
'∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
|
|
56
|
+
'¿¡¬√ƒ≈∆«»… ÀÃÕŒœ' +
|
|
57
|
+
'–—“”‘’÷◊ÿŸ⁄€‹›fifl' +
|
|
58
|
+
'‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ' +
|
|
59
|
+
'ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ';
|
|
60
|
+
const MAC_ROMAN_TO_BYTE = new Map<number, number>(
|
|
61
|
+
[...MAC_ROMAN_HIGH].map((ch, i) => [ch.codePointAt(0)!, 0x80 + i] as const),
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
const STRICT_UTF8 = new TextDecoder('utf-8', { fatal: true });
|
|
65
|
+
|
|
66
|
+
function cp1252Byte(code: number): number | null {
|
|
67
|
+
if (code < 0x100) return code;
|
|
68
|
+
return CP1252_HIGH_TO_BYTE.get(code) ?? null;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function macRomanByte(code: number): number | null {
|
|
72
|
+
if (code < 0x80) return code;
|
|
73
|
+
return MAC_ROMAN_TO_BYTE.get(code) ?? null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function decodeAs(
|
|
77
|
+
run: string,
|
|
78
|
+
toByte: (code: number) => number | null,
|
|
79
|
+
): string | null {
|
|
80
|
+
const bytes = new Uint8Array(run.length);
|
|
81
|
+
let i = 0;
|
|
82
|
+
for (const ch of run) {
|
|
83
|
+
const byte = toByte(ch.codePointAt(0)!);
|
|
84
|
+
if (byte === null) return null;
|
|
85
|
+
bytes[i++] = byte;
|
|
86
|
+
}
|
|
87
|
+
// A real mojibake run always encodes at least one multi-byte sequence, so it
|
|
88
|
+
// must contain a UTF-8 lead byte; a lone Latin-1 letter never does.
|
|
89
|
+
if (!bytes.subarray(0, i).some((b) => b >= 0xc2 && b <= 0xf4)) return null;
|
|
90
|
+
try {
|
|
91
|
+
return STRICT_UTF8.decode(bytes.subarray(0, i));
|
|
92
|
+
} catch {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Maximal runs of non-ASCII characters are the only places mojibake can live. */
|
|
98
|
+
const NON_ASCII_RUN = /[^\u0000-\u007f]+/g;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Return `value` with mis-decoded UTF-8 runs repaired. Text that is already
|
|
102
|
+
* valid UTF-8 comes back identical (same string instance when nothing changed).
|
|
103
|
+
*/
|
|
104
|
+
export function repairMisdecodedText(value: string): string {
|
|
105
|
+
// Fast path: pure ASCII cannot be mojibake.
|
|
106
|
+
if (!/[^\u0000-\u007f]/.test(value)) return value;
|
|
107
|
+
let changed = false;
|
|
108
|
+
const repaired = value.replace(NON_ASCII_RUN, (run) => {
|
|
109
|
+
const fixed = decodeAs(run, cp1252Byte) ?? decodeAs(run, macRomanByte);
|
|
110
|
+
if (fixed === null || fixed === run) return run;
|
|
111
|
+
changed = true;
|
|
112
|
+
return fixed;
|
|
113
|
+
});
|
|
114
|
+
return changed ? repaired : value;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Repair every string value of a parsed CSV record in place and return it. */
|
|
118
|
+
export function repairRecordText<T extends Record<string, unknown>>(
|
|
119
|
+
record: T,
|
|
120
|
+
): T {
|
|
121
|
+
for (const key of Object.keys(record)) {
|
|
122
|
+
const value = record[key];
|
|
123
|
+
if (typeof value === 'string') {
|
|
124
|
+
(record as Record<string, unknown>)[key] = repairMisdecodedText(value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return record;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* `csv-parse` options every CSV entry point shares: strip a UTF-8 BOM, repair
|
|
132
|
+
* mojibake in header names (a corrupt header never matches a column mapping)
|
|
133
|
+
* and in every string cell.
|
|
134
|
+
*/
|
|
135
|
+
export function csvInputTextOptions(): {
|
|
136
|
+
bom: true;
|
|
137
|
+
columns: (header: string[]) => string[];
|
|
138
|
+
on_record: <T extends Record<string, unknown>>(record: T) => T;
|
|
139
|
+
} {
|
|
140
|
+
return {
|
|
141
|
+
bom: true,
|
|
142
|
+
columns: (header) => header.map(repairMisdecodedText),
|
|
143
|
+
on_record: repairRecordText,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
@@ -3,9 +3,11 @@ export const BILLING_SALES_DESTINATION_KEY = 'shadow.billing-sales.slack';
|
|
|
3
3
|
export const BILLING_SALES_SLACK_CHANNEL_ID = 'C0AGWVD2TNK';
|
|
4
4
|
export const BILLING_SALES_CONNECTION_ID = 'platform-reporting-bot';
|
|
5
5
|
export const BILLING_SALES_CREDIT_PURCHASE_MINIMUM_CENTS = 15_000;
|
|
6
|
+
export const BILLING_PURCHASE_LATE_RULE_KEY = 'internal.billing.purchase_late';
|
|
6
7
|
export const BILLING_SALES_RULE_KEYS: readonly string[] = [
|
|
7
8
|
'internal.billing.credit_purchase',
|
|
8
9
|
'internal.billing.paid_plan',
|
|
10
|
+
BILLING_PURCHASE_LATE_RULE_KEY,
|
|
9
11
|
];
|
|
10
12
|
|
|
11
13
|
export function isPlatformNotificationGroup(groupKey: string): boolean {
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
import { legacySlackNotificationType } from './legacy-slack';
|
|
15
15
|
import type { NotificationText } from './content';
|
|
16
16
|
import {
|
|
17
|
+
BILLING_PURCHASE_LATE_RULE_KEY,
|
|
17
18
|
BILLING_SALES_CREDIT_PURCHASE_MINIMUM_CENTS,
|
|
18
19
|
BILLING_SALES_GROUP_KEY,
|
|
19
20
|
} from './billing-sales';
|
|
@@ -814,6 +815,38 @@ const PRODUCT_NOTIFICATION_TYPE_REGISTRY = [
|
|
|
814
815
|
}),
|
|
815
816
|
},
|
|
816
817
|
},
|
|
818
|
+
{
|
|
819
|
+
id: BILLING_PURCHASE_LATE_RULE_KEY,
|
|
820
|
+
eventName: ProductNotificationEvent.BillingPurchaseLate,
|
|
821
|
+
requiredFilter: {},
|
|
822
|
+
allowedTriggers: ['each_match'],
|
|
823
|
+
catalog: undefined,
|
|
824
|
+
shadow: true,
|
|
825
|
+
rule: {
|
|
826
|
+
default: {
|
|
827
|
+
ruleKey: BILLING_PURCHASE_LATE_RULE_KEY,
|
|
828
|
+
groupKey: BILLING_SALES_GROUP_KEY,
|
|
829
|
+
},
|
|
830
|
+
create: (_input, base) => ({
|
|
831
|
+
...base,
|
|
832
|
+
repeatMode: 'every_match',
|
|
833
|
+
trigger: { kind: 'each_match' },
|
|
834
|
+
}),
|
|
835
|
+
present: ({ payload }) => ({
|
|
836
|
+
title: `Purchase not completed after ${payload.thresholdSeconds} seconds`,
|
|
837
|
+
summary: [
|
|
838
|
+
'<!channel> Purchase fulfillment in ',
|
|
839
|
+
{ workspace: true },
|
|
840
|
+
' needs investigation. Verify payment and fulfillment independently.',
|
|
841
|
+
],
|
|
842
|
+
details: [`Operation: ${payload.operationId}`],
|
|
843
|
+
targetUrl: String(payload.targetUrl),
|
|
844
|
+
subjectKind: 'billing_operation',
|
|
845
|
+
subjectId: String(payload.operationId),
|
|
846
|
+
severity: 'error',
|
|
847
|
+
}),
|
|
848
|
+
},
|
|
849
|
+
},
|
|
817
850
|
{
|
|
818
851
|
id: 'play.failed',
|
|
819
852
|
eventName: ProductNotificationEvent.PlayRunCompleted,
|
|
@@ -20,6 +20,7 @@ export const ProductNotificationEvent = {
|
|
|
20
20
|
CreditsUsageRecorded: 'credits.usage.recorded',
|
|
21
21
|
AutoTopupLimitObserved: 'billing.auto_topup.limit_observed',
|
|
22
22
|
BillingPlanPurchased: 'billing.plan.purchased',
|
|
23
|
+
BillingPurchaseLate: 'billing.purchase.late',
|
|
23
24
|
MonitorLifecycleChanged: 'monitor.lifecycle.changed',
|
|
24
25
|
PlayLifecycleChanged: 'play.lifecycle.changed',
|
|
25
26
|
PlayRunCompleted: 'play.run.completed',
|
|
@@ -36,6 +37,7 @@ export type ProductNotificationEvent =
|
|
|
36
37
|
export const ProductNotificationProducerKey = {
|
|
37
38
|
BillingCredits: 'billing.credits',
|
|
38
39
|
BillingPlans: 'billing.plans',
|
|
40
|
+
BillingPurchases: 'billing.purchases',
|
|
39
41
|
BillingUsage: 'billing.usage',
|
|
40
42
|
MonitorsLifecycle: 'monitors.lifecycle',
|
|
41
43
|
PlaysLifecycle: 'plays.lifecycle',
|
|
@@ -61,6 +63,7 @@ export const PRODUCT_NOTIFICATION_EVENT_NAMES = [
|
|
|
61
63
|
ProductNotificationEvent.AutoTopupLimitObserved,
|
|
62
64
|
ProductNotificationEvent.CreditsPurchaseCompleted,
|
|
63
65
|
ProductNotificationEvent.BillingPlanPurchased,
|
|
66
|
+
ProductNotificationEvent.BillingPurchaseLate,
|
|
64
67
|
] as const;
|
|
65
68
|
|
|
66
69
|
export const PRODUCT_NOTIFICATION_COMPATIBILITY_EVENT_NAMES = [
|
|
@@ -225,6 +228,18 @@ export const PRODUCT_NOTIFICATION_EVENT_DEFINITIONS: readonly ProductNotificatio
|
|
|
225
228
|
orderingSubjectFact: 'accountId',
|
|
226
229
|
allowedTriggers: ['each_match'],
|
|
227
230
|
},
|
|
231
|
+
{
|
|
232
|
+
eventName: ProductNotificationEvent.BillingPurchaseLate,
|
|
233
|
+
producerKey: ProductNotificationProducerKey.BillingPurchases,
|
|
234
|
+
requiredFacts: {
|
|
235
|
+
accountId: 'string',
|
|
236
|
+
operationId: 'string',
|
|
237
|
+
thresholdSeconds: 'number',
|
|
238
|
+
targetUrl: 'string',
|
|
239
|
+
},
|
|
240
|
+
orderingSubjectFact: 'operationId',
|
|
241
|
+
allowedTriggers: ['each_match'],
|
|
242
|
+
},
|
|
228
243
|
...PRODUCT_NOTIFICATION_COMPATIBILITY_EVENT_NAMES.map((eventName) => ({
|
|
229
244
|
eventName,
|
|
230
245
|
producerKey: ProductNotificationProducerKey.LegacyProductNotifications,
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
var _chunkJXCEXXKWjs = require('./chunk-JXCEXXKW.js');
|
|
13
|
+
require('./chunk-VL5IYXS3.js');
|
|
14
|
+
require('./chunk-SJIF45BK.js');
|
|
15
|
+
require('./chunk-XNYIZMNQ.js');
|
|
16
|
+
require('./chunk-Y6PJVWDY.js');
|
|
17
|
+
require('./chunk-7P5AA3SN.js');
|
|
18
|
+
require('./chunk-OG64RBAC.js');
|
|
19
|
+
require('./chunk-COGTRVWW.js');
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
exports.EXIT_WORKSPACE_MISMATCH = _chunkJXCEXXKWjs.EXIT_WORKSPACE_MISMATCH; exports.clearPendingClaim = _chunkJXCEXXKWjs.clearPendingClaim; exports.clearSatisfiedPendingClaim = _chunkJXCEXXKWjs.clearSatisfiedPendingClaim; exports.handleRegister = _chunkJXCEXXKWjs.handleRegister; exports.handleStatus = _chunkJXCEXXKWjs.handleStatus; exports.handleWait = _chunkJXCEXXKWjs.handleWait; exports.readPendingAuthClaim = _chunkJXCEXXKWjs.readPendingAuthClaim; exports.registerAuthCommands = _chunkJXCEXXKWjs.registerAuthCommands; exports.reportSetupCompleted = _chunkJXCEXXKWjs.reportSetupCompleted; exports.resolvePendingAuthClaimForResume = _chunkJXCEXXKWjs.resolvePendingAuthClaimForResume;
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
registerAuthCommands,
|
|
10
10
|
reportSetupCompleted,
|
|
11
11
|
resolvePendingAuthClaimForResume
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-XRZUDK6O.mjs";
|
|
13
|
+
import "./chunk-DRHVFFMJ.mjs";
|
|
14
|
+
import "./chunk-J5NN6XCF.mjs";
|
|
15
15
|
import "./chunk-DLIRSHV6.mjs";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-RN7NIZIL.mjs";
|
|
17
17
|
import "./chunk-NXGCO4JB.mjs";
|
|
18
18
|
import "./chunk-WZYKRD7T.mjs";
|
|
19
19
|
import "./chunk-KRD6H754.mjs";
|