@d19n/youfibre-odin-sdk 2.0.368 → 2.0.369

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/README.md CHANGED
@@ -124,7 +124,7 @@ await workOrder.completeWorkOrder({ ... });
124
124
 
125
125
  ## Entities
126
126
 
127
- This SDK includes **203** entities across **13** modules.
127
+ This SDK includes **204** entities across **13** modules.
128
128
 
129
129
  ### CrmModule
130
130
 
@@ -198,6 +198,7 @@ This SDK includes **203** entities across **13** modules.
198
198
  | **PgLog** | PgLog Entity Definition | DEFAULT |
199
199
  | **PgWebhook** | PgWebhook Entity Definition | DEFAULT |
200
200
  | **PgWebhookAttempt** | PgWebhookAttempt Entity Definition | DEFAULT |
201
+ | **ReleaseNote** | ReleaseNote Entity Definition | DEFAULT |
201
202
 
202
203
  ### SupportModule
203
204
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * CancelOrderForETFPaid Action DTO
3
3
  *
4
- * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Triggered by billing when the ETF invoice reaches PAID.
4
+ * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Runs from Deactivated or Pending Cancellation; never from Active, where the customer is still being served. Triggered by billing when the ETF invoice reaches PAID.
5
5
  *
6
6
  * @module OrderModule
7
7
  * @entity Order
@@ -27,7 +27,7 @@ export interface CancelOrderForEtfPaidProperties {
27
27
  /**
28
28
  * Cancel Order For ETF Paid
29
29
  *
30
- * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Triggered by billing when the ETF invoice reaches PAID.
30
+ * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Runs from Deactivated or Pending Cancellation; never from Active, where the customer is still being served. Triggered by billing when the ETF invoice reaches PAID.
31
31
  *
32
32
  * @actionType STAGE_TRANSITION - Transitions record to new pipeline stage
33
33
  * @module OrderModule
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * CancelOrderForETFPaid Action DTO
4
4
  *
5
- * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Triggered by billing when the ETF invoice reaches PAID.
5
+ * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Runs from Deactivated or Pending Cancellation; never from Active, where the customer is still being served. Triggered by billing when the ETF invoice reaches PAID.
6
6
  *
7
7
  * @module OrderModule
8
8
  * @entity Order
@@ -17,7 +17,7 @@ const core_1 = require("@d19n/odin-types/dist/core");
17
17
  /**
18
18
  * Cancel Order For ETF Paid
19
19
  *
20
- * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Triggered by billing when the ETF invoice reaches PAID.
20
+ * The customer paid their early-termination fee, so they have bought out the contract and left. Moves the order to Cancelled with no cease to the supplier, matching the bad-debt churn. Runs from Deactivated or Pending Cancellation; never from Active, where the customer is still being served. Triggered by billing when the ETF invoice reaches PAID.
21
21
  *
22
22
  * @actionType STAGE_TRANSITION - Transitions record to new pipeline stage
23
23
  * @module OrderModule
@@ -22,7 +22,7 @@ export interface UpdateContactAppPreferencesMessage extends OdinRecordUpdatedEve
22
22
  * Properties for UpdateContactAppPreferences action
23
23
  *
24
24
  * @property Required fields: 0
25
- * @property Optional fields: 4
25
+ * @property Optional fields: 5
26
26
  */
27
27
  export interface UpdateContactAppPreferencesProperties {
28
28
  /**
@@ -53,6 +53,13 @@ export interface UpdateContactAppPreferencesProperties {
53
53
  * @type {DATE_TIME}
54
54
  */
55
55
  AppBiometricLoginStatusDate?: string | null;
56
+ /**
57
+ * App Device Platform
58
+ *
59
+ * The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483).
60
+ * @type {ENUM}
61
+ */
62
+ AppDevicePlatform?: string | null;
56
63
  }
57
64
  /**
58
65
  * UpdateContactAppPreferences
@@ -0,0 +1,45 @@
1
+ import { OauthParams } from '@d19n/odin-sdk-generator/dist/odin-sdk-types';
2
+ import { ApiProvider } from '@d19n/odin-sdk-generator/dist/api.provider';
3
+ import { OdinSearchV2, OdinRecordCreateDto, OdinRecordUpdateDto } from '@d19n/odin-types/dist/core';
4
+ import { ReleaseNoteProperties } from '../entities-v2/ReleaseNote';
5
+ /**
6
+ * @deprecated Use OdinApiClient.
7
+ *
8
+ * Migration:
9
+ * - Old: new ReleaseNoteApi(authParams).get(id)
10
+ * - New: new odin.releasenote.get(id)
11
+ *
12
+ * The new OdinApiClient returns typed record wrappers with action methods.
13
+ */
14
+ export declare class ReleaseNoteApi extends ApiProvider {
15
+ protected readonly authToken?: string;
16
+ private readonly moduleName;
17
+ private readonly entityName;
18
+ private sourceRecord;
19
+ constructor(authParams?: OauthParams, authToken?: string);
20
+ setRecord(sourceRecord: any): void;
21
+ schema(): Promise<import("@d19n/odin-types/dist/core").OdinSchema>;
22
+ search(params: Partial<OdinSearchV2>): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").OdinSearchResponse<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>>;
23
+ searchAndPaginate(params: Partial<OdinSearchV2>): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").OdinSearchResponse<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>>;
24
+ reIndex(body: {
25
+ id: string;
26
+ schemaId: string;
27
+ }[]): Promise<any>;
28
+ get(releaseNoteId: string): Promise<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>;
29
+ getMany(releaseNoteIds: string[]): Promise<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>[]>;
30
+ upsert(upsertDto: OdinRecordCreateDto): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").IDbRecordCreateUpdateRes>;
31
+ upsertMany(upsertDtos: OdinRecordCreateDto[]): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").IDbRecordCreateUpdateRes[]>;
32
+ update(updateDto: OdinRecordUpdateDto): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").IDbRecordCreateUpdateRes>;
33
+ updateMany(updateDtos: OdinRecordUpdateDto[]): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").IDbRecordCreateUpdateRes[]>;
34
+ delete(releaseNoteId: string): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").OdinDeleteResponse[]>;
35
+ deleteMany(releaseNoteIds: string[]): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").OdinDeleteResponse[]>;
36
+ restore(releaseNoteIds: string[]): Promise<import("@d19n/odin-sdk-generator/dist/odin-sdk-types").OdinRestoreResponse[]>;
37
+ applyAction(dto: any): Promise<any[]>;
38
+ bulkApplyActions(dtos: any[]): Promise<any[]>;
39
+ getVersions(): Promise<{
40
+ [key: string]: Record<string, any>;
41
+ }>;
42
+ getRevisionTimeline(): Promise<{
43
+ [key: string]: Record<string, any>[];
44
+ }>;
45
+ }
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReleaseNoteApi = void 0;
13
+ const api_provider_1 = require("@d19n/odin-sdk-generator/dist/api.provider");
14
+ /**
15
+ * @deprecated Use OdinApiClient.
16
+ *
17
+ * Migration:
18
+ * - Old: new ReleaseNoteApi(authParams).get(id)
19
+ * - New: new odin.releasenote.get(id)
20
+ *
21
+ * The new OdinApiClient returns typed record wrappers with action methods.
22
+ */
23
+ class ReleaseNoteApi extends api_provider_1.ApiProvider {
24
+ // ============================================
25
+ // PRIVATE BACKING FIELDS (Lazy Loading)
26
+ // ============================================
27
+ constructor(authParams, authToken) {
28
+ super(authParams, authToken);
29
+ this.authToken = authToken;
30
+ this.moduleName = 'AuditModule';
31
+ this.entityName = 'ReleaseNote';
32
+ // Link managers are lazy-loaded on first access
33
+ }
34
+ // ============================================
35
+ // LAZY-LOADED LINK MANAGERS (Public Getters)
36
+ // ============================================
37
+ // Usage remains identical: api.address.list(recordId)
38
+ // ============================================
39
+ // STANDARD METHODS (Unchanged API)
40
+ // ============================================
41
+ setRecord(sourceRecord) {
42
+ this.sourceRecord = sourceRecord;
43
+ }
44
+ schema() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ return yield this.getSchema(this.moduleName, this.entityName);
47
+ });
48
+ }
49
+ // Use this function when you want to search and handle all pagination on your own
50
+ search(params) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ return yield this._searchRecords(this.moduleName, this.entityName, params);
53
+ });
54
+ }
55
+ // Use this function when you want paginating through the results to be handled
56
+ searchAndPaginate(params) {
57
+ return __awaiter(this, void 0, void 0, function* () {
58
+ return yield this._searchAllRecordsAndPaginate(this.moduleName, this.entityName, params);
59
+ });
60
+ }
61
+ // Use this function to re-index records in elastic search
62
+ reIndex(body) {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ return yield this._reIndexRecords(body);
65
+ });
66
+ }
67
+ // Use this function when you want to return a single record
68
+ get(releaseNoteId) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const res = yield this._getByPrimaryKey(this.moduleName, this.entityName, releaseNoteId);
71
+ if (res)
72
+ this.setRecord(res);
73
+ return res;
74
+ });
75
+ }
76
+ // Use this function when you want to return many records by primaryKeys
77
+ getMany(releaseNoteIds) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ return yield this._getManyByPrimaryKey(this.moduleName, this.entityName, releaseNoteIds);
80
+ });
81
+ }
82
+ // Use this function when you want to upsert one record
83
+ upsert(upsertDto) {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ const res = yield this._upsert(this.moduleName, this.entityName, [upsertDto]);
86
+ return res[0];
87
+ });
88
+ }
89
+ // Use this function when you want to upsert many records
90
+ upsertMany(upsertDtos) {
91
+ return __awaiter(this, void 0, void 0, function* () {
92
+ return yield this._upsert(this.moduleName, this.entityName, upsertDtos);
93
+ });
94
+ }
95
+ // Use this function when you want to update one record
96
+ update(updateDto) {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ const res = yield this._update(this.moduleName, this.entityName, [updateDto]);
99
+ return res[0];
100
+ });
101
+ }
102
+ // Use this function when you want to update many records
103
+ updateMany(updateDtos) {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ return yield this._update(this.moduleName, this.entityName, updateDtos);
106
+ });
107
+ }
108
+ // Use this function when you want to delete one record
109
+ delete(releaseNoteId) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ return yield this._delete(this.moduleName, this.entityName, [releaseNoteId]);
112
+ });
113
+ }
114
+ // Use this function when you want to delete many records
115
+ deleteMany(releaseNoteIds) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ return yield this._delete(this.moduleName, this.entityName, releaseNoteIds);
118
+ });
119
+ }
120
+ // Use this function when you want to restore one or many records
121
+ restore(releaseNoteIds) {
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ return yield this._restore(this.moduleName, this.entityName, releaseNoteIds);
124
+ });
125
+ }
126
+ // Use this function when you want to apply a single action
127
+ applyAction(dto) {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ return yield this._applyAction(this.moduleName, this.entityName, dto);
130
+ });
131
+ }
132
+ // Use this function when you want to bulk apply actions
133
+ bulkApplyActions(dtos) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ return yield this._bulkApplyActions(this.moduleName, this.entityName, dtos);
136
+ });
137
+ }
138
+ // Use this function when you want to return the versions for a single record
139
+ getVersions() {
140
+ return __awaiter(this, void 0, void 0, function* () {
141
+ return yield this._getVersions(this.moduleName, this.entityName, this.sourceRecord.id);
142
+ });
143
+ }
144
+ // Use this function when you want to return the change history for a single record
145
+ getRevisionTimeline() {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ return yield this._getRevisionTimeline(this.moduleName, this.entityName, this.sourceRecord.id);
148
+ });
149
+ }
150
+ }
151
+ exports.ReleaseNoteApi = ReleaseNoteApi;
@@ -0,0 +1,117 @@
1
+ import { DbProvider, DbProviderOptions, DbGetQueryOptions } from '@d19n/odin-sdk-generator/dist/db.provider';
2
+ import { OdinSearchV2, OdinRecordCreateDto, OdinRecordUpdateDto } from '@d19n/odin-types/dist/core';
3
+ import { ReleaseNoteProperties } from '../entities-v2/ReleaseNote';
4
+ /**
5
+ * @deprecated Use OdinDbClient.
6
+ *
7
+ * Migration:
8
+ * - Old: new ReleaseNoteApi(authParams).get(id)
9
+ * - New: new odin.releasenote.get(id)
10
+ *
11
+ * The new OdinDbClient returns typed record wrappers with action methods.
12
+ *
13
+ * Supports separate query options and provider options:
14
+ * - Constructor level: new ReleaseNoteDb(principal, dbService, { omitPermissionsCheck: true })
15
+ * - Method level: await db.getByPrimaryKey(id, { entities: [] }, { omitPermissionsCheck: true })
16
+ */
17
+ export declare class ReleaseNoteDb extends DbProvider {
18
+ protected readonly principal: any;
19
+ protected readonly dbService: any;
20
+ private readonly moduleName;
21
+ private readonly entityName;
22
+ private sourceRecord;
23
+ constructor(principal: any, dbService: any, defaultOptions?: DbProviderOptions);
24
+ setRecord(sourceRecord: any): void;
25
+ /**
26
+ * Search records with manual pagination control
27
+ * @param params - Search parameters
28
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
29
+ */
30
+ searchRecords(params: Partial<OdinSearchV2>, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core/interfaces/v2.db.interfaces").OdinSearchResponse<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>>;
31
+ /**
32
+ * Search all records with automatic pagination
33
+ * @param params - Search parameters
34
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
35
+ */
36
+ searchAllRecordsAndPaginate(params: Partial<OdinSearchV2>, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core/interfaces/v2.db.interfaces").OdinSearchResponse<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>>;
37
+ /**
38
+ * Get a single record by primary key
39
+ * @param releaseNoteId - Record ID
40
+ * @param queryOptions - Query options (WHAT: entities to include)
41
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
42
+ *
43
+ * @example
44
+ * // Simple get
45
+ * const record = await db.getByPrimaryKey(id);
46
+ *
47
+ * // With related entities
48
+ * const record = await db.getByPrimaryKey(id, { entities: ['InvoiceItem', 'Transaction'] });
49
+ *
50
+ * // With permissions bypass
51
+ * const record = await db.getByPrimaryKey(id, {}, { omitPermissionsCheck: true });
52
+ *
53
+ * // Both options
54
+ * const record = await db.getByPrimaryKey(id, { entities: ['Invoice'] }, { omitPermissionsCheck: true });
55
+ */
56
+ getByPrimaryKey(releaseNoteId: string, queryOptions?: DbGetQueryOptions, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>>;
57
+ /**
58
+ * Get multiple records by primary keys
59
+ * @param releaseNoteIds - Array of record IDs
60
+ * @param queryOptions - Query options (WHAT: entities to include)
61
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
62
+ */
63
+ getManyByPrimaryKey(releaseNoteIds: string[], queryOptions?: DbGetQueryOptions, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").OdinRecord<ReleaseNoteProperties>[]>;
64
+ /**
65
+ * Upsert a single record
66
+ * @param upsertDto - Record to upsert
67
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
68
+ */
69
+ upsert(upsertDto: OdinRecordCreateDto, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").IDbRecordCreateUpdateRes>;
70
+ /**
71
+ * Upsert multiple records
72
+ * @param upsertDtos - Records to upsert
73
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
74
+ */
75
+ upsertMany(upsertDtos: OdinRecordCreateDto[], providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").IDbRecordCreateUpdateRes[]>;
76
+ /**
77
+ * Update a single record
78
+ * @param updateDto - Record to update
79
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
80
+ */
81
+ update(updateDto: OdinRecordUpdateDto, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").IDbRecordCreateUpdateRes>;
82
+ /**
83
+ * Update multiple records
84
+ * @param updateDtos - Records to update
85
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
86
+ */
87
+ updateMany(updateDtos: OdinRecordUpdateDto[], providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").IDbRecordCreateUpdateRes[]>;
88
+ /**
89
+ * Delete one or many records
90
+ * @param releaseNoteIds - Record IDs to delete
91
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
92
+ */
93
+ delete(releaseNoteIds: string[], providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-sdk-generator").DbRecordDeleted[]>;
94
+ /**
95
+ * Restore one or many deleted records
96
+ * @param releaseNoteIds - Record IDs to restore
97
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
98
+ */
99
+ restore(releaseNoteIds: string[], providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-sdk-generator").DbRecordRestored[]>;
100
+ /**
101
+ * Apply an action to a record
102
+ * @param actionName - The action key
103
+ * @param dto - The action DTO
104
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
105
+ */
106
+ applyAction(actionName: string, dto: any, providerOptions?: DbProviderOptions): Promise<import("@d19n/odin-types/dist/core").IDbRecordCreateUpdateRes[]>;
107
+ /**
108
+ * Get version history for the current source record
109
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
110
+ */
111
+ getVersions(providerOptions?: DbProviderOptions): Promise<any>;
112
+ /**
113
+ * Get revision timeline for the current source record
114
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
115
+ */
116
+ getRevisionTimeline(providerOptions?: DbProviderOptions): Promise<any>;
117
+ }
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ReleaseNoteDb = void 0;
13
+ const db_provider_1 = require("@d19n/odin-sdk-generator/dist/db.provider");
14
+ /**
15
+ * @deprecated Use OdinDbClient.
16
+ *
17
+ * Migration:
18
+ * - Old: new ReleaseNoteApi(authParams).get(id)
19
+ * - New: new odin.releasenote.get(id)
20
+ *
21
+ * The new OdinDbClient returns typed record wrappers with action methods.
22
+ *
23
+ * Supports separate query options and provider options:
24
+ * - Constructor level: new ReleaseNoteDb(principal, dbService, { omitPermissionsCheck: true })
25
+ * - Method level: await db.getByPrimaryKey(id, { entities: [] }, { omitPermissionsCheck: true })
26
+ */
27
+ class ReleaseNoteDb extends db_provider_1.DbProvider {
28
+ // ============================================
29
+ // PRIVATE BACKING FIELDS (Lazy Loading)
30
+ // ============================================
31
+ constructor(principal, dbService, defaultOptions) {
32
+ super(principal, dbService, defaultOptions);
33
+ this.moduleName = 'AuditModule';
34
+ this.entityName = 'ReleaseNote';
35
+ this.principal = principal;
36
+ this.dbService = dbService;
37
+ // Link managers are lazy-loaded on first access
38
+ }
39
+ // ============================================
40
+ // LAZY-LOADED LINK MANAGERS (Public Getters)
41
+ // ============================================
42
+ // Usage remains identical: db.address.list(recordId)
43
+ // ============================================
44
+ // STANDARD METHODS
45
+ // ============================================
46
+ // Methods support separate query options and provider options for clean API
47
+ setRecord(sourceRecord) {
48
+ this.sourceRecord = sourceRecord;
49
+ }
50
+ /**
51
+ * Search records with manual pagination control
52
+ * @param params - Search parameters
53
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
54
+ */
55
+ searchRecords(params, providerOptions) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ return yield this._searchRecords(this.moduleName, this.entityName, params, providerOptions);
58
+ });
59
+ }
60
+ /**
61
+ * Search all records with automatic pagination
62
+ * @param params - Search parameters
63
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
64
+ */
65
+ searchAllRecordsAndPaginate(params, providerOptions) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ return yield this._searchAllRecordsAndPaginate(this.moduleName, this.entityName, params, 0, providerOptions);
68
+ });
69
+ }
70
+ /**
71
+ * Get a single record by primary key
72
+ * @param releaseNoteId - Record ID
73
+ * @param queryOptions - Query options (WHAT: entities to include)
74
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
75
+ *
76
+ * @example
77
+ * // Simple get
78
+ * const record = await db.getByPrimaryKey(id);
79
+ *
80
+ * // With related entities
81
+ * const record = await db.getByPrimaryKey(id, { entities: ['InvoiceItem', 'Transaction'] });
82
+ *
83
+ * // With permissions bypass
84
+ * const record = await db.getByPrimaryKey(id, {}, { omitPermissionsCheck: true });
85
+ *
86
+ * // Both options
87
+ * const record = await db.getByPrimaryKey(id, { entities: ['Invoice'] }, { omitPermissionsCheck: true });
88
+ */
89
+ getByPrimaryKey(releaseNoteId, queryOptions, providerOptions) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ const res = yield this._getByPrimaryKey(this.moduleName, this.entityName, releaseNoteId, queryOptions, providerOptions);
92
+ if (res)
93
+ this.setRecord(res);
94
+ return res;
95
+ });
96
+ }
97
+ /**
98
+ * Get multiple records by primary keys
99
+ * @param releaseNoteIds - Array of record IDs
100
+ * @param queryOptions - Query options (WHAT: entities to include)
101
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
102
+ */
103
+ getManyByPrimaryKey(releaseNoteIds, queryOptions, providerOptions) {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ return yield this._getManyByPrimaryKey(this.moduleName, this.entityName, releaseNoteIds, queryOptions, providerOptions);
106
+ });
107
+ }
108
+ /**
109
+ * Upsert a single record
110
+ * @param upsertDto - Record to upsert
111
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
112
+ */
113
+ upsert(upsertDto, providerOptions) {
114
+ return __awaiter(this, void 0, void 0, function* () {
115
+ const res = yield this._upsert(this.moduleName, this.entityName, [upsertDto], providerOptions);
116
+ return res[0];
117
+ });
118
+ }
119
+ /**
120
+ * Upsert multiple records
121
+ * @param upsertDtos - Records to upsert
122
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
123
+ */
124
+ upsertMany(upsertDtos, providerOptions) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ return yield this._upsert(this.moduleName, this.entityName, upsertDtos, providerOptions);
127
+ });
128
+ }
129
+ /**
130
+ * Update a single record
131
+ * @param updateDto - Record to update
132
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
133
+ */
134
+ update(updateDto, providerOptions) {
135
+ return __awaiter(this, void 0, void 0, function* () {
136
+ const res = yield this._update(this.moduleName, this.entityName, [updateDto], providerOptions);
137
+ return res[0];
138
+ });
139
+ }
140
+ /**
141
+ * Update multiple records
142
+ * @param updateDtos - Records to update
143
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
144
+ */
145
+ updateMany(updateDtos, providerOptions) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ return yield this._update(this.moduleName, this.entityName, updateDtos, providerOptions);
148
+ });
149
+ }
150
+ /**
151
+ * Delete one or many records
152
+ * @param releaseNoteIds - Record IDs to delete
153
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
154
+ */
155
+ delete(releaseNoteIds, providerOptions) {
156
+ return __awaiter(this, void 0, void 0, function* () {
157
+ return yield this._delete(this.moduleName, this.entityName, releaseNoteIds, providerOptions);
158
+ });
159
+ }
160
+ /**
161
+ * Restore one or many deleted records
162
+ * @param releaseNoteIds - Record IDs to restore
163
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
164
+ */
165
+ restore(releaseNoteIds, providerOptions) {
166
+ return __awaiter(this, void 0, void 0, function* () {
167
+ return yield this._restore(this.moduleName, this.entityName, releaseNoteIds, providerOptions);
168
+ });
169
+ }
170
+ /**
171
+ * Apply an action to a record
172
+ * @param actionName - The action key
173
+ * @param dto - The action DTO
174
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
175
+ */
176
+ applyAction(actionName, dto, providerOptions) {
177
+ return __awaiter(this, void 0, void 0, function* () {
178
+ return yield this._applyAction(this.moduleName, this.entityName, dto, providerOptions);
179
+ });
180
+ }
181
+ /**
182
+ * Get version history for the current source record
183
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
184
+ */
185
+ getVersions(providerOptions) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ return yield this._getVersions(this.moduleName, this.entityName, this.sourceRecord.id, providerOptions);
188
+ });
189
+ }
190
+ /**
191
+ * Get revision timeline for the current source record
192
+ * @param providerOptions - Provider options (HOW: omitPermissionsCheck)
193
+ */
194
+ getRevisionTimeline(providerOptions) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ return yield this._getRevisionTimeline(this.moduleName, this.entityName, this.sourceRecord.id, providerOptions);
197
+ });
198
+ }
199
+ }
200
+ exports.ReleaseNoteDb = ReleaseNoteDb;
@@ -299,6 +299,19 @@ export declare enum ContactAppBiometricLoginStatus {
299
299
  DISABLED = "DISABLED",
300
300
  ENABLED = "ENABLED"
301
301
  }
302
+ /**
303
+ * Valid values for Contact.AppDevicePlatform
304
+ *
305
+ * The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483).
306
+ *
307
+ * @remarks Available options:
308
+ * - `ANDROID` - Android
309
+ * - `IOS` - iOS
310
+ */
311
+ export declare enum ContactAppDevicePlatform {
312
+ ANDROID = "ANDROID",
313
+ I_OS = "IOS"
314
+ }
302
315
  /**
303
316
  * Property keys for Contact
304
317
  * Use these constants instead of string literals for type safety
@@ -423,7 +436,9 @@ export declare enum ContactPropertyKeys {
423
436
  /** When AppPushNotificationStatus last changed (PORTAPP-3345). */
424
437
  AppPushNotificationStatusDate = "AppPushNotificationStatusDate",
425
438
  /** When AppBiometricLoginStatus last changed (PORTAPP-3345). */
426
- AppBiometricLoginStatusDate = "AppBiometricLoginStatusDate"
439
+ AppBiometricLoginStatusDate = "AppBiometricLoginStatusDate",
440
+ /** The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483). */
441
+ AppDevicePlatform = "AppDevicePlatform"
427
442
  }
428
443
  /**
429
444
  * Properties for Contact records
@@ -819,6 +834,14 @@ export interface ContactProperties {
819
834
  * @hidden This field is hidden in the UI
820
835
  */
821
836
  AppBiometricLoginStatusDate: string;
837
+ /** The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483).
838
+ *
839
+ * @type {ENUM}
840
+ * @default
841
+ * @enum {ContactAppDevicePlatform}
842
+ * @hidden This field is hidden in the UI
843
+ */
844
+ AppDevicePlatform: ContactAppDevicePlatform;
822
845
  }
823
846
  /**
824
847
  * Contact entity from CrmModule
@@ -12,8 +12,8 @@
12
12
  * Generated from Odin schema definition
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ROUTING_KEY_LINK_CONTACT_REWARD_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_REFUND_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_REFUND_CREATED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_BILLING_REQUEST_DELETED = exports.ROUTING_KEY_LINK_CONTACT_BILLING_REQUEST_CREATED = exports.ROUTING_KEY_LINK_CONTACT_SMS_MESSAGE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_SMS_MESSAGE_CREATED = exports.ROUTING_KEY_LINK_CONTACT_APPOINTMENT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_APPOINTMENT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_IDENTITY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_IDENTITY_CREATED = exports.ROUTING_KEY_LINK_CONTACT_FILE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_FILE_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ACTIVITY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ACTIVITY_CREATED = exports.ROUTING_KEY_LINK_REFEREE_REFERRALS_DELETED = exports.ROUTING_KEY_LINK_REFEREE_REFERRALS_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PUSH_NOTIFICATION_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PUSH_NOTIFICATION_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PHONE_NUMBER_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PHONE_NUMBER_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_CREATED = exports.ROUTING_KEY_LINK_CONTACT_NOTE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_NOTE_CREATED = exports.ROUTING_KEY_CONTACT_DEFAULT_DELETED = exports.ROUTING_KEY_CONTACT_DEFAULT_UPDATED = exports.ROUTING_KEY_CONTACT_DEFAULT_CREATED = exports.ROUTING_KEY_CONTACT_DELETED = exports.ROUTING_KEY_CONTACT_UPDATED = exports.ROUTING_KEY_CONTACT_CREATED = exports.Contact = exports.ContactPropertyKeys = exports.ContactAppBiometricLoginStatus = exports.ContactAppPushNotificationStatus = exports.ContactWhitelistedTwilioQueue = exports.ContactHomeownerStatus = exports.ContactMedicallyDependant = exports.ContactAdditionalCareRequired = exports.ContactTelecareAlarm = exports.ContactAccountStatus = exports.ContactActivationSource = exports.ContactCurrentNetworkProvider = exports.ContactRole = exports.ContactPreviousProvider = exports.ContactPortalStatus = exports.ContactCurrentProvider = exports.ContactEntityTypes = void 0;
16
- exports.ROUTING_KEY_LINK_CONTACT_CONTRACT_BUY_OUT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTRACT_BUY_OUT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_NPS_SURVEY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_NPS_SURVEY_CREATED = exports.ROUTING_KEY_LINK_CONTACT_AFFILIATE_CODES_DELETED = exports.ROUTING_KEY_LINK_CONTACT_AFFILIATE_CODES_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ACCOUNT_CREDIT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ACCOUNT_CREDIT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ADDRESS_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ADDRESS_CREATED = exports.ROUTING_KEY_LINK_CONTACT_REWARD_DELETED = void 0;
15
+ exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_REFUND_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_REFUND_CREATED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_BILLING_REQUEST_DELETED = exports.ROUTING_KEY_LINK_CONTACT_BILLING_REQUEST_CREATED = exports.ROUTING_KEY_LINK_CONTACT_SMS_MESSAGE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_SMS_MESSAGE_CREATED = exports.ROUTING_KEY_LINK_CONTACT_APPOINTMENT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_APPOINTMENT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_IDENTITY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTACT_IDENTITY_CREATED = exports.ROUTING_KEY_LINK_CONTACT_FILE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_FILE_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ACTIVITY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ACTIVITY_CREATED = exports.ROUTING_KEY_LINK_REFEREE_REFERRALS_DELETED = exports.ROUTING_KEY_LINK_REFEREE_REFERRALS_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PUSH_NOTIFICATION_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PUSH_NOTIFICATION_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PHONE_NUMBER_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PHONE_NUMBER_CREATED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_DELETED = exports.ROUTING_KEY_LINK_CONTACT_PAYMENT_METHOD_CREATED = exports.ROUTING_KEY_LINK_CONTACT_NOTE_DELETED = exports.ROUTING_KEY_LINK_CONTACT_NOTE_CREATED = exports.ROUTING_KEY_CONTACT_DEFAULT_DELETED = exports.ROUTING_KEY_CONTACT_DEFAULT_UPDATED = exports.ROUTING_KEY_CONTACT_DEFAULT_CREATED = exports.ROUTING_KEY_CONTACT_DELETED = exports.ROUTING_KEY_CONTACT_UPDATED = exports.ROUTING_KEY_CONTACT_CREATED = exports.Contact = exports.ContactPropertyKeys = exports.ContactAppDevicePlatform = exports.ContactAppBiometricLoginStatus = exports.ContactAppPushNotificationStatus = exports.ContactWhitelistedTwilioQueue = exports.ContactHomeownerStatus = exports.ContactMedicallyDependant = exports.ContactAdditionalCareRequired = exports.ContactTelecareAlarm = exports.ContactAccountStatus = exports.ContactActivationSource = exports.ContactCurrentNetworkProvider = exports.ContactRole = exports.ContactPreviousProvider = exports.ContactPortalStatus = exports.ContactCurrentProvider = exports.ContactEntityTypes = void 0;
16
+ exports.ROUTING_KEY_LINK_CONTACT_CONTRACT_BUY_OUT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_CONTRACT_BUY_OUT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_NPS_SURVEY_DELETED = exports.ROUTING_KEY_LINK_CONTACT_NPS_SURVEY_CREATED = exports.ROUTING_KEY_LINK_CONTACT_AFFILIATE_CODES_DELETED = exports.ROUTING_KEY_LINK_CONTACT_AFFILIATE_CODES_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ACCOUNT_CREDIT_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ACCOUNT_CREDIT_CREATED = exports.ROUTING_KEY_LINK_CONTACT_ADDRESS_DELETED = exports.ROUTING_KEY_LINK_CONTACT_ADDRESS_CREATED = exports.ROUTING_KEY_LINK_CONTACT_REWARD_DELETED = exports.ROUTING_KEY_LINK_CONTACT_REWARD_CREATED = void 0;
17
17
  const core_1 = require("@d19n/odin-types/dist/core");
18
18
  /**
19
19
  * Available types for Contact records
@@ -283,6 +283,20 @@ var ContactAppBiometricLoginStatus;
283
283
  ContactAppBiometricLoginStatus["DISABLED"] = "DISABLED";
284
284
  ContactAppBiometricLoginStatus["ENABLED"] = "ENABLED";
285
285
  })(ContactAppBiometricLoginStatus = exports.ContactAppBiometricLoginStatus || (exports.ContactAppBiometricLoginStatus = {}));
286
+ /**
287
+ * Valid values for Contact.AppDevicePlatform
288
+ *
289
+ * The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483).
290
+ *
291
+ * @remarks Available options:
292
+ * - `ANDROID` - Android
293
+ * - `IOS` - iOS
294
+ */
295
+ var ContactAppDevicePlatform;
296
+ (function (ContactAppDevicePlatform) {
297
+ ContactAppDevicePlatform["ANDROID"] = "ANDROID";
298
+ ContactAppDevicePlatform["I_OS"] = "IOS";
299
+ })(ContactAppDevicePlatform = exports.ContactAppDevicePlatform || (exports.ContactAppDevicePlatform = {}));
286
300
  /**
287
301
  * Property keys for Contact
288
302
  * Use these constants instead of string literals for type safety
@@ -409,6 +423,8 @@ var ContactPropertyKeys;
409
423
  ContactPropertyKeys["AppPushNotificationStatusDate"] = "AppPushNotificationStatusDate";
410
424
  /** When AppBiometricLoginStatus last changed (PORTAPP-3345). */
411
425
  ContactPropertyKeys["AppBiometricLoginStatusDate"] = "AppBiometricLoginStatusDate";
426
+ /** The platform of the phone the customer most recently used the app on. Empty until the app reports it (PORTAPP-3483). */
427
+ ContactPropertyKeys["AppDevicePlatform"] = "AppDevicePlatform";
412
428
  })(ContactPropertyKeys = exports.ContactPropertyKeys || (exports.ContactPropertyKeys = {}));
413
429
  /**
414
430
  * Contact entity from CrmModule
@@ -0,0 +1,146 @@
1
+ /**
2
+ * ReleaseNote Entity Definition
3
+ *
4
+ * One plain-English line for a production release, grouped by day and domain on the desktop Released page. Written only by Factor; never edited by hand.
5
+ *
6
+ * @module AuditModule
7
+ * @entity ReleaseNote
8
+ * @schemaId 2a566b83-4200-455d-b965-11ca4cfa6a4e
9
+ *
10
+ * AUTO-GENERATED - DO NOT EDIT DIRECTLY
11
+ * Generated from Odin schema definition
12
+ */
13
+ import { OdinRecord } from '@d19n/odin-types/dist/core';
14
+ /**
15
+ * Available types for ReleaseNote records
16
+ */
17
+ export declare enum ReleaseNoteEntityTypes {
18
+ /** This is the default record type */
19
+ DEFAULT = "DEFAULT"
20
+ }
21
+ /**
22
+ * Property keys for ReleaseNote
23
+ * Use these constants instead of string literals for type safety
24
+ */
25
+ export declare enum ReleaseNotePropertyKeys {
26
+ /** The London calendar day the release reached production. */
27
+ ReleaseDate = "ReleaseDate",
28
+ /** Domain id from agent-os/org/domains.ts, e.g. connect-and-activate. */
29
+ Domain = "Domain",
30
+ /** The domain as people read it, e.g. Connect & Activate. */
31
+ DomainTitle = "DomainTitle",
32
+ /** Business process file name, e.g. order. */
33
+ ProcessId = "ProcessId",
34
+ /** The business process as people read it, e.g. Order. */
35
+ ProcessTitle = "ProcessTitle",
36
+ /** The stage of the process the change touches, e.g. Supply. Empty when the change is not about one stage. */
37
+ Stage = "Stage",
38
+ /** The one plain-English line shown on the page. The plan title until COMPLETE replaces it with the reviewed line. */
39
+ Summary = "Summary",
40
+ /** The Factor plan the release belongs to, e.g. PLAN-67. */
41
+ PlanId = "PlanId",
42
+ /** The Heimdall release id. UNIQUE: one note per release. */
43
+ ReleaseId = "ReleaseId",
44
+ /** The application the release changed, found by comparing image tags with the release before it. */
45
+ App = "App"
46
+ }
47
+ /**
48
+ * Properties for ReleaseNote records
49
+ *
50
+ * @see AuditModule:ReleaseNote
51
+ */
52
+ export interface ReleaseNoteProperties {
53
+ /** The London calendar day the release reached production.
54
+ *
55
+ * @type {DATE}
56
+ * @default
57
+ */
58
+ ReleaseDate: string;
59
+ /** Domain id from agent-os/org/domains.ts, e.g. connect-and-activate.
60
+ *
61
+ * @type {TEXT}
62
+ * @default
63
+ */
64
+ Domain: string;
65
+ /** The domain as people read it, e.g. Connect & Activate.
66
+ *
67
+ * @type {TEXT}
68
+ * @default
69
+ */
70
+ DomainTitle: string;
71
+ /** Business process file name, e.g. order.
72
+ *
73
+ * @type {TEXT}
74
+ * @default
75
+ */
76
+ ProcessId: string;
77
+ /** The business process as people read it, e.g. Order.
78
+ *
79
+ * @type {TEXT}
80
+ * @default
81
+ */
82
+ ProcessTitle: string;
83
+ /** The stage of the process the change touches, e.g. Supply. Empty when the change is not about one stage.
84
+ *
85
+ * @type {TEXT}
86
+ * @default
87
+ */
88
+ Stage: string;
89
+ /** The one plain-English line shown on the page. The plan title until COMPLETE replaces it with the reviewed line.
90
+ *
91
+ * @type {TEXT}
92
+ * @default
93
+ */
94
+ Summary: string;
95
+ /** The Factor plan the release belongs to, e.g. PLAN-67.
96
+ *
97
+ * @type {TEXT}
98
+ * @default
99
+ */
100
+ PlanId: string;
101
+ /** The Heimdall release id. UNIQUE: one note per release.
102
+ *
103
+ * @type {TEXT}
104
+ * @default
105
+ */
106
+ ReleaseId: string;
107
+ /** The application the release changed, found by comparing image tags with the release before it.
108
+ *
109
+ * @type {TEXT}
110
+ * @default
111
+ */
112
+ App: string;
113
+ }
114
+ /**
115
+ * ReleaseNote entity from AuditModule
116
+ *
117
+ * One plain-English line for a production release, grouped by day and domain on the desktop Released page. Written only by Factor; never edited by hand.
118
+ *
119
+ * @module AuditModule
120
+ * @entity ReleaseNote
121
+ * @schemaId 2a566b83-4200-455d-b965-11ca4cfa6a4e
122
+ * @recordPrefix REL
123
+ * @capabilities searchable, updateable, undeletable, triggerable
124
+ */
125
+ export declare class ReleaseNote extends OdinRecord<ReleaseNoteProperties> {
126
+ entity: 'AuditModule:ReleaseNote';
127
+ type: ReleaseNoteEntityTypes;
128
+ schemaId: '2a566b83-4200-455d-b965-11ca4cfa6a4e';
129
+ properties: ReleaseNoteProperties;
130
+ }
131
+ /**
132
+ * RabbitMQ routing keys for ReleaseNote events
133
+ */
134
+ export declare const ROUTING_KEY_RELEASE_NOTE_CREATED = "AuditModule.ReleaseNote.SubDbRecordCreated";
135
+ export declare const ROUTING_KEY_RELEASE_NOTE_UPDATED = "AuditModule.ReleaseNote.SubDbRecordUpdated";
136
+ export declare const ROUTING_KEY_RELEASE_NOTE_DELETED = "AuditModule.ReleaseNote.SubDbRecordDeleted";
137
+ /**
138
+ * Type-specific routing keys for ReleaseNote events
139
+ * Subscribe to these for events on specific entity types only
140
+ */
141
+ /** This is the default record type created */
142
+ export declare const ROUTING_KEY_RELEASE_NOTE_DEFAULT_CREATED = "AuditModule.ReleaseNote.DEFAULT.SubDbRecordCreated";
143
+ /** This is the default record type updated */
144
+ export declare const ROUTING_KEY_RELEASE_NOTE_DEFAULT_UPDATED = "AuditModule.ReleaseNote.DEFAULT.SubDbRecordUpdated";
145
+ /** This is the default record type deleted */
146
+ export declare const ROUTING_KEY_RELEASE_NOTE_DEFAULT_DELETED = "AuditModule.ReleaseNote.DEFAULT.SubDbRecordDeleted";
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * ReleaseNote Entity Definition
4
+ *
5
+ * One plain-English line for a production release, grouped by day and domain on the desktop Released page. Written only by Factor; never edited by hand.
6
+ *
7
+ * @module AuditModule
8
+ * @entity ReleaseNote
9
+ * @schemaId 2a566b83-4200-455d-b965-11ca4cfa6a4e
10
+ *
11
+ * AUTO-GENERATED - DO NOT EDIT DIRECTLY
12
+ * Generated from Odin schema definition
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_DELETED = exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_UPDATED = exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_CREATED = exports.ROUTING_KEY_RELEASE_NOTE_DELETED = exports.ROUTING_KEY_RELEASE_NOTE_UPDATED = exports.ROUTING_KEY_RELEASE_NOTE_CREATED = exports.ReleaseNote = exports.ReleaseNotePropertyKeys = exports.ReleaseNoteEntityTypes = void 0;
16
+ const core_1 = require("@d19n/odin-types/dist/core");
17
+ /**
18
+ * Available types for ReleaseNote records
19
+ */
20
+ var ReleaseNoteEntityTypes;
21
+ (function (ReleaseNoteEntityTypes) {
22
+ /** This is the default record type */
23
+ ReleaseNoteEntityTypes["DEFAULT"] = "DEFAULT";
24
+ })(ReleaseNoteEntityTypes = exports.ReleaseNoteEntityTypes || (exports.ReleaseNoteEntityTypes = {}));
25
+ /**
26
+ * Property keys for ReleaseNote
27
+ * Use these constants instead of string literals for type safety
28
+ */
29
+ var ReleaseNotePropertyKeys;
30
+ (function (ReleaseNotePropertyKeys) {
31
+ /** The London calendar day the release reached production. */
32
+ ReleaseNotePropertyKeys["ReleaseDate"] = "ReleaseDate";
33
+ /** Domain id from agent-os/org/domains.ts, e.g. connect-and-activate. */
34
+ ReleaseNotePropertyKeys["Domain"] = "Domain";
35
+ /** The domain as people read it, e.g. Connect & Activate. */
36
+ ReleaseNotePropertyKeys["DomainTitle"] = "DomainTitle";
37
+ /** Business process file name, e.g. order. */
38
+ ReleaseNotePropertyKeys["ProcessId"] = "ProcessId";
39
+ /** The business process as people read it, e.g. Order. */
40
+ ReleaseNotePropertyKeys["ProcessTitle"] = "ProcessTitle";
41
+ /** The stage of the process the change touches, e.g. Supply. Empty when the change is not about one stage. */
42
+ ReleaseNotePropertyKeys["Stage"] = "Stage";
43
+ /** The one plain-English line shown on the page. The plan title until COMPLETE replaces it with the reviewed line. */
44
+ ReleaseNotePropertyKeys["Summary"] = "Summary";
45
+ /** The Factor plan the release belongs to, e.g. PLAN-67. */
46
+ ReleaseNotePropertyKeys["PlanId"] = "PlanId";
47
+ /** The Heimdall release id. UNIQUE: one note per release. */
48
+ ReleaseNotePropertyKeys["ReleaseId"] = "ReleaseId";
49
+ /** The application the release changed, found by comparing image tags with the release before it. */
50
+ ReleaseNotePropertyKeys["App"] = "App";
51
+ })(ReleaseNotePropertyKeys = exports.ReleaseNotePropertyKeys || (exports.ReleaseNotePropertyKeys = {}));
52
+ /**
53
+ * ReleaseNote entity from AuditModule
54
+ *
55
+ * One plain-English line for a production release, grouped by day and domain on the desktop Released page. Written only by Factor; never edited by hand.
56
+ *
57
+ * @module AuditModule
58
+ * @entity ReleaseNote
59
+ * @schemaId 2a566b83-4200-455d-b965-11ca4cfa6a4e
60
+ * @recordPrefix REL
61
+ * @capabilities searchable, updateable, undeletable, triggerable
62
+ */
63
+ class ReleaseNote extends core_1.OdinRecord {
64
+ }
65
+ exports.ReleaseNote = ReleaseNote;
66
+ // ============================================
67
+ // RABBITMQ EVENT ROUTING KEYS
68
+ // ============================================
69
+ /**
70
+ * RabbitMQ routing keys for ReleaseNote events
71
+ */
72
+ exports.ROUTING_KEY_RELEASE_NOTE_CREATED = 'AuditModule.ReleaseNote.SubDbRecordCreated';
73
+ exports.ROUTING_KEY_RELEASE_NOTE_UPDATED = 'AuditModule.ReleaseNote.SubDbRecordUpdated';
74
+ exports.ROUTING_KEY_RELEASE_NOTE_DELETED = 'AuditModule.ReleaseNote.SubDbRecordDeleted';
75
+ /**
76
+ * Type-specific routing keys for ReleaseNote events
77
+ * Subscribe to these for events on specific entity types only
78
+ */
79
+ /** This is the default record type created */
80
+ exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_CREATED = 'AuditModule.ReleaseNote.DEFAULT.SubDbRecordCreated';
81
+ /** This is the default record type updated */
82
+ exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_UPDATED = 'AuditModule.ReleaseNote.DEFAULT.SubDbRecordUpdated';
83
+ /** This is the default record type deleted */
84
+ exports.ROUTING_KEY_RELEASE_NOTE_DEFAULT_DELETED = 'AuditModule.ReleaseNote.DEFAULT.SubDbRecordDeleted';
@@ -35,6 +35,19 @@ export declare enum YfWifiSurveySource {
35
35
  GATEWAY_PROBE_I_OS = "GATEWAY",
36
36
  NONE_SURVEY_REFUSED = "NONE"
37
37
  }
38
+ /**
39
+ * Valid values for YfWifiSurvey.MeshRecommendation
40
+ *
41
+ * What the customer said when the engineer suggested a mesh unit, prompted by the app where coverage was poor or unusable. Null means no mesh was suggested. The same outcome is still written into the first line of EngineerNote; for older app builds the API parses that line.
42
+ *
43
+ * @remarks Available options:
44
+ * - `ACCEPTED` - Accepted
45
+ * - `DECLINED` - Declined
46
+ */
47
+ export declare enum YfWifiSurveyMeshRecommendation {
48
+ ACCEPTED = "ACCEPTED",
49
+ DECLINED = "DECLINED"
50
+ }
38
51
  /**
39
52
  * Property keys for YfWifiSurvey
40
53
  * Use these constants instead of string literals for type safety
@@ -79,7 +92,11 @@ export declare enum YfWifiSurveyPropertyKeys {
79
92
  /** Download figure from the speed test, copied out of SpeedTest.downloadMbps by the API. Exists only so list views can show and sort on the measured speed — a JSON column cannot be a sortable table column. Null exactly when SpeedTest is null. */
80
93
  SpeedTestDownloadMbps = "SpeedTestDownloadMbps",
81
94
  /** Upload figure from the speed test, copied out of SpeedTest.uploadMbps by the API. Exists only so list views can show and sort on the measured speed — a JSON column cannot be a sortable table column. Null exactly when SpeedTest is null. */
82
- SpeedTestUploadMbps = "SpeedTestUploadMbps"
95
+ SpeedTestUploadMbps = "SpeedTestUploadMbps",
96
+ /** What the customer said when the engineer suggested a mesh unit, prompted by the app where coverage was poor or unusable. Null means no mesh was suggested. The same outcome is still written into the first line of EngineerNote; for older app builds the API parses that line. */
97
+ MeshRecommendation = "MeshRecommendation",
98
+ /** Why the customer declined the suggested mesh unit — the app requires one on a decline. Null unless MeshRecommendation is DECLINED. */
99
+ MeshDeclineReason = "MeshDeclineReason"
83
100
  }
84
101
  /**
85
102
  * Properties for YfWifiSurvey records
@@ -208,6 +225,19 @@ export interface YfWifiSurveyProperties {
208
225
  * @default
209
226
  */
210
227
  SpeedTestUploadMbps: number;
228
+ /** What the customer said when the engineer suggested a mesh unit, prompted by the app where coverage was poor or unusable. Null means no mesh was suggested. The same outcome is still written into the first line of EngineerNote; for older app builds the API parses that line.
229
+ *
230
+ * @type {ENUM}
231
+ * @default
232
+ * @enum {YfWifiSurveyMeshRecommendation}
233
+ */
234
+ MeshRecommendation: YfWifiSurveyMeshRecommendation;
235
+ /** Why the customer declined the suggested mesh unit — the app requires one on a decline. Null unless MeshRecommendation is DECLINED.
236
+ *
237
+ * @type {TEXT}
238
+ * @default
239
+ */
240
+ MeshDeclineReason: string;
211
241
  }
212
242
  /**
213
243
  * YfWifiSurvey entity from FieldServiceModule
@@ -12,7 +12,7 @@
12
12
  * Generated from Odin schema definition
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.ROUTING_KEY_LINK_YF_WIFI_SURVEY_FILE_DELETED = exports.ROUTING_KEY_LINK_YF_WIFI_SURVEY_FILE_CREATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_DELETED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_UPDATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_CREATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DELETED = exports.ROUTING_KEY_YF_WIFI_SURVEY_UPDATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_CREATED = exports.YfWifiSurvey = exports.YfWifiSurveyPropertyKeys = exports.YfWifiSurveySource = exports.YfWifiSurveyEntityTypes = void 0;
15
+ exports.ROUTING_KEY_LINK_YF_WIFI_SURVEY_FILE_DELETED = exports.ROUTING_KEY_LINK_YF_WIFI_SURVEY_FILE_CREATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_DELETED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_UPDATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DEFAULT_CREATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_DELETED = exports.ROUTING_KEY_YF_WIFI_SURVEY_UPDATED = exports.ROUTING_KEY_YF_WIFI_SURVEY_CREATED = exports.YfWifiSurvey = exports.YfWifiSurveyPropertyKeys = exports.YfWifiSurveyMeshRecommendation = exports.YfWifiSurveySource = exports.YfWifiSurveyEntityTypes = void 0;
16
16
  const core_1 = require("@d19n/odin-types/dist/core");
17
17
  /**
18
18
  * Available types for YfWifiSurvey records
@@ -38,6 +38,20 @@ var YfWifiSurveySource;
38
38
  YfWifiSurveySource["GATEWAY_PROBE_I_OS"] = "GATEWAY";
39
39
  YfWifiSurveySource["NONE_SURVEY_REFUSED"] = "NONE";
40
40
  })(YfWifiSurveySource = exports.YfWifiSurveySource || (exports.YfWifiSurveySource = {}));
41
+ /**
42
+ * Valid values for YfWifiSurvey.MeshRecommendation
43
+ *
44
+ * What the customer said when the engineer suggested a mesh unit, prompted by the app where coverage was poor or unusable. Null means no mesh was suggested. The same outcome is still written into the first line of EngineerNote; for older app builds the API parses that line.
45
+ *
46
+ * @remarks Available options:
47
+ * - `ACCEPTED` - Accepted
48
+ * - `DECLINED` - Declined
49
+ */
50
+ var YfWifiSurveyMeshRecommendation;
51
+ (function (YfWifiSurveyMeshRecommendation) {
52
+ YfWifiSurveyMeshRecommendation["ACCEPTED"] = "ACCEPTED";
53
+ YfWifiSurveyMeshRecommendation["DECLINED"] = "DECLINED";
54
+ })(YfWifiSurveyMeshRecommendation = exports.YfWifiSurveyMeshRecommendation || (exports.YfWifiSurveyMeshRecommendation = {}));
41
55
  /**
42
56
  * Property keys for YfWifiSurvey
43
57
  * Use these constants instead of string literals for type safety
@@ -84,6 +98,10 @@ var YfWifiSurveyPropertyKeys;
84
98
  YfWifiSurveyPropertyKeys["SpeedTestDownloadMbps"] = "SpeedTestDownloadMbps";
85
99
  /** Upload figure from the speed test, copied out of SpeedTest.uploadMbps by the API. Exists only so list views can show and sort on the measured speed — a JSON column cannot be a sortable table column. Null exactly when SpeedTest is null. */
86
100
  YfWifiSurveyPropertyKeys["SpeedTestUploadMbps"] = "SpeedTestUploadMbps";
101
+ /** What the customer said when the engineer suggested a mesh unit, prompted by the app where coverage was poor or unusable. Null means no mesh was suggested. The same outcome is still written into the first line of EngineerNote; for older app builds the API parses that line. */
102
+ YfWifiSurveyPropertyKeys["MeshRecommendation"] = "MeshRecommendation";
103
+ /** Why the customer declined the suggested mesh unit — the app requires one on a decline. Null unless MeshRecommendation is DECLINED. */
104
+ YfWifiSurveyPropertyKeys["MeshDeclineReason"] = "MeshDeclineReason";
87
105
  })(YfWifiSurveyPropertyKeys = exports.YfWifiSurveyPropertyKeys || (exports.YfWifiSurveyPropertyKeys = {}));
88
106
  /**
89
107
  * YfWifiSurvey entity from FieldServiceModule
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@d19n/youfibre-odin-sdk",
3
- "version": "2.0.368",
3
+ "version": "2.0.369",
4
4
  "description": "",
5
5
  "author": "@d19n",
6
6
  "license": "UNLICENSED",