@tolinax/ayoune-interfaces 2026.43.0 → 2026.45.0

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.
@@ -173,6 +173,7 @@ export declare enum aMN {
173
173
  ChatMessages = "ChatMessages",
174
174
  Chats = "Chats",
175
175
  ChatWidgets = "ChatWidgets",
176
+ ChangelogEntries = "ChangelogEntries",
176
177
  CheckLists = "CheckLists",
177
178
  CheckListTemplates = "CheckListTemplates",
178
179
  CheckResults = "CheckResults",
@@ -520,6 +521,7 @@ export declare enum aMN {
520
521
  RatingTemplates = "RatingTemplates",
521
522
  Recommendations = "Recommendations",
522
523
  RecommendationTemplates = "RecommendationTemplates",
524
+ Releases = "Releases",
523
525
  Reminders = "Reminders",
524
526
  References = "References",
525
527
  CustomerLogos = "CustomerLogos",
@@ -177,6 +177,7 @@ var aMN;
177
177
  aMN["ChatMessages"] = "ChatMessages";
178
178
  aMN["Chats"] = "Chats";
179
179
  aMN["ChatWidgets"] = "ChatWidgets";
180
+ aMN["ChangelogEntries"] = "ChangelogEntries";
180
181
  aMN["CheckLists"] = "CheckLists";
181
182
  aMN["CheckListTemplates"] = "CheckListTemplates";
182
183
  aMN["CheckResults"] = "CheckResults";
@@ -524,6 +525,7 @@ var aMN;
524
525
  aMN["RatingTemplates"] = "RatingTemplates";
525
526
  aMN["Recommendations"] = "Recommendations";
526
527
  aMN["RecommendationTemplates"] = "RecommendationTemplates";
528
+ aMN["Releases"] = "Releases";
527
529
  aMN["Reminders"] = "Reminders";
528
530
  aMN["References"] = "References";
529
531
  aMN["CustomerLogos"] = "CustomerLogos";
@@ -2334,6 +2334,24 @@ const modelsAndRights = [
2334
2334
  updateBy: "_id",
2335
2335
  availableInSDK: false,
2336
2336
  },
2337
+ {
2338
+ plural: "ChangelogEntries",
2339
+ singular: "ChangelogEntry",
2340
+ module: "pm",
2341
+ right: "pm.changelogentries",
2342
+ readOnly: false,
2343
+ importable: false,
2344
+ allowDuplicate: false,
2345
+ updateBy: "_id",
2346
+ availableInSDK: false,
2347
+ searchable: true,
2348
+ searchableFields: ['title', 'body', 'scope'],
2349
+ actions: [
2350
+ { title: "PUBLISH", action: "publish", availability: "both", method: "POST", icon: "public" },
2351
+ { title: "UNPUBLISH", action: "unpublish", availability: "single", method: "POST", icon: "visibility_off" },
2352
+ { title: "TRANSLATE", action: "translate", availability: "single", method: "POST", icon: "translate" },
2353
+ ],
2354
+ },
2337
2355
  {
2338
2356
  plural: "Checks",
2339
2357
  singular: "Check",
@@ -3657,6 +3675,15 @@ const modelsAndRights = [
3657
3675
  allowDuplicate: false,
3658
3676
  updateBy: "_id",
3659
3677
  availableInSDK: false,
3678
+ searchable: true,
3679
+ searchableFields: ['subject', 'note'],
3680
+ actions: [
3681
+ { title: "PUBLISH", action: "publish", availability: "single", method: "POST", icon: "public" },
3682
+ { title: "REJECT", action: "reject", availability: "single", method: "POST", icon: "block", dangerous: true },
3683
+ { title: "MOVE_TO_LANE", action: "move", availability: "single", method: "POST", icon: "swap_horiz" },
3684
+ { title: "REORDER_ROADMAP", action: "reorder", availability: "many", method: "POST", icon: "sort" },
3685
+ { title: "CONVERT_TO_TASK", action: "convert", availability: "single", method: "POST", icon: "task_alt" },
3686
+ ],
3660
3687
  },
3661
3688
  {
3662
3689
  plural: "FeedbackAnswers",
@@ -6098,6 +6125,27 @@ const modelsAndRights = [
6098
6125
  updateBy: "_id",
6099
6126
  availableInSDK: false,
6100
6127
  },
6128
+ {
6129
+ plural: "Releases",
6130
+ singular: "Release",
6131
+ module: "pm",
6132
+ right: "pm.releases",
6133
+ readOnly: false,
6134
+ importable: false,
6135
+ allowDuplicate: false,
6136
+ updateBy: "_id",
6137
+ availableInSDK: false,
6138
+ searchable: true,
6139
+ searchableFields: ['title', 'version', 'summary'],
6140
+ actions: [
6141
+ { title: "STAGE", action: "stage", availability: "single", method: "POST", icon: "preview" },
6142
+ { title: "PUBLISH", action: "publish", availability: "single", method: "POST", icon: "public" },
6143
+ { title: "UNPUBLISH", action: "unpublish", availability: "single", method: "POST", icon: "visibility_off" },
6144
+ { title: "ARCHIVE", action: "archive", availability: "single", method: "POST", icon: "archive" },
6145
+ { title: "ROLLUP", action: "rollup", availability: "single", method: "POST", icon: "merge_type" },
6146
+ { title: "FROM_COMMITS", action: "from-commits", availability: "single", method: "POST", icon: "commit" },
6147
+ ],
6148
+ },
6101
6149
  {
6102
6150
  plural: "Reminders",
6103
6151
  singular: "Reminder",
@@ -0,0 +1,46 @@
1
+ import { IDefaultFields } from "./IDefaultFields";
2
+ export type IChangelogEntryType = "feature" | "fix" | "breaking" | "security" | "perf" | "docs" | "chore";
3
+ export interface IChangelogEntryTranslation {
4
+ title?: string;
5
+ body?: string;
6
+ /** ISO-2 locale code, e.g. "de", "en", "fr" */
7
+ locale: string;
8
+ /** Source: "manual" | "ai" — for UI badge */
9
+ source?: "manual" | "ai";
10
+ translatedAt?: Date;
11
+ }
12
+ export interface IChangelogEntry extends IDefaultFields {
13
+ _customerID: ObjectId;
14
+ _clientID?: ObjectId[];
15
+ _subID?: ObjectId[];
16
+ _project?: ObjectId;
17
+ _release?: ObjectId;
18
+ _task?: ObjectId;
19
+ _pipeline?: ObjectId;
20
+ type: IChangelogEntryType;
21
+ /** Conventional-commit scope (e.g. "pm", "shop") */
22
+ scope?: string;
23
+ /** Default-locale title (typically de or en) */
24
+ title: string;
25
+ /** Default-locale body, markdown allowed */
26
+ body?: string;
27
+ /** Default locale of title/body, e.g. "de" */
28
+ defaultLocale?: string;
29
+ /** Per-locale translations. Fallback-chain: requested → en → de → first available */
30
+ translations?: IChangelogEntryTranslation[];
31
+ /** Public/Moderation gating */
32
+ public?: boolean;
33
+ publishedAt?: Date;
34
+ /** Sort order within a Release */
35
+ order?: number;
36
+ /** Optional commit metadata copied from Task.commits[] */
37
+ commit?: {
38
+ hash?: string;
39
+ author?: string;
40
+ date?: Date;
41
+ repo?: string;
42
+ url?: string;
43
+ };
44
+ /** Optional deep-link back to PR/Ticket for public changelog */
45
+ sourceUrl?: string;
46
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,4 +1,15 @@
1
1
  import { IDefaultFields } from "./IDefaultFields";
2
+ /**
3
+ * Direction of a charge entry.
4
+ * - "inbound" = customer → Tolinax (metered usage, existing default)
5
+ * - "outbound" = Tolinax → third-party provider (platform cost telemetry)
6
+ */
7
+ export type ChargeDirection = "inbound" | "outbound";
8
+ /**
9
+ * Known outbound providers. Kept as a string literal union rather than an
10
+ * enum so consumers can declare their own providers without a type release.
11
+ */
12
+ export type ChargeProvider = "gcp" | "openai" | "anthropic" | "vertex" | "bitbucket" | "atlas" | "hetzner" | "cloudflare" | "npm" | string;
2
13
  export interface ICharge extends IDefaultFields {
3
14
  _customerID: ObjectId;
4
15
  _product?: ObjectId;
@@ -22,4 +33,23 @@ export interface ICharge extends IDefaultFields {
22
33
  dateTime?: Date;
23
34
  billable?: boolean;
24
35
  invoiced?: boolean;
36
+ /**
37
+ * Cost-telemetry extension (2026-04-20). All fields optional; existing
38
+ * inbound customer charges stay untouched. For outbound charges the
39
+ * `direction` field flips to "outbound" and `_customerID` is set to
40
+ * the TOLINAX_CUSTOMERID so multi-tenant indexes keep working without
41
+ * special-cases.
42
+ */
43
+ direction?: ChargeDirection;
44
+ provider?: ChargeProvider;
45
+ amountUSD?: number;
46
+ exchangeRate?: number;
47
+ /**
48
+ * When an outbound cost can be attributed to a specific customer (e.g.
49
+ * AI tokens consumed by a customer-scoped request), set this to that
50
+ * customer's _id. Leave undefined for platform-wide overhead.
51
+ */
52
+ attributedCustomerID?: ObjectId;
53
+ /** Provider-specific payload (gcp service code, openai model, etc.). */
54
+ meta?: any;
25
55
  }
@@ -1,6 +1,8 @@
1
1
  import { IDefaultFields } from "./IDefaultFields";
2
2
  import { IVote } from "./IVote";
3
3
  import { IComment } from "./IComment";
4
+ export type IFeatureRequestRoadmapLane = "now" | "next" | "later" | "shipped";
5
+ export type IFeatureRequestModerationStatus = "submitted" | "accepted" | "rejected";
4
6
  export interface IFeatureRequest extends IDefaultFields {
5
7
  user?: ObjectId;
6
8
  username?: string;
@@ -15,4 +17,12 @@ export interface IFeatureRequest extends IDefaultFields {
15
17
  comments: IComment[];
16
18
  votes: IVote[];
17
19
  created?: Date;
20
+ /** Public moderation & roadmap fields (dogfooding, v2026.4x+) */
21
+ public?: boolean;
22
+ moderationStatus?: IFeatureRequestModerationStatus;
23
+ moderationReason?: string;
24
+ roadmapLane?: IFeatureRequestRoadmapLane;
25
+ roadmapOrder?: number;
26
+ /** Linked Task spawned via convertToTask action */
27
+ _task?: ObjectId;
18
28
  }
@@ -24,4 +24,6 @@ export interface IMilestone extends IDefaultFields {
24
24
  progress: number;
25
25
  unit: string;
26
26
  tasks: any[];
27
+ /** Optional Release this milestone rolls up into */
28
+ _release?: ObjectId;
27
29
  }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Provider-agnostic normalized SERP representation.
3
+ *
4
+ * All Scraper-Provider-Adapter (Nimble, Oxy, Soax, ownInfra) müssen auf diesen
5
+ * Typ normalisieren. Downstream-Konsumenten (Storage, Ads-Upsert, Budget-Kalkulation)
6
+ * lesen gegen diesen Typ — NICHT gegen Provider-spezifische Feldnamen wie
7
+ * `.Ad` (Nimble) vs `.paid` (Oxy) vs `.description` vs `.desc`.
8
+ *
9
+ * Engine-agnostisch designt für spätere Erweiterung auf Bing, Google Maps,
10
+ * Google Shopping ohne Breaking Change. Phase 1 implementiert ausschließlich
11
+ * `engine: 'google.search'`.
12
+ */
13
+ export type ScraperProviderName = 'nimble' | 'oxy' | 'soax' | 'ownInfra';
14
+ export type SearchEngine = 'google.search' | 'google.maps' | 'google.shopping' | 'bing.search' | string;
15
+ export interface INormalizedCost {
16
+ amount: number;
17
+ currency: 'USD' | 'EUR';
18
+ units?: number;
19
+ reference?: string;
20
+ }
21
+ export interface INormalizedSitelink {
22
+ title: string;
23
+ linkUrl: string;
24
+ description?: string;
25
+ }
26
+ export interface INormalizedAd {
27
+ position: number;
28
+ title: string;
29
+ description: string;
30
+ displayUrl: string;
31
+ linkUrl: string;
32
+ phone?: string;
33
+ sitelinks?: INormalizedSitelink[];
34
+ extensions?: Record<string, unknown>;
35
+ }
36
+ export interface INormalizedOrganic {
37
+ position: number;
38
+ title: string;
39
+ description: string;
40
+ linkUrl: string;
41
+ displayUrl?: string;
42
+ sitelinks?: INormalizedSitelink[];
43
+ rich?: Record<string, unknown>;
44
+ }
45
+ export interface INormalizedPla {
46
+ position: number;
47
+ title: string;
48
+ price?: string;
49
+ seller?: string;
50
+ linkUrl: string;
51
+ imageUrl?: string;
52
+ }
53
+ export interface INormalizedSerp {
54
+ provider: ScraperProviderName;
55
+ engine: SearchEngine;
56
+ requestedAt: Date;
57
+ respondedAt: Date;
58
+ cost?: INormalizedCost;
59
+ ads: INormalizedAd[];
60
+ organic: INormalizedOrganic[];
61
+ pla: INormalizedPla[];
62
+ knowledgeGraph?: Record<string, unknown>;
63
+ relatedQuestions?: Array<Record<string, unknown>>;
64
+ relatedSearches?: string[];
65
+ rawResponse: unknown;
66
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ /**
3
+ * Provider-agnostic normalized SERP representation.
4
+ *
5
+ * All Scraper-Provider-Adapter (Nimble, Oxy, Soax, ownInfra) müssen auf diesen
6
+ * Typ normalisieren. Downstream-Konsumenten (Storage, Ads-Upsert, Budget-Kalkulation)
7
+ * lesen gegen diesen Typ — NICHT gegen Provider-spezifische Feldnamen wie
8
+ * `.Ad` (Nimble) vs `.paid` (Oxy) vs `.description` vs `.desc`.
9
+ *
10
+ * Engine-agnostisch designt für spätere Erweiterung auf Bing, Google Maps,
11
+ * Google Shopping ohne Breaking Change. Phase 1 implementiert ausschließlich
12
+ * `engine: 'google.search'`.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,39 @@
1
+ import { IDefaultFields } from "./IDefaultFields";
2
+ import { IComment } from "./IComment";
3
+ export type IReleaseStatus = "draft" | "staged" | "published" | "archived";
4
+ export interface IReleasePackageVersion {
5
+ /** e.g. "@tolinax/ayoune-core" */
6
+ name: string;
7
+ /** e.g. "2026.31.1" */
8
+ version: string;
9
+ /** Optional git tag or commit hash for traceability */
10
+ ref?: string;
11
+ }
12
+ export interface IRelease extends IDefaultFields {
13
+ _customerID: ObjectId;
14
+ _clientID?: ObjectId[];
15
+ _subID?: ObjectId[];
16
+ _project?: ObjectId;
17
+ _milestone?: ObjectId;
18
+ /** Human-readable release identifier, e.g. "Platform 2026.17" */
19
+ title: string;
20
+ /** Meta-CalVer, e.g. "2026.17" or "2026.17.0" */
21
+ version: string;
22
+ /** Slug for URL routing, e.g. "platform-2026-17" */
23
+ slug?: string;
24
+ status: IReleaseStatus;
25
+ publishedAt?: Date;
26
+ stagedAt?: Date;
27
+ archivedAt?: Date;
28
+ /** Short summary shown in Release-Lists and RSS */
29
+ summary?: string;
30
+ /** Long-form notes (markdown) */
31
+ notes?: string;
32
+ /** Per-package CalVer for all Domain-Pakete in this meta-release */
33
+ domainPackageVersions?: IReleasePackageVersion[];
34
+ /** Flag: Release darf public auf consumer-app erscheinen */
35
+ public?: boolean;
36
+ /** Linked Pipelines that triggered this release (auto-populated when available) */
37
+ _pipelines?: ObjectId[];
38
+ comments?: IComment[];
39
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -149,6 +149,8 @@ export interface ITask extends IDefaultFields {
149
149
  changelog?: any;
150
150
  releaseNote?: string;
151
151
  releaseNoteTitle?: string;
152
+ /** Optional Release this task rolls up into */
153
+ _release?: ObjectId;
152
154
  comments: IComment[];
153
155
  commits?: any[];
154
156
  watchers?: any[];
@@ -198,5 +198,7 @@ export interface IWebsite extends IDefaultFields {
198
198
  developerPortal?: boolean;
199
199
  /** Enable consumer portal (authenticated area: invoices, tickets, etc.) */
200
200
  consumerPortal?: boolean;
201
+ /** Enable public roadmap + feature requests + changelog pages (dogfooding) */
202
+ publicRoadmap?: boolean;
201
203
  };
202
204
  }
@@ -188,6 +188,7 @@ export * from "./ICheck";
188
188
  export * from "./ICheckList";
189
189
  export * from "./ICheckListTemplate";
190
190
  export * from "./ICheckResult";
191
+ export * from "./IChangelogEntry";
191
192
  export * from "./IClick";
192
193
  export * from "./ICloudTag";
193
194
  export * from "./ICloudTagView";
@@ -459,6 +460,7 @@ export * from "./INewsletterLink";
459
460
  export * from "./INewsletterSnapshot";
460
461
  export * from "./INewsletterType";
461
462
  export * from "./INewsSource";
463
+ export * from "./INormalizedSerp";
462
464
  export * from "./INotification";
463
465
  export * from "./INotificationPolicy";
464
466
  export * from "./INotificationPreference";
@@ -552,6 +554,7 @@ export * from "./IRatingTemplate";
552
554
  export * from "./IReaction";
553
555
  export * from "./IRecommendation";
554
556
  export * from "./IRecommendationTemplate";
557
+ export * from "./IRelease";
555
558
  export * from "./IReminder";
556
559
  export * from "./IReplenishmentOrder";
557
560
  export * from "./IReport";
@@ -204,6 +204,7 @@ __exportStar(require("./ICheck"), exports);
204
204
  __exportStar(require("./ICheckList"), exports);
205
205
  __exportStar(require("./ICheckListTemplate"), exports);
206
206
  __exportStar(require("./ICheckResult"), exports);
207
+ __exportStar(require("./IChangelogEntry"), exports);
207
208
  __exportStar(require("./IClick"), exports);
208
209
  __exportStar(require("./ICloudTag"), exports);
209
210
  __exportStar(require("./ICloudTagView"), exports);
@@ -475,6 +476,7 @@ __exportStar(require("./INewsletterLink"), exports);
475
476
  __exportStar(require("./INewsletterSnapshot"), exports);
476
477
  __exportStar(require("./INewsletterType"), exports);
477
478
  __exportStar(require("./INewsSource"), exports);
479
+ __exportStar(require("./INormalizedSerp"), exports);
478
480
  __exportStar(require("./INotification"), exports);
479
481
  __exportStar(require("./INotificationPolicy"), exports);
480
482
  __exportStar(require("./INotificationPreference"), exports);
@@ -568,6 +570,7 @@ __exportStar(require("./IRatingTemplate"), exports);
568
570
  __exportStar(require("./IReaction"), exports);
569
571
  __exportStar(require("./IRecommendation"), exports);
570
572
  __exportStar(require("./IRecommendationTemplate"), exports);
573
+ __exportStar(require("./IRelease"), exports);
571
574
  __exportStar(require("./IReminder"), exports);
572
575
  __exportStar(require("./IReplenishmentOrder"), exports);
573
576
  __exportStar(require("./IReport"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolinax/ayoune-interfaces",
3
- "version": "2026.43.0",
3
+ "version": "2026.45.0",
4
4
  "description": "Houses TypeScript interfaces for aYOUne",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",