@futdevpro/nts-dynamo 1.15.358 → 1.15.362
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/build/_collections/email-account.util.d.ts +70 -0
- package/build/_collections/email-account.util.d.ts.map +1 -0
- package/build/_collections/email-account.util.js +113 -0
- package/build/_collections/email-account.util.js.map +1 -0
- package/build/_modules/git-sync/_models/git-sync.interface.d.ts +94 -0
- package/build/_modules/git-sync/_models/git-sync.interface.d.ts.map +1 -0
- package/build/_modules/git-sync/_models/git-sync.interface.js +3 -0
- package/build/_modules/git-sync/_models/git-sync.interface.js.map +1 -0
- package/build/_modules/git-sync/git-sync-input.util.d.ts +28 -0
- package/build/_modules/git-sync/git-sync-input.util.d.ts.map +1 -0
- package/build/_modules/git-sync/git-sync-input.util.js +146 -0
- package/build/_modules/git-sync/git-sync-input.util.js.map +1 -0
- package/build/_modules/git-sync/git-sync.service.d.ts +54 -0
- package/build/_modules/git-sync/git-sync.service.d.ts.map +1 -0
- package/build/_modules/git-sync/git-sync.service.js +274 -0
- package/build/_modules/git-sync/git-sync.service.js.map +1 -0
- package/build/_modules/git-sync/index.d.ts +8 -0
- package/build/_modules/git-sync/index.d.ts.map +1 -0
- package/build/_modules/git-sync/index.js +11 -0
- package/build/_modules/git-sync/index.js.map +1 -0
- package/build/_modules/imap/_models/imap-mailbox-status.interface.d.ts +10 -0
- package/build/_modules/imap/_models/imap-mailbox-status.interface.d.ts.map +1 -0
- package/build/_modules/imap/_models/imap-mailbox-status.interface.js +3 -0
- package/build/_modules/imap/_models/imap-mailbox-status.interface.js.map +1 -0
- package/build/_modules/imap/_models/imap-message-meta.interface.d.ts +18 -0
- package/build/_modules/imap/_models/imap-message-meta.interface.d.ts.map +1 -0
- package/build/_modules/imap/_models/imap-message-meta.interface.js +3 -0
- package/build/_modules/imap/_models/imap-message-meta.interface.js.map +1 -0
- package/build/_modules/imap/_models/imap-sync.interface.d.ts +22 -0
- package/build/_modules/imap/_models/imap-sync.interface.d.ts.map +1 -0
- package/build/_modules/imap/_models/imap-sync.interface.js +3 -0
- package/build/_modules/imap/_models/imap-sync.interface.js.map +1 -0
- package/build/_modules/imap/_models/imap-transport.interface.d.ts +16 -0
- package/build/_modules/imap/_models/imap-transport.interface.d.ts.map +1 -0
- package/build/_modules/imap/_models/imap-transport.interface.js +3 -0
- package/build/_modules/imap/_models/imap-transport.interface.js.map +1 -0
- package/build/_modules/imap/imap-flow.transport.d.ts +58 -0
- package/build/_modules/imap/imap-flow.transport.d.ts.map +1 -0
- package/build/_modules/imap/imap-flow.transport.js +156 -0
- package/build/_modules/imap/imap-flow.transport.js.map +1 -0
- package/build/_modules/imap/imap-inbox.service.d.ts +36 -0
- package/build/_modules/imap/imap-inbox.service.d.ts.map +1 -0
- package/build/_modules/imap/imap-inbox.service.js +81 -0
- package/build/_modules/imap/imap-inbox.service.js.map +1 -0
- package/build/_modules/imap/index.d.ts +11 -0
- package/build/_modules/imap/index.d.ts.map +1 -0
- package/build/_modules/imap/index.js +14 -0
- package/build/_modules/imap/index.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/package.json +26 -3
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DyNTS_ImapFlow_Transport = void 0;
|
|
37
|
+
const email_account_util_1 = require("../../_collections/email-account.util");
|
|
38
|
+
const optional_peer_util_1 = require("../../_collections/optional-peer.util");
|
|
39
|
+
/**
|
|
40
|
+
* BFR-OLDLIGHTSITE-002 — the default IMAP transport, over `imapflow` (an OPTIONAL peer dependency: only a project that
|
|
41
|
+
* imports `@futdevpro/nts-dynamo/imap` needs it installed).
|
|
42
|
+
*
|
|
43
|
+
* @description One connection per call (connect → lock the mailbox → work → release → logout), so a long-running
|
|
44
|
+
* server never holds a stale IMAP session. imapflow's own logger is OFF: it would print protocol traffic, which can
|
|
45
|
+
* include the login.
|
|
46
|
+
*/
|
|
47
|
+
class DyNTS_ImapFlow_Transport {
|
|
48
|
+
settings;
|
|
49
|
+
clientFactory;
|
|
50
|
+
constructor(settings, clientFactory = DyNTS_ImapFlow_Transport.defaultClientFactory) {
|
|
51
|
+
this.settings = settings;
|
|
52
|
+
this.clientFactory = clientFactory;
|
|
53
|
+
}
|
|
54
|
+
/** The lazy import of the optional peer (a literal specifier — the `verify:lazy-peers` gate checks it). */
|
|
55
|
+
static importImapFlow = () => Promise.resolve().then(() => __importStar(require('imapflow')));
|
|
56
|
+
/** A real imapflow client; a missing `imapflow` is a 501 `DyNTS-OPT-MIS` that says what to install. */
|
|
57
|
+
static async defaultClientFactory(options) {
|
|
58
|
+
const imapflow = await optional_peer_util_1.DyNTS_OptionalPeer_Util.load({
|
|
59
|
+
packageName: 'imapflow', range: '>=2.0.7 <3', feature: 'the IMAP transport',
|
|
60
|
+
importer: () => DyNTS_ImapFlow_Transport.importImapFlow(),
|
|
61
|
+
});
|
|
62
|
+
return new imapflow.ImapFlow(options);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The transport of a Keystore-referenced account — the SAME key pattern as the SMTP accounts
|
|
66
|
+
* (`<REF>_HOST` / `_PORT` / `_USER` / `_PASS`, see `DyNTS_EmailAccount_Util`). Not configured → `transport: null` and
|
|
67
|
+
* the resolution (key NAMES only).
|
|
68
|
+
*/
|
|
69
|
+
static fromCredentialRef(ref) {
|
|
70
|
+
const resolution = email_account_util_1.DyNTS_EmailAccount_Util.resolve({ credentialRef: ref.credentialRef, rootPath: '', env: ref.env });
|
|
71
|
+
if (resolution.status !== 'configured') {
|
|
72
|
+
return { transport: null, resolution: resolution };
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
transport: new DyNTS_ImapFlow_Transport({
|
|
76
|
+
host: resolution.settings.host,
|
|
77
|
+
port: resolution.settings.port,
|
|
78
|
+
user: resolution.settings.email,
|
|
79
|
+
pass: resolution.settings.pass,
|
|
80
|
+
secure: ref.secure,
|
|
81
|
+
}),
|
|
82
|
+
resolution: resolution,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async status(mailbox) {
|
|
86
|
+
return this.withClient(async (client) => {
|
|
87
|
+
const status = await client.status(mailbox, {
|
|
88
|
+
messages: true, uidNext: true, uidValidity: true, unseen: true,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
uidValidity: String(status.uidValidity ?? ''),
|
|
92
|
+
uidNext: status.uidNext ?? 1,
|
|
93
|
+
unseen: status.unseen ?? 0,
|
|
94
|
+
messages: status.messages ?? 0,
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async fetchMetaFromUid(mailbox, fromUid, limit) {
|
|
99
|
+
return this.withClient(async (client) => {
|
|
100
|
+
const lock = await client.getMailboxLock(mailbox);
|
|
101
|
+
const result = [];
|
|
102
|
+
try {
|
|
103
|
+
for await (const message of client.fetch(`${Math.max(1, Math.floor(fromUid))}:*`, { uid: true, envelope: true, flags: true, size: true, internalDate: true }, { uid: true })) {
|
|
104
|
+
result.push(DyNTS_ImapFlow_Transport.toMeta(message));
|
|
105
|
+
if (result.length >= limit) {
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
lock.release();
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/** Connections are per call — nothing to close. */
|
|
117
|
+
async close() {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
/** imapflow's message → our metadata (addresses as `name <address>`, the date parsed, `\Seen` → seen). */
|
|
121
|
+
static toMeta(message) {
|
|
122
|
+
const address = (list) => (list ?? [])
|
|
123
|
+
.map((entry) => (entry.name ? `${entry.name} <${entry.address ?? ''}>` : String(entry.address ?? '')))
|
|
124
|
+
.filter((text) => text.length > 0);
|
|
125
|
+
const rawDate = message.envelope?.date ?? message.internalDate;
|
|
126
|
+
const date = rawDate ? new Date(rawDate) : null;
|
|
127
|
+
return {
|
|
128
|
+
uid: message.uid,
|
|
129
|
+
messageId: message.envelope?.messageId ?? '',
|
|
130
|
+
subject: message.envelope?.subject ?? '',
|
|
131
|
+
from: address(message.envelope?.from),
|
|
132
|
+
to: address(message.envelope?.to),
|
|
133
|
+
date: date && !Number.isNaN(date.getTime()) ? date : null,
|
|
134
|
+
seen: message.flags?.has('\\Seen') ?? false,
|
|
135
|
+
size: message.size ?? 0,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
async withClient(work) {
|
|
139
|
+
const client = await this.clientFactory({
|
|
140
|
+
host: this.settings.host,
|
|
141
|
+
port: this.settings.port,
|
|
142
|
+
secure: this.settings.secure ?? this.settings.port === 993,
|
|
143
|
+
auth: { user: this.settings.user, pass: this.settings.pass },
|
|
144
|
+
logger: false,
|
|
145
|
+
});
|
|
146
|
+
await client.connect();
|
|
147
|
+
try {
|
|
148
|
+
return await work(client);
|
|
149
|
+
}
|
|
150
|
+
finally {
|
|
151
|
+
await client.logout().catch(() => undefined);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.DyNTS_ImapFlow_Transport = DyNTS_ImapFlow_Transport;
|
|
156
|
+
//# sourceMappingURL=imap-flow.transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imap-flow.transport.js","sourceRoot":"","sources":["../../../src/_modules/imap/imap-flow.transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { DyNTS_ImapSyncCursor_Interface, DyNTS_ImapSyncResult_Interface } from './_models/imap-sync.interface';
|
|
2
|
+
import { DyNTS_ImapTransport_Interface } from './_models/imap-transport.interface';
|
|
3
|
+
/** Settings of one inbox. */
|
|
4
|
+
export interface DyNTS_ImapInbox_Settings_Interface {
|
|
5
|
+
transport: DyNTS_ImapTransport_Interface;
|
|
6
|
+
/** Default `INBOX`. */
|
|
7
|
+
mailbox?: string;
|
|
8
|
+
/** Messages per `syncInbox` call (default 50, 1–500). */
|
|
9
|
+
batchSize?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* BFR-OLDLIGHTSITE-002 — a provider-independent IMAP inbox: unread count + an idempotent, cursor-based metadata sync.
|
|
13
|
+
*
|
|
14
|
+
* @description The caller keeps a cursor (`{ uidValidity, lastUid }`) and passes it back; the same cursor always yields
|
|
15
|
+
* the same step, so a crashed or repeated sync never skips or duplicates a message. When the server's UIDVALIDITY
|
|
16
|
+
* changes (it renumbered the mailbox), the old cursor is meaningless: the sync restarts from UID 1 and says so
|
|
17
|
+
* (`reset: true`). Only metadata is read — never a body or an attachment.
|
|
18
|
+
*/
|
|
19
|
+
export declare class DyNTS_ImapInbox_Service {
|
|
20
|
+
private readonly transport;
|
|
21
|
+
private readonly mailbox;
|
|
22
|
+
private readonly batchSize;
|
|
23
|
+
/** Mailbox defaults to `INBOX`; the batch size is clamped to 1–500. */
|
|
24
|
+
constructor(settings: DyNTS_ImapInbox_Settings_Interface);
|
|
25
|
+
/** The number of unseen messages in the mailbox. */
|
|
26
|
+
getUnreadCount(): Promise<number>;
|
|
27
|
+
/** One sync step from `cursor` (none = the first sync). */
|
|
28
|
+
syncInbox(cursor?: DyNTS_ImapSyncCursor_Interface | null): Promise<DyNTS_ImapSyncResult_Interface>;
|
|
29
|
+
/** Closes the transport. */
|
|
30
|
+
close(): Promise<void>;
|
|
31
|
+
/** The mailbox status, through the error-wrapping `call`. */
|
|
32
|
+
private readStatus;
|
|
33
|
+
/** Runs a transport call; a failure becomes a rich, secret-free `DyFM_Error`. */
|
|
34
|
+
private call;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=imap-inbox.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imap-inbox.service.d.ts","sourceRoot":"","sources":["../../../src/_modules/imap/imap-inbox.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,6BAA6B;AAC7B,MAAM,WAAW,kCAAkC;IACjD,SAAS,EAAE,6BAA6B,CAAC;IACzC,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,uEAAuE;gBAC3D,QAAQ,EAAE,kCAAkC;IAMxD,oDAAoD;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAMvC,2DAA2D;IACrD,SAAS,CAAC,MAAM,CAAC,EAAE,8BAA8B,GAAG,IAAI,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAkCxG,4BAA4B;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,6DAA6D;YAC/C,UAAU;IAMxB,iFAAiF;YACnE,IAAI;CAcnB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DyNTS_ImapInbox_Service = void 0;
|
|
4
|
+
const fsm_dynamo_1 = require("@futdevpro/fsm-dynamo");
|
|
5
|
+
const global_settings_const_1 = require("../../_collections/global-settings.const");
|
|
6
|
+
const secret_redaction_util_1 = require("../../_collections/secret-redaction.util");
|
|
7
|
+
/**
|
|
8
|
+
* BFR-OLDLIGHTSITE-002 — a provider-independent IMAP inbox: unread count + an idempotent, cursor-based metadata sync.
|
|
9
|
+
*
|
|
10
|
+
* @description The caller keeps a cursor (`{ uidValidity, lastUid }`) and passes it back; the same cursor always yields
|
|
11
|
+
* the same step, so a crashed or repeated sync never skips or duplicates a message. When the server's UIDVALIDITY
|
|
12
|
+
* changes (it renumbered the mailbox), the old cursor is meaningless: the sync restarts from UID 1 and says so
|
|
13
|
+
* (`reset: true`). Only metadata is read — never a body or an attachment.
|
|
14
|
+
*/
|
|
15
|
+
class DyNTS_ImapInbox_Service {
|
|
16
|
+
transport;
|
|
17
|
+
mailbox;
|
|
18
|
+
batchSize;
|
|
19
|
+
/** Mailbox defaults to `INBOX`; the batch size is clamped to 1–500. */
|
|
20
|
+
constructor(settings) {
|
|
21
|
+
this.transport = settings.transport;
|
|
22
|
+
this.mailbox = settings.mailbox || 'INBOX';
|
|
23
|
+
this.batchSize = Math.min(500, Math.max(1, Math.floor(settings.batchSize ?? 50)));
|
|
24
|
+
}
|
|
25
|
+
/** The number of unseen messages in the mailbox. */
|
|
26
|
+
async getUnreadCount() {
|
|
27
|
+
const status = await this.readStatus('DyNTS-IMAP-UNREAD');
|
|
28
|
+
return status.unseen;
|
|
29
|
+
}
|
|
30
|
+
/** One sync step from `cursor` (none = the first sync). */
|
|
31
|
+
async syncInbox(cursor) {
|
|
32
|
+
const status = await this.readStatus('DyNTS-IMAP-SYNC-STATUS');
|
|
33
|
+
const reset = !cursor || cursor.uidValidity !== status.uidValidity;
|
|
34
|
+
const lastUid = reset ? 0 : Math.max(0, Math.floor(cursor.lastUid));
|
|
35
|
+
const fromUid = lastUid + 1;
|
|
36
|
+
if (fromUid >= status.uidNext) {
|
|
37
|
+
return {
|
|
38
|
+
cursor: { uidValidity: status.uidValidity, lastUid: lastUid }, messages: [], reset: reset, hasMore: false,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const fetched = await this.call('fetch', 'DyNTS-IMAP-SYNC-FETCH', () => (this.transport.fetchMetaFromUid(this.mailbox, fromUid, this.batchSize)));
|
|
42
|
+
// IMAP `N:*` also returns the newest message when N is past it — never deliver an old one again
|
|
43
|
+
const messages = fetched
|
|
44
|
+
.filter((message) => message.uid >= fromUid)
|
|
45
|
+
.sort((a, b) => a.uid - b.uid)
|
|
46
|
+
.slice(0, this.batchSize);
|
|
47
|
+
const newLastUid = messages.length ? messages[messages.length - 1].uid : lastUid;
|
|
48
|
+
return {
|
|
49
|
+
cursor: { uidValidity: status.uidValidity, lastUid: newLastUid },
|
|
50
|
+
messages: messages,
|
|
51
|
+
reset: reset,
|
|
52
|
+
hasMore: messages.length === this.batchSize && newLastUid + 1 < status.uidNext,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/** Closes the transport. */
|
|
56
|
+
async close() {
|
|
57
|
+
await this.transport.close();
|
|
58
|
+
}
|
|
59
|
+
/** The mailbox status, through the error-wrapping `call`. */
|
|
60
|
+
async readStatus(code) {
|
|
61
|
+
return this.call('status', code, () => this.transport.status(this.mailbox));
|
|
62
|
+
}
|
|
63
|
+
/** Runs a transport call; a failure becomes a rich, secret-free `DyFM_Error`. */
|
|
64
|
+
async call(operation, code, run) {
|
|
65
|
+
try {
|
|
66
|
+
return await run();
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new fsm_dynamo_1.DyFM_Error({
|
|
70
|
+
status: 503,
|
|
71
|
+
errorCode: `${global_settings_const_1.DyNTS_global_settings.systemShortCodeName}|${code}`,
|
|
72
|
+
message: `IMAP ${operation} failed on "${this.mailbox}": `
|
|
73
|
+
+ secret_redaction_util_1.DyNTS_SecretRedaction_Util.redactText(fsm_dynamo_1.DyFM_Error.getErrorMessage(error)),
|
|
74
|
+
userMessage: 'The mailbox cannot be read at the moment. Please try again later.',
|
|
75
|
+
error: secret_redaction_util_1.DyNTS_SecretRedaction_Util.redactErrorForLog(error),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.DyNTS_ImapInbox_Service = DyNTS_ImapInbox_Service;
|
|
81
|
+
//# sourceMappingURL=imap-inbox.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imap-inbox.service.js","sourceRoot":"","sources":["../../../src/_modules/imap/imap-inbox.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BFR-OLDLIGHTSITE-002 — `@futdevpro/nts-dynamo/imap`: a provider-independent IMAP inbox (unread count + idempotent
|
|
3
|
+
* metadata sync). Needs the OPTIONAL peer dependency `imapflow` (only when this entry point is imported).
|
|
4
|
+
*/
|
|
5
|
+
export * from './_models/imap-mailbox-status.interface';
|
|
6
|
+
export * from './_models/imap-message-meta.interface';
|
|
7
|
+
export * from './_models/imap-sync.interface';
|
|
8
|
+
export * from './_models/imap-transport.interface';
|
|
9
|
+
export * from './imap-inbox.service';
|
|
10
|
+
export * from './imap-flow.transport';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/_modules/imap/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
/**
|
|
5
|
+
* BFR-OLDLIGHTSITE-002 — `@futdevpro/nts-dynamo/imap`: a provider-independent IMAP inbox (unread count + idempotent
|
|
6
|
+
* metadata sync). Needs the OPTIONAL peer dependency `imapflow` (only when this entry point is imported).
|
|
7
|
+
*/
|
|
8
|
+
tslib_1.__exportStar(require("./_models/imap-mailbox-status.interface"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./_models/imap-message-meta.interface"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./_models/imap-sync.interface"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./_models/imap-transport.interface"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./imap-inbox.service"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./imap-flow.transport"), exports);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/_modules/imap/index.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,kFAAwD;AACxD,gFAAsD;AACtD,wEAA8C;AAC9C,6EAAmD;AACnD,+DAAqC;AACrC,gEAAsC"}
|
package/build/index.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export * from './_collections/load-shed.util';
|
|
|
51
51
|
export * from './_collections/database-unavailable.util';
|
|
52
52
|
export * from './_collections/db-error-detail.util';
|
|
53
53
|
export * from './_collections/db-plain-data.util';
|
|
54
|
+
export * from './_collections/email-account.util';
|
|
54
55
|
export * from './_collections/secret-redaction.util';
|
|
55
56
|
export * from './_collections/dependency-host-guard.util';
|
|
56
57
|
export * from './_collections/safe-remote-fetch.util';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -80,6 +80,7 @@ tslib_1.__exportStar(require("./_collections/load-shed.util"), exports);
|
|
|
80
80
|
tslib_1.__exportStar(require("./_collections/database-unavailable.util"), exports);
|
|
81
81
|
tslib_1.__exportStar(require("./_collections/db-error-detail.util"), exports);
|
|
82
82
|
tslib_1.__exportStar(require("./_collections/db-plain-data.util"), exports);
|
|
83
|
+
tslib_1.__exportStar(require("./_collections/email-account.util"), exports);
|
|
83
84
|
tslib_1.__exportStar(require("./_collections/secret-redaction.util"), exports);
|
|
84
85
|
tslib_1.__exportStar(require("./_collections/dependency-host-guard.util"), exports);
|
|
85
86
|
tslib_1.__exportStar(require("./_collections/safe-remote-fetch.util"), exports);
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,+EAAqD;AACrD,8EAAoD;AACpD,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,iFAAuD;AACvD,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,kGAAwE;AACxE,4FAAkE;AAClE,6FAAmE;AACnE,8FAAoE;AACpE,gGAAsE;AACtE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,kGAAwE;AACxE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,qGAA2E;AAC3E,oGAA0E;AAC1E,oGAA0E;AAC1E,0FAAgE;AAChE,wFAA8D;AAC9D,yFAA+D;AAC/D,oGAA0E;AAC1E,+EAAqD;AACrD,iFAAuD;AACvD,4EAAkD;AAClD,mFAAyD;AACzD,oFAA0D;AAC1D,yEAA+C;AAC/C,gFAAsD;AACtD,2EAAiD;AACjD,6EAAmD;AACnD,8EAAoD;AACpD,4EAAkD;AAClD,8FAAoE;AACpE,wEAA8C;AAC9C,mFAAyD;AACzD,8EAAoD;AACpD,4EAAkD;AAClD,+EAAqD;AACrD,oFAA0D;AAC1D,gFAAsD;AACtD,6EAAmD;AACnD,mFAAyD;AACzD,kFAAwD;AACxD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA+E;AAC/E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AACtD,6FAAmE;AAEnE,sFAA4D;AAC5D,oFAA0D;AAC1D,6FAAmE;AAEnE,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAC9C,wFAA8D;AAC9D,kFAAwD;AAExD,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;IAsBI;;;AAEJ,cAAc;AACd,sEAA4C;AAC5C,+EAAqD;AACrD,8EAAoD;AACpD,wFAA8D;AAC9D,8FAAoE;AACpE,sFAA4D;AAC5D,mFAAyD;AACzD,uFAA6D;AAC7D,+EAAqD;AAGrD,QAAQ;AACR,iFAAuD;AACvD,wEAA8C;AAC9C,8EAAoD;AACpD,8EAAoD;AACpD,8EAAoD;AACpD,uEAA6C;AAG7C,6CAA6C;AAE7C,mEAAmE;AACnE,kGAAwE;AACxE,4FAAkE;AAClE,6FAAmE;AACnE,8FAAoE;AACpE,gGAAsE;AACtE,gGAAsE;AACtE,8FAAoE;AACpE,iGAAuE;AACvE,yFAA+D;AAC/D,iGAAuE;AACvE,kGAAwE;AACxE,gGAAsE;AACtE,uFAA6D;AAC7D,mGAAyE;AACzE,qGAA2E;AAC3E,oGAA0E;AAC1E,oGAA0E;AAC1E,0FAAgE;AAChE,wFAA8D;AAC9D,yFAA+D;AAC/D,oGAA0E;AAC1E,+EAAqD;AACrD,iFAAuD;AACvD,4EAAkD;AAClD,mFAAyD;AACzD,oFAA0D;AAC1D,yEAA+C;AAC/C,gFAAsD;AACtD,2EAAiD;AACjD,6EAAmD;AACnD,8EAAoD;AACpD,4EAAkD;AAClD,8FAAoE;AACpE,wEAA8C;AAC9C,mFAAyD;AACzD,8EAAoD;AACpD,4EAAkD;AAClD,4EAAkD;AAClD,+EAAqD;AACrD,oFAA0D;AAC1D,gFAAsD;AACtD,6EAAmD;AACnD,mFAAyD;AACzD,kFAAwD;AACxD,4EAAkD;AAClD,+EAAqD;AAErD,wBAAwB;AACxB,iGAAuE;AACvE,yGAA+E;AAC/E,4FAAkE;AAClE,qGAA2E;AAC3E,iGAAuE;AACvE,+FAAqE;AACrE,gGAAsE;AAEtE,eAAe;AACf,yEAA+C;AAE/C,qBAAqB;AACrB,4FAAkE;AAGlE,WAAW;AACX,gBAAgB;AAChB,uEAA6C;AAC7C,wEAA8C;AAE9C,yEAA+C;AAC/C,6FAAmE;AACnE,0EAAgD;AAChD,gFAAsD;AACtD,6FAAmE;AAEnE,sFAA4D;AAC5D,oFAA0D;AAC1D,6FAAmE;AAEnE,gBAAgB;AAChB,4EAAkD;AAClD,gFAAsD;AACtD,wEAA8C;AAC9C,sEAA4C;AAC5C,kFAAwD;AACxD,6EAAmD;AAEnD,kBAAkB;AAClB,wEAA8C;AAC9C,wFAA8D;AAC9D,kFAAwD;AAExD,iBAAiB;AACjB,+EAAqD;AACrD,mFAAyD;AAEzD,kBAAkB;AAClB,4EAAkD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@futdevpro/nts-dynamo",
|
|
3
|
-
"version": "01.15.
|
|
3
|
+
"version": "01.15.362",
|
|
4
4
|
"description": "Dynamic NodeTS (NodeJS-Typescript), MongoDB Backend System Framework by Future Development Program Ltd.",
|
|
5
5
|
"DyBu_settings": {
|
|
6
6
|
"packageType": "server-package",
|
|
@@ -320,6 +320,18 @@
|
|
|
320
320
|
"module": "./build/_modules/media-gen/index.js",
|
|
321
321
|
"types": "./build/_modules/media-gen/index.d.ts",
|
|
322
322
|
"typings": "./build/_modules/media-gen/index.d.ts"
|
|
323
|
+
},
|
|
324
|
+
"./imap": {
|
|
325
|
+
"default": "./build/_modules/imap/index.js",
|
|
326
|
+
"module": "./build/_modules/imap/index.js",
|
|
327
|
+
"types": "./build/_modules/imap/index.d.ts",
|
|
328
|
+
"typings": "./build/_modules/imap/index.d.ts"
|
|
329
|
+
},
|
|
330
|
+
"./git-sync": {
|
|
331
|
+
"default": "./build/_modules/git-sync/index.js",
|
|
332
|
+
"module": "./build/_modules/git-sync/index.js",
|
|
333
|
+
"types": "./build/_modules/git-sync/index.d.ts",
|
|
334
|
+
"typings": "./build/_modules/git-sync/index.d.ts"
|
|
323
335
|
}
|
|
324
336
|
},
|
|
325
337
|
"typesVersions": {
|
|
@@ -443,6 +455,12 @@
|
|
|
443
455
|
],
|
|
444
456
|
"media-gen": [
|
|
445
457
|
"build/_modules/media-gen/index.d.ts"
|
|
458
|
+
],
|
|
459
|
+
"imap": [
|
|
460
|
+
"build/_modules/imap/index.d.ts"
|
|
461
|
+
],
|
|
462
|
+
"git-sync": [
|
|
463
|
+
"build/_modules/git-sync/index.d.ts"
|
|
446
464
|
]
|
|
447
465
|
}
|
|
448
466
|
},
|
|
@@ -472,6 +490,7 @@
|
|
|
472
490
|
"dotenv": ">=16.6.1 <17",
|
|
473
491
|
"express": ">=4.22.1 <5",
|
|
474
492
|
"geoip-lite": ">=2.0.3 <3",
|
|
493
|
+
"imapflow": ">=2.0.7 <3",
|
|
475
494
|
"mongoose": ">=8.24.1 <9",
|
|
476
495
|
"nodemailer": ">=9.0.5 <10",
|
|
477
496
|
"rxjs": "7.8.1",
|
|
@@ -501,6 +520,9 @@
|
|
|
501
520
|
"geoip-lite": {
|
|
502
521
|
"optional": true
|
|
503
522
|
},
|
|
523
|
+
"imapflow": {
|
|
524
|
+
"optional": true
|
|
525
|
+
},
|
|
504
526
|
"openai": {
|
|
505
527
|
"optional": true
|
|
506
528
|
},
|
|
@@ -512,8 +534,8 @@
|
|
|
512
534
|
}
|
|
513
535
|
},
|
|
514
536
|
"devDependencies": {
|
|
515
|
-
"@futdevpro/fsm-dynamo": "1.20.
|
|
516
|
-
"@futdevpro/dynamo-eslint": "1.20.
|
|
537
|
+
"@futdevpro/fsm-dynamo": "1.20.107",
|
|
538
|
+
"@futdevpro/dynamo-eslint": "1.20.57",
|
|
517
539
|
"@discordjs/opus": "^0.10.0",
|
|
518
540
|
"@discordjs/voice": "^0.18.0",
|
|
519
541
|
"@types/jasmine": "~4.3.5",
|
|
@@ -528,6 +550,7 @@
|
|
|
528
550
|
"discord.js": "~14.24.2",
|
|
529
551
|
"eslint": "~9.39.5",
|
|
530
552
|
"express": "~4.22.2",
|
|
553
|
+
"imapflow": "2.0.7",
|
|
531
554
|
"eslint-plugin-import": "^2.29.0",
|
|
532
555
|
"eslint-plugin-jsdoc": "^48.0.0",
|
|
533
556
|
"eslint-plugin-max-params-no-constructor": "^0.0.4",
|