@raidiant/notifai 12.0.0-beta.13 → 12.0.0-beta.16
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/CHANGELOG.md +14 -2
- package/bin/notifai.mjs +33 -5
- package/data/install.ps1 +142 -11
- package/data/release.json +1 -1
- package/inventory.json +1 -1
- package/npm-adapter-files.json +12 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
8
8
|
This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
|
|
9
9
|
and [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
10
10
|
|
|
11
|
-
## [12.0.0-beta.
|
|
11
|
+
## [12.0.0-beta.16](https://github.com/Raidiant-io/notifai/compare/v12.0.0-beta.15...v12.0.0-beta.16) (2026-10-10)
|
|
12
|
+
|
|
13
|
+
### Fixes
|
|
14
|
+
|
|
15
|
+
* Keep active questions and session owners on compatible retained runtimes during native updates. Stage incompatible first upgrades until existing work can finish safely.
|
|
16
|
+
* Repair verified legacy Windows npm installations in place through their package manager during an approved observed maintenance window. Preserve the complete package and recover interrupted replacement forward without uninstalling first.
|
|
17
|
+
* Repair only changed owned harness integration, preserve User edits and healthy owners, and recover abandoned Hermes publication reservations without replaying host operations.
|
|
18
|
+
* Report the actual CLI execution domain and scoped pending repair in diagnostics.
|
|
19
|
+
* Compile Windows PowerShell bootstrap helpers correctly when temporary paths contain Unicode, quotes or shell punctuation.
|
|
20
|
+
|
|
21
|
+
## [12.0.0-beta.15](https://github.com/Raidiant-io/notifai/compare/v11.8.0...v12.0.0-beta.15) (2026-10-09)
|
|
12
22
|
|
|
13
23
|
### Breaking changes
|
|
14
24
|
|
|
@@ -16,8 +26,10 @@ and [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/).
|
|
|
16
26
|
|
|
17
27
|
### Improvements
|
|
18
28
|
|
|
29
|
+
* Include readable release notes in every native binary and verify the bundled changelog against canonical source.
|
|
30
|
+
|
|
19
31
|
* Refresh installer-owned guidance and recover owned hooks and sessions even when unrelated user-installed skills are present; preserve those files and keep their diagnosis visible.
|
|
20
|
-
*
|
|
32
|
+
* Verify npm publication using its current dist-tag endpoint, with bounded reads and no repeat publication or unrelated tag changes.
|
|
21
33
|
|
|
22
34
|
* Resume Codex activity tracking across oversized transcript entries without resetting existing sessions.
|
|
23
35
|
* Give doctor, setup and update the same skill ownership diagnosis; preserve user-managed content and recover interrupted installer-owned placements.
|
package/bin/notifai.mjs
CHANGED
|
@@ -7053,6 +7053,13 @@ function isPrerelease(value) {
|
|
|
7053
7053
|
return SEMVER.exec(value)?.[4] !== void 0;
|
|
7054
7054
|
}
|
|
7055
7055
|
|
|
7056
|
+
// apps/cli/src/local-continuity.ts
|
|
7057
|
+
function localContinuity(value) {
|
|
7058
|
+
const item = value;
|
|
7059
|
+
if (!item || typeof item.contract !== "string" || !/^[a-z0-9][a-z0-9-]{0,63}$/.test(item.contract)) throw new Error("Invalid local continuity contract");
|
|
7060
|
+
return { contract: item.contract };
|
|
7061
|
+
}
|
|
7062
|
+
|
|
7056
7063
|
// apps/cli/src/release-distribution.ts
|
|
7057
7064
|
var RELEASE_TARGETS = [
|
|
7058
7065
|
"bun-darwin-arm64",
|
|
@@ -7111,11 +7118,19 @@ var Distribution = class {
|
|
|
7111
7118
|
const publicKey = createPublicKey(key);
|
|
7112
7119
|
if (publicKey.asymmetricKeyType !== "ed25519" || signature.length !== 64 || !verify(null, releaseSigningMessage(kind, payload), publicKey, signature)) throw new Error("Invalid release signature");
|
|
7113
7120
|
const value = JSON.parse(payload.toString("utf8"));
|
|
7114
|
-
if (!record(value) || value["schema"] !== 1
|
|
7121
|
+
if (!record(value) || value["schema"] !== 1 && !(kind === "inventory" && value["schema"] === 2)) {
|
|
7122
|
+
throw new Error("Unsupported release record schema");
|
|
7123
|
+
}
|
|
7115
7124
|
return value;
|
|
7116
7125
|
}
|
|
7117
7126
|
verifyInventory(bytes) {
|
|
7118
7127
|
const value = this.verifyRecord("inventory", bytes);
|
|
7128
|
+
if (value["schema"] === 2) {
|
|
7129
|
+
const continuity = localContinuity(value["local_continuity"]);
|
|
7130
|
+
value["local_continuity"] = Object.freeze(continuity);
|
|
7131
|
+
} else if (value["local_continuity"] !== void 0) {
|
|
7132
|
+
throw new Error("Historical inventory cannot declare an enforcing continuity contract");
|
|
7133
|
+
}
|
|
7119
7134
|
if (!version(value["version"]) || typeof value["source_revision"] !== "string" || !/^[a-f0-9]{40}$/.test(value["source_revision"]) || !positive(value["store_schema"]) || !positive(value["launcher_schema"]) || !Array.isArray(value["artifacts"]) || value["artifacts"].length === 0 || value["artifacts"].length > RELEASE_TARGETS.length) {
|
|
7120
7135
|
throw new Error("Malformed release inventory");
|
|
7121
7136
|
}
|
|
@@ -7260,6 +7275,20 @@ var NPM_ADAPTER_MANIFEST = "npm-adapter-files.json";
|
|
|
7260
7275
|
var NPM_ADAPTER_INVENTORY = "inventory.json";
|
|
7261
7276
|
var NPM_ADAPTER_MAX_METADATA = 256 * 1024;
|
|
7262
7277
|
var NPM_ADAPTER_MAX_BYTES = 16 * 1024 * 1024;
|
|
7278
|
+
function assertNpmAdapterPackage(value, manifest) {
|
|
7279
|
+
const pkg = value;
|
|
7280
|
+
const bin = pkg?.["bin"];
|
|
7281
|
+
if (!pkg || pkg["name"] !== manifest.package || pkg["version"] !== manifest.adapter_version || !bin || typeof bin !== "object" || Array.isArray(bin) || Object.keys(bin).length !== 1 || bin["notifai"] !== NPM_ADAPTER_BIN || [
|
|
7282
|
+
"scripts",
|
|
7283
|
+
"dependencies",
|
|
7284
|
+
"optionalDependencies",
|
|
7285
|
+
"peerDependencies",
|
|
7286
|
+
"bundleDependencies",
|
|
7287
|
+
"bundledDependencies",
|
|
7288
|
+
"directories",
|
|
7289
|
+
"man"
|
|
7290
|
+
].some((key) => Object.hasOwn(pkg, key))) throw new Error("Invalid published npm adapter package contract");
|
|
7291
|
+
}
|
|
7263
7292
|
function npmAdapterInventoryUrl(version2) {
|
|
7264
7293
|
if (version2.length > 100 || !isSemVer(version2)) throw new Error("Invalid npm adapter version");
|
|
7265
7294
|
return `https://github.com/Raidiant-io/notifai/releases/download/v${version2}/inventory.json`;
|
|
@@ -7353,8 +7382,7 @@ function verifyNpmAdapterArtifact(directory, distribution, checkAccess = npmAdap
|
|
|
7353
7382
|
}
|
|
7354
7383
|
if (expected.size) throw new Error("Npm adapter payload is incomplete");
|
|
7355
7384
|
const executable = path.join(directory, NPM_ADAPTER_BIN);
|
|
7356
|
-
|
|
7357
|
-
if (pkg.name !== manifest.package || pkg.version !== manifest.adapter_version || pkg.bin?.notifai !== NPM_ADAPTER_BIN || pkg.scripts !== void 0 || pkg.dependencies !== void 0) throw new Error("Invalid published npm adapter package contract");
|
|
7385
|
+
assertNpmAdapterPackage(JSON.parse(metadata("package.json")), manifest);
|
|
7358
7386
|
return { directory, executable, manifest, inventory, signedInventory };
|
|
7359
7387
|
}
|
|
7360
7388
|
|
|
@@ -10711,12 +10739,12 @@ function assertCurrentUserOwns(file, owner) {
|
|
|
10711
10739
|
var MAX_EXPANDED = 768 * 1024 * 1024;
|
|
10712
10740
|
var MAX_FILE = 512 * 1024 * 1024;
|
|
10713
10741
|
var MAX_ENTRIES = 130;
|
|
10714
|
-
async function tarEntries(bytes, consume) {
|
|
10742
|
+
async function tarEntries(bytes, consume, maxExpanded = MAX_EXPANDED) {
|
|
10715
10743
|
const reader = (0, import_tar_stream.extract)();
|
|
10716
10744
|
let expanded = 0;
|
|
10717
10745
|
const limit = new Transform({ transform(chunk, _encoding, done) {
|
|
10718
10746
|
expanded += chunk.length;
|
|
10719
|
-
done(expanded >
|
|
10747
|
+
done(expanded > maxExpanded ? new Error("Archive expanded size exceeds its limit") : null, chunk);
|
|
10720
10748
|
} });
|
|
10721
10749
|
const pumping = pipeline(
|
|
10722
10750
|
Readable.from([bytes]),
|
package/data/install.ps1
CHANGED
|
@@ -9,7 +9,8 @@ param(
|
|
|
9
9
|
[switch]$Json,
|
|
10
10
|
[switch]$NoInit,
|
|
11
11
|
[switch]$NoPath,
|
|
12
|
-
[switch]$MigrateNpm
|
|
12
|
+
[switch]$MigrateNpm,
|
|
13
|
+
[switch]$Upgrade
|
|
13
14
|
)
|
|
14
15
|
Set-StrictMode -Version Latest
|
|
15
16
|
$ErrorActionPreference = 'Stop'
|
|
@@ -147,9 +148,38 @@ function Expand-NotifaiArchive([string]$Archive, [string]$Destination) {
|
|
|
147
148
|
}
|
|
148
149
|
} finally { $zip.Dispose() }
|
|
149
150
|
}
|
|
151
|
+
function Add-NotifaiBootstrapType([string]$Source) {
|
|
152
|
+
if ($PSVersionTable.PSEdition -ne 'Desktop') { Add-Type -TypeDefinition $Source -ErrorAction Stop; return }
|
|
153
|
+
# Framework CodeDom passes csc an ANSI environment block. Keep its temporary
|
|
154
|
+
# paths relative even when the User's profile/TEMP contains non-ANSI text.
|
|
155
|
+
# Only this synchronous compiler invocation changes process-local cwd/env.
|
|
156
|
+
$scratch = [IO.Path]::Combine([IO.Path]::GetTempPath(), 'notifai-compiler-' + [Guid]::NewGuid().ToString('N'))
|
|
157
|
+
New-NotifaiPrivateDirectory $scratch
|
|
158
|
+
$previousDirectory = [Environment]::CurrentDirectory
|
|
159
|
+
$previousTemp = $env:TEMP
|
|
160
|
+
$previousTmp = $env:TMP
|
|
161
|
+
$parameters = [CodeDom.Compiler.CompilerParameters]::new()
|
|
162
|
+
$parameters.GenerateInMemory = $true
|
|
163
|
+
[void]$parameters.ReferencedAssemblies.Add([ComponentModel.Win32Exception].Assembly.Location)
|
|
164
|
+
$parameters.TempFiles = [CodeDom.Compiler.TempFileCollection]::new('.', $false)
|
|
165
|
+
try {
|
|
166
|
+
[Environment]::CurrentDirectory = $scratch
|
|
167
|
+
$env:TEMP = '.'
|
|
168
|
+
$env:TMP = '.'
|
|
169
|
+
Add-Type -TypeDefinition $Source -CompilerParameters $parameters -ErrorAction Stop
|
|
170
|
+
} finally {
|
|
171
|
+
try { $parameters.TempFiles.Dispose() }
|
|
172
|
+
finally {
|
|
173
|
+
[Environment]::CurrentDirectory = $previousDirectory
|
|
174
|
+
$env:TEMP = $previousTemp
|
|
175
|
+
$env:TMP = $previousTmp
|
|
176
|
+
[IO.Directory]::Delete($scratch, $true)
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
150
180
|
function Get-NotifaiWindowsTarget {
|
|
151
181
|
if (-not ('NotifaiBootstrap.Native' -as [type])) {
|
|
152
|
-
Add-
|
|
182
|
+
Add-NotifaiBootstrapType @'
|
|
153
183
|
using System;
|
|
154
184
|
using System.Runtime.InteropServices;
|
|
155
185
|
namespace NotifaiBootstrap {
|
|
@@ -215,15 +245,113 @@ function Get-NotifaiAccountHome {
|
|
|
215
245
|
}
|
|
216
246
|
return $accountHome
|
|
217
247
|
}
|
|
248
|
+
# Read the descriptor and physical location through one non-following handle.
|
|
249
|
+
# Package capabilities restrict a User's access; they do not replace it.
|
|
250
|
+
# Only the registered package owning this current-User npm location is admitted.
|
|
251
|
+
function Get-NotifaiPathSecurity([string]$File, [bool]$Package) {
|
|
252
|
+
if (-not ('NotifaiBootstrap.PathSecurity' -as [type])) {
|
|
253
|
+
Add-NotifaiBootstrapType @'
|
|
254
|
+
using System;
|
|
255
|
+
using System.IO;
|
|
256
|
+
using System.Text;
|
|
257
|
+
using System.ComponentModel;
|
|
258
|
+
using System.Runtime.InteropServices;
|
|
259
|
+
using System.Security.AccessControl;
|
|
260
|
+
using System.Security.Principal;
|
|
261
|
+
using Microsoft.Win32.SafeHandles;
|
|
262
|
+
namespace NotifaiBootstrap {
|
|
263
|
+
public sealed class PathSecurity {
|
|
264
|
+
public RawSecurityDescriptor Descriptor;
|
|
265
|
+
public uint Attributes;
|
|
266
|
+
public string Capability;
|
|
267
|
+
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
|
|
268
|
+
static extern SafeFileHandle CreateFile(string name, uint access, uint share, IntPtr security, uint disposition, uint flags, IntPtr template);
|
|
269
|
+
[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
|
|
270
|
+
static extern uint GetFinalPathNameByHandle(SafeFileHandle file, StringBuilder path, uint length, uint flags);
|
|
271
|
+
[DllImport("kernel32.dll", SetLastError=true)]
|
|
272
|
+
static extern bool GetFileInformationByHandleEx(SafeFileHandle file, int kind, out TagInfo info, uint size);
|
|
273
|
+
[DllImport("kernel32.dll")]
|
|
274
|
+
static extern uint GetFileType(SafeFileHandle file);
|
|
275
|
+
[StructLayout(LayoutKind.Sequential)] struct TagInfo { public uint Attributes; public uint Tag; }
|
|
276
|
+
[DllImport("advapi32.dll")]
|
|
277
|
+
static extern uint GetSecurityInfo(SafeFileHandle file, int kind, uint information, out IntPtr owner, out IntPtr group, out IntPtr dacl, out IntPtr sacl, out IntPtr descriptor);
|
|
278
|
+
[DllImport("advapi32.dll")]
|
|
279
|
+
static extern uint GetSecurityDescriptorLength(IntPtr descriptor);
|
|
280
|
+
[DllImport("kernel32.dll")]
|
|
281
|
+
static extern IntPtr LocalFree(IntPtr memory);
|
|
282
|
+
[DllImport("advapi32.dll")]
|
|
283
|
+
static extern IntPtr FreeSid(IntPtr sid);
|
|
284
|
+
[DllImport("userenv.dll", CharSet=CharSet.Unicode)]
|
|
285
|
+
static extern int DeriveAppContainerSidFromAppContainerName(string name, out IntPtr sid);
|
|
286
|
+
[DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
|
|
287
|
+
static extern int GetPackagesByPackageFamily(string family, ref uint count, IntPtr names, ref uint size, IntPtr buffer);
|
|
288
|
+
static SafeFileHandle Open(string file, uint access) {
|
|
289
|
+
var handle = CreateFile(file, access, 7, IntPtr.Zero, 3, 0x02200000, IntPtr.Zero);
|
|
290
|
+
if (handle.IsInvalid) { handle.Dispose(); throw new Win32Exception(); }
|
|
291
|
+
return handle;
|
|
292
|
+
}
|
|
293
|
+
static string Physical(SafeFileHandle handle) {
|
|
294
|
+
var path = new StringBuilder(32768);
|
|
295
|
+
uint length = GetFinalPathNameByHandle(handle, path, 32768, 0);
|
|
296
|
+
if (length == 0 || length >= 32768) throw new Win32Exception();
|
|
297
|
+
return path.ToString();
|
|
298
|
+
}
|
|
299
|
+
static string PackageCapability(string physical) {
|
|
300
|
+
string home = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
|
301
|
+
string prefix;
|
|
302
|
+
using (var handle = Open(home, 0x80)) { prefix = Physical(handle).TrimEnd('\\') + @"\AppData\Local\Packages\"; }
|
|
303
|
+
if (!physical.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) return null;
|
|
304
|
+
string relative = physical.Substring(prefix.Length);
|
|
305
|
+
int end = relative.IndexOf('\\');
|
|
306
|
+
if (end <= 0 || end > 255) return null;
|
|
307
|
+
string family = relative.Substring(0, end), tail = relative.Substring(end);
|
|
308
|
+
const string npm = @"\LocalCache\Roaming\npm";
|
|
309
|
+
if (!tail.Equals(npm, StringComparison.OrdinalIgnoreCase) && !tail.StartsWith(npm + @"\", StringComparison.OrdinalIgnoreCase)) return null;
|
|
310
|
+
uint count = 0, size = 0;
|
|
311
|
+
if (GetPackagesByPackageFamily(family, ref count, IntPtr.Zero, ref size, IntPtr.Zero) != 122 || count == 0 || size == 0) return null;
|
|
312
|
+
IntPtr pointer;
|
|
313
|
+
if (DeriveAppContainerSidFromAppContainerName(family, out pointer) != 0) return null;
|
|
314
|
+
try {
|
|
315
|
+
var sid = new SecurityIdentifier(pointer);
|
|
316
|
+
byte[] bytes = new byte[sid.BinaryLength]; sid.GetBinaryForm(bytes, 0);
|
|
317
|
+
if (bytes.Length != 40 || bytes[1] != 8 || BitConverter.ToUInt32(bytes, 8) != 2) return null;
|
|
318
|
+
bytes[8] = 3;
|
|
319
|
+
return new SecurityIdentifier(bytes, 0).Value;
|
|
320
|
+
} finally { FreeSid(pointer); }
|
|
321
|
+
}
|
|
322
|
+
public static PathSecurity Read(string file, bool package) {
|
|
323
|
+
using (var handle = Open(file, 0x20080)) {
|
|
324
|
+
TagInfo info;
|
|
325
|
+
if (GetFileType(handle) != 1 || !GetFileInformationByHandleEx(handle, 9, out info, 8) || (info.Attributes & 0x400) != 0) throw new IOException("Existing path is linked or not a disk object");
|
|
326
|
+
IntPtr owner, group, dacl, sacl, descriptor;
|
|
327
|
+
uint error = GetSecurityInfo(handle, 1, 5, out owner, out group, out dacl, out sacl, out descriptor);
|
|
328
|
+
if (error != 0) throw new Win32Exception((int)error);
|
|
329
|
+
try {
|
|
330
|
+
uint length = GetSecurityDescriptorLength(descriptor);
|
|
331
|
+
if (length == 0 || length > 1024 * 1024) throw new IOException("Invalid path security descriptor");
|
|
332
|
+
byte[] bytes = new byte[length]; Marshal.Copy(descriptor, bytes, 0, bytes.Length);
|
|
333
|
+
return new PathSecurity { Descriptor = new RawSecurityDescriptor(bytes, 0), Attributes = info.Attributes,
|
|
334
|
+
Capability = package ? PackageCapability(Physical(handle)) : null };
|
|
335
|
+
} finally { LocalFree(descriptor); }
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
'@
|
|
341
|
+
}
|
|
342
|
+
return [NotifaiBootstrap.PathSecurity]::Read($File, $Package)
|
|
343
|
+
}
|
|
218
344
|
# Read-only inspection of an existing path. npm can inherit a token's default
|
|
219
345
|
# owner. The OS-confirmed profile can belong to Windows itself; this exception
|
|
220
346
|
# must never admit a system-owned npm package or managed installation path.
|
|
221
347
|
function Assert-NotifaiPathAccess([string]$File, [switch]$AllowDefaultOwner, [switch]$RequireProtected, [switch]$AccountHome) {
|
|
222
348
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
223
349
|
$user = $identity.User.Value
|
|
224
|
-
$
|
|
225
|
-
$
|
|
226
|
-
$
|
|
350
|
+
$security = Get-NotifaiPathSecurity $File $AllowDefaultOwner
|
|
351
|
+
$attributes = [IO.FileAttributes]$security.Attributes
|
|
352
|
+
$acl = $security.Descriptor
|
|
353
|
+
if ($null -eq $acl.Owner -or $null -eq $acl.DiscretionaryAcl) { throw 'Existing path has no owner or discretionary access control' }
|
|
354
|
+
$owner = $acl.Owner.Value
|
|
227
355
|
$defaultOwner = $AllowDefaultOwner -and $identity.Owner.Value -eq 'S-1-5-32-544' -and $owner -eq $identity.Owner.Value
|
|
228
356
|
$profileOwner = $false
|
|
229
357
|
if ($AccountHome) {
|
|
@@ -234,12 +362,13 @@ function Assert-NotifaiPathAccess([string]$File, [switch]$AllowDefaultOwner, [sw
|
|
|
234
362
|
}
|
|
235
363
|
if (($attributes -band [IO.FileAttributes]::ReparsePoint) -ne 0 -or
|
|
236
364
|
($owner -ne $user -and -not $defaultOwner -and -not $profileOwner) -or
|
|
237
|
-
($RequireProtected -and
|
|
365
|
+
($RequireProtected -and ($acl.ControlFlags -band [Security.AccessControl.ControlFlags]::DiscretionaryAclProtected) -eq 0)) { throw 'Existing path is not privately owned; inspect it before repair' }
|
|
238
366
|
$writes = [int64][Security.AccessControl.FileSystemRights]'Write, Delete, DeleteSubdirectoriesAndFiles, ChangePermissions, TakeOwnership' -bor 0x50000000
|
|
239
|
-
foreach ($rule in $acl.
|
|
240
|
-
if ($rule.
|
|
241
|
-
|
|
242
|
-
|
|
367
|
+
foreach ($rule in $acl.DiscretionaryAcl) {
|
|
368
|
+
if ($rule.AceType -eq [Security.AccessControl.AceType]::AccessDenied) { continue }
|
|
369
|
+
if ($rule.AceType -ne [Security.AccessControl.AceType]::AccessAllowed) { throw 'Existing path has unsupported access rules' }
|
|
370
|
+
if (([int64]$rule.AccessMask -band $writes) -ne 0 -and
|
|
371
|
+
$rule.SecurityIdentifier.Value -notin @($user, 'S-1-5-18', 'S-1-5-32-544', $security.Capability)) { throw 'Existing path permits another writer; inspect it before repair' }
|
|
243
372
|
}
|
|
244
373
|
}
|
|
245
374
|
function Get-NotifaiInstalledCommand {
|
|
@@ -264,13 +393,15 @@ function Get-NotifaiInstallArguments {
|
|
|
264
393
|
if ($NoInit) { $nativeArgs += '--no-init' }
|
|
265
394
|
if ($NoPath) { $nativeArgs += '--no-path' }
|
|
266
395
|
if ($MigrateNpm) { $nativeArgs += '--migrate-npm' }
|
|
396
|
+
if ($Upgrade) { $nativeArgs += '--upgrade' }
|
|
267
397
|
return $nativeArgs
|
|
268
398
|
}
|
|
269
399
|
function Invoke-NotifaiBootstrap {
|
|
270
400
|
$selectedChannel = if ($Channel) { $Channel } else { 'stable' }
|
|
271
401
|
if ($Version -and -not (Test-NotifaiVersion $Version)) { throw 'Version must be an exact semantic version' }
|
|
402
|
+
if ($Upgrade -and (-not $Version -or -not $Channel -or -not $NoInit -or -not $NoPath)) { throw 'Upgrade requires exact version, channel, no-init and no-path' }
|
|
272
403
|
$existing = Get-NotifaiInstalledCommand
|
|
273
|
-
if ($existing) {
|
|
404
|
+
if ($existing -and -not $Upgrade) {
|
|
274
405
|
Invoke-NotifaiCandidate $existing (Get-NotifaiInstallArguments)
|
|
275
406
|
return
|
|
276
407
|
}
|
package/data/release.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"12.0.0-beta.
|
|
1
|
+
{"version":"12.0.0-beta.16","source_revision":"2af668df3a00af994039ea1b4ad03e8a8ed49d2a"}
|
package/inventory.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"key_id":"notifai-release-2026-10","payload":"eyJzY2hlbWEiOjEsInZlcnNpb24iOiIxMi4wLjAtYmV0YS4xMyIsInNvdXJjZV9yZXZpc2lvbiI6ImEyYWY5YzQ1Y2NmNDkwMDFmNGNjZjI0MDFmNzM2ODVmYzRlNmMwNWUiLCJzdG9yZV9zY2hlbWEiOjEsImxhdW5jaGVyX3NjaGVtYSI6MSwiYXJ0aWZhY3RzIjpbeyJ0YXJnZXQiOiJidW4tZGFyd2luLWFybTY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjEzLWRhcndpbi1hcm02NC50YXIuZ3oiLCJieXRlcyI6Mjc3NjkzNDAsInNoYTI1NiI6IjlkMWIwZjcyZmVjNmY2ZDE4YzJlZjEwMWUzNGNlMDI2NGI0ZmEwNzA4Yzg0MzhhZDY5NGJjMWNjZTY1MmMwZGYiLCJydW50aW1lX3NoYTI1NiI6ImIzNDEyNmU1NDRhZTgyNzlkNzI1NjU0NDU3ZjhhZTZlMWIwZjlhOGY5ODVhZWQ2NjVlMjlmNWMyNTI5ZGIzZjYiLCJsYXVuY2hlcl9zaGEyNTYiOiIxYzY0ZTE4NTEwZWY1YTQxYzZhN2I5MWMxODU1ZDgyMjIwNDk1NWM1YzI3NGFhZmZjNThmYjNjMTA4YTY2N2VjIiwibWF0ZXJpYWxzIjpbeyJwYXRoIjoiQlVOLUxJQ0VOU0UubWQiLCJieXRlcyI6NTYxMywic2hhMjU2IjoiYjljYWY1MjcyODY5MWI0MDU3ZTM3MTIzMmMyMjFhMTMyODgzMTk4YmUyZjNkMmRkZjkyYzkwNDA0Yzk4NGIxYSJ9LHsicGF0aCI6IkNPUlJFU1BPTkRJTkctU09VUkNFUy5qc29uIiwiYnl0ZXMiOjIwMjAsInNoYTI1NiI6ImZhNGMzNDQ4MDExNTQ4NzJkNjE3OWVlMmVmNDk5MjNkYzlmODkwOWVmMDFlNTNiODZlOGY1N2M2MjU4MjMyNzQifSx7InBhdGgiOiJMSUNFTlNFLnR4dCIsImJ5dGVzIjoxMTM0Niwic2hhMjU2IjoiOTQ0YzEzZmYwZmU3OTVlMjkxZmQxYzQ5NDczZjk4ZDRmZGYxZjc0NjM4ZTAxZjg4Mjc2OWNkNGNhZTc4YjczZCJ9LHsicGF0aCI6Ik5PVElDRS1QUk9WRU5BTkNFLmpzb24iLCJieXRlcyI6NDUwMjY0LCJzaGEyNTYiOiI1MzRkZDU5ZmQ0YzE1ZGQxMzgyZTgyN2YwYjg1YzE5ZjdjNjk4ZTIzNWY5Mjk5ZWFhMjAyZGI1NDAwODM0Mjg4In0seyJwYXRoIjoiTk9USUNFLnR4dCIsImJ5dGVzIjo2MjYsInNoYTI1NiI6IjFkZmJmNDQ5OGRjMDI2YjIwNTljMGIwYjVlYjVmYTFkODJhZTMzNGU1OGZmMTFlN2MyOTczMzMyN2YyNWM0ZWIifSx7InBhdGgiOiJSRUJVSUxESU5HLm1kIiwiYnl0ZXMiOjM4NDIsInNoYTI1NiI6ImNlNjA1YjVmZGIwMzE5MzM5ZjlmODNmMmZlN2NjY2JjN2U1NzI2ZmRmNDk0ZGE2ZTI4NDMzYmVmODI5ZWIwYmUifSx7InBhdGgiOiJTT1VSQ0UtTk9USUNFUy50eHQiLCJieXRlcyI6OTAxNzc3MSwic2hhMjU2IjoiODk5NzZiZWNjMjU2NTQwZTZkMmU4MDdiNDdhNGUwNWU4ODk5ODJjMDYyMmZjMDQ0MTNhN2JmN2U3N2E3N2UzNyJ9LHsicGF0aCI6IlRISVJELVBBUlRZLU5PVElDRVMudHh0IiwiYnl0ZXMiOjI0OTE0OTYsInNoYTI1NiI6IjExNjQ0N2VmZjc3ODkzNTExNzk3ZWY0NzYwMTFkZWM4MDAyMjRmOTFlMzM0MmUzZDY1NzA3MDg3MTJiNGI3NzIifSx7InBhdGgiOiJsaWNlbnNlcy9ucG0tY21kLXNoaW0udHh0IiwiYnl0ZXMiOjgxMywic2hhMjU2IjoiYWZmZmRmMTIwODExMjI3NDljNGI3MWM1YjFjMTFiYzY1OWQ3OTI0MmQxOWUxOGY1ZThkYmFiMDRhNDVlMzZiYiJ9LHsicGF0aCI6Im5wbS1hZGFwdGVyLWZpbGVzLmpzb24iLCJieXRlcyI6MTUyNCwic2hhMjU2IjoiZjIyNmJiMjNiMjEyYWE4MjQ0NzdlYTY3ZGY0MjQ1ZjQxMjFkOWQ2MTdmYTA4NGVhYWQwZThjYjlhNTIxN2RlYSJ9XX0seyJ0YXJnZXQiOiJidW4tZGFyd2luLXg2NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS4xMy1kYXJ3aW4teDY0LnRhci5neiIsImJ5dGVzIjozMDAwNzg1Nywic2hhMjU2IjoiODRhNjVhYjUzZjhiZjU5YjNlNmU5N2NhOWZlNDVlNjRlNGE3MzIyZjllOGM3ZmI4YWJkYzc1MmQ5N2ZhZWRmZiIsInJ1bnRpbWVfc2hhMjU2IjoiNTFhMDViYTcwNTliYTJmNGI5NzUxYWZlNTNlNTM1NjgyODdmY2IwNTk4NmFlYzRmYzI3YTA5NTBhMWE0ZGQ0NiIsImxhdW5jaGVyX3NoYTI1NiI6IjRhZTkyNTU3MWIxNzFjYzBkNzExYTQzYTZhYzU5ZGI3NjFiNzBmNzRhNTgyZDVlMjQ3ZjFhOWU4Mjc0ZDk5OWQiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJmMjI2YmIyM2IyMTJhYTgyNDQ3N2VhNjdkZjQyNDVmNDEyMWQ5ZDYxN2ZhMDg0ZWFhZDBlOGNiOWE1MjE3ZGVhIn1dfSx7InRhcmdldCI6ImJ1bi1saW51eC1hcm02NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS4xMy1saW51eC1hcm02NC50YXIuZ3oiLCJieXRlcyI6MzkzMTcwNzIsInNoYTI1NiI6IjIzMWM2ZGQzNTI0MWZiNDRmZmUwNDgxYTU2NTEyNTgyODU2YmU1NGMwY2RmZWNiNWVmMTM2YTM2ZjEzMjE4NDAiLCJydW50aW1lX3NoYTI1NiI6IjcyNTAyOTY5MzIwMTA3YmQzZWVmMTJhMTY1MDU2NDI3MTUxOGJhNjI1ZmJiZjhiOWFjNTg5YzEzYzZlNTBhOGUiLCJsYXVuY2hlcl9zaGEyNTYiOiJjMTllMzMyYzgyMWI3MTI4Y2IyNWY2MWU0YWI3ZTBiM2M2MzM0NWYwNGUyYWI1YWI5NWQ0NTFhNGE2ZmJkYzQ1IiwibWF0ZXJpYWxzIjpbeyJwYXRoIjoiQlVOLUxJQ0VOU0UubWQiLCJieXRlcyI6NTYxMywic2hhMjU2IjoiYjljYWY1MjcyODY5MWI0MDU3ZTM3MTIzMmMyMjFhMTMyODgzMTk4YmUyZjNkMmRkZjkyYzkwNDA0Yzk4NGIxYSJ9LHsicGF0aCI6IkNPUlJFU1BPTkRJTkctU09VUkNFUy5qc29uIiwiYnl0ZXMiOjIwMjAsInNoYTI1NiI6ImZhNGMzNDQ4MDExNTQ4NzJkNjE3OWVlMmVmNDk5MjNkYzlmODkwOWVmMDFlNTNiODZlOGY1N2M2MjU4MjMyNzQifSx7InBhdGgiOiJMSUNFTlNFLnR4dCIsImJ5dGVzIjoxMTM0Niwic2hhMjU2IjoiOTQ0YzEzZmYwZmU3OTVlMjkxZmQxYzQ5NDczZjk4ZDRmZGYxZjc0NjM4ZTAxZjg4Mjc2OWNkNGNhZTc4YjczZCJ9LHsicGF0aCI6Ik5PVElDRS1QUk9WRU5BTkNFLmpzb24iLCJieXRlcyI6NDUwMjY0LCJzaGEyNTYiOiI1MzRkZDU5ZmQ0YzE1ZGQxMzgyZTgyN2YwYjg1YzE5ZjdjNjk4ZTIzNWY5Mjk5ZWFhMjAyZGI1NDAwODM0Mjg4In0seyJwYXRoIjoiTk9USUNFLnR4dCIsImJ5dGVzIjo2MjYsInNoYTI1NiI6IjFkZmJmNDQ5OGRjMDI2YjIwNTljMGIwYjVlYjVmYTFkODJhZTMzNGU1OGZmMTFlN2MyOTczMzMyN2YyNWM0ZWIifSx7InBhdGgiOiJSRUJVSUxESU5HLm1kIiwiYnl0ZXMiOjM4NDIsInNoYTI1NiI6ImNlNjA1YjVmZGIwMzE5MzM5ZjlmODNmMmZlN2NjY2JjN2U1NzI2ZmRmNDk0ZGE2ZTI4NDMzYmVmODI5ZWIwYmUifSx7InBhdGgiOiJTT1VSQ0UtTk9USUNFUy50eHQiLCJieXRlcyI6OTAxNzc3MSwic2hhMjU2IjoiODk5NzZiZWNjMjU2NTQwZTZkMmU4MDdiNDdhNGUwNWU4ODk5ODJjMDYyMmZjMDQ0MTNhN2JmN2U3N2E3N2UzNyJ9LHsicGF0aCI6IlRISVJELVBBUlRZLU5PVElDRVMudHh0IiwiYnl0ZXMiOjI0OTE0OTYsInNoYTI1NiI6IjExNjQ0N2VmZjc3ODkzNTExNzk3ZWY0NzYwMTFkZWM4MDAyMjRmOTFlMzM0MmUzZDY1NzA3MDg3MTJiNGI3NzIifSx7InBhdGgiOiJsaWNlbnNlcy9ucG0tY21kLXNoaW0udHh0IiwiYnl0ZXMiOjgxMywic2hhMjU2IjoiYWZmZmRmMTIwODExMjI3NDljNGI3MWM1YjFjMTFiYzY1OWQ3OTI0MmQxOWUxOGY1ZThkYmFiMDRhNDVlMzZiYiJ9LHsicGF0aCI6Im5wbS1hZGFwdGVyLWZpbGVzLmpzb24iLCJieXRlcyI6MTUyNCwic2hhMjU2IjoiZjIyNmJiMjNiMjEyYWE4MjQ0NzdlYTY3ZGY0MjQ1ZjQxMjFkOWQ2MTdmYTA4NGVhYWQwZThjYjlhNTIxN2RlYSJ9XX0seyJ0YXJnZXQiOiJidW4tbGludXgteDY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjEzLWxpbnV4LXg2NC50YXIuZ3oiLCJieXRlcyI6Mzg4ODAwNDIsInNoYTI1NiI6IjM4YzNkMjk3YmM3NDVlYjk1ZDg5OTY5ODE4ZGQ1ODc4MmE4ZTBjZjUxN2U0YWE4Njg4MmM4NjI5NjE2NzNlYzQiLCJydW50aW1lX3NoYTI1NiI6ImRjY2Q3NTNkODIyNTFiYmU3ZGIyMmUyNmQ2ZmU4YzFlYzllYjhjYTAyMTE1OGUwOGFhNjU4ODE3NWM3ZjgwYWYiLCJsYXVuY2hlcl9zaGEyNTYiOiJiZGY4ZDQ3ZGY4NTgxYWNlMjliNTc5MDQ1N2NiYzZjMjZkMTJiM2NiMTRjMGRkYWIzMzc5YTcyNzVkOWVhNGIxIiwibWF0ZXJpYWxzIjpbeyJwYXRoIjoiQlVOLUxJQ0VOU0UubWQiLCJieXRlcyI6NTYxMywic2hhMjU2IjoiYjljYWY1MjcyODY5MWI0MDU3ZTM3MTIzMmMyMjFhMTMyODgzMTk4YmUyZjNkMmRkZjkyYzkwNDA0Yzk4NGIxYSJ9LHsicGF0aCI6IkNPUlJFU1BPTkRJTkctU09VUkNFUy5qc29uIiwiYnl0ZXMiOjIwMjAsInNoYTI1NiI6ImZhNGMzNDQ4MDExNTQ4NzJkNjE3OWVlMmVmNDk5MjNkYzlmODkwOWVmMDFlNTNiODZlOGY1N2M2MjU4MjMyNzQifSx7InBhdGgiOiJMSUNFTlNFLnR4dCIsImJ5dGVzIjoxMTM0Niwic2hhMjU2IjoiOTQ0YzEzZmYwZmU3OTVlMjkxZmQxYzQ5NDczZjk4ZDRmZGYxZjc0NjM4ZTAxZjg4Mjc2OWNkNGNhZTc4YjczZCJ9LHsicGF0aCI6Ik5PVElDRS1QUk9WRU5BTkNFLmpzb24iLCJieXRlcyI6NDUwMjY0LCJzaGEyNTYiOiI1MzRkZDU5ZmQ0YzE1ZGQxMzgyZTgyN2YwYjg1YzE5ZjdjNjk4ZTIzNWY5Mjk5ZWFhMjAyZGI1NDAwODM0Mjg4In0seyJwYXRoIjoiTk9USUNFLnR4dCIsImJ5dGVzIjo2MjYsInNoYTI1NiI6IjFkZmJmNDQ5OGRjMDI2YjIwNTljMGIwYjVlYjVmYTFkODJhZTMzNGU1OGZmMTFlN2MyOTczMzMyN2YyNWM0ZWIifSx7InBhdGgiOiJSRUJVSUxESU5HLm1kIiwiYnl0ZXMiOjM4NDIsInNoYTI1NiI6ImNlNjA1YjVmZGIwMzE5MzM5ZjlmODNmMmZlN2NjY2JjN2U1NzI2ZmRmNDk0ZGE2ZTI4NDMzYmVmODI5ZWIwYmUifSx7InBhdGgiOiJTT1VSQ0UtTk9USUNFUy50eHQiLCJieXRlcyI6OTAxNzc3MSwic2hhMjU2IjoiODk5NzZiZWNjMjU2NTQwZTZkMmU4MDdiNDdhNGUwNWU4ODk5ODJjMDYyMmZjMDQ0MTNhN2JmN2U3N2E3N2UzNyJ9LHsicGF0aCI6IlRISVJELVBBUlRZLU5PVElDRVMudHh0IiwiYnl0ZXMiOjI0OTE0OTYsInNoYTI1NiI6IjExNjQ0N2VmZjc3ODkzNTExNzk3ZWY0NzYwMTFkZWM4MDAyMjRmOTFlMzM0MmUzZDY1NzA3MDg3MTJiNGI3NzIifSx7InBhdGgiOiJsaWNlbnNlcy9ucG0tY21kLXNoaW0udHh0IiwiYnl0ZXMiOjgxMywic2hhMjU2IjoiYWZmZmRmMTIwODExMjI3NDljNGI3MWM1YjFjMTFiYzY1OWQ3OTI0MmQxOWUxOGY1ZThkYmFiMDRhNDVlMzZiYiJ9LHsicGF0aCI6Im5wbS1hZGFwdGVyLWZpbGVzLmpzb24iLCJieXRlcyI6MTUyNCwic2hhMjU2IjoiZjIyNmJiMjNiMjEyYWE4MjQ0NzdlYTY3ZGY0MjQ1ZjQxMjFkOWQ2MTdmYTA4NGVhYWQwZThjYjlhNTIxN2RlYSJ9XX0seyJ0YXJnZXQiOiJidW4td2luZG93cy1hcm02NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS4xMy13aW5kb3dzLWFybTY0LnppcCIsImJ5dGVzIjozODcxMTczNiwic2hhMjU2IjoiMGZiMTU0OTY1NmRlMTFlMjQ3ODUzZGNiZGFhODVkMWYxYTc2ZDI1YWFmMDMzODZkOGFlZWZlMGRjY2Y5ZTk3MCIsInJ1bnRpbWVfc2hhMjU2IjoiZjZjMmEyOWNmMmZhMGUyMzYyYjhiMGU5NTk3ZmM5ZTRlMTFkMmQzMjkxZjEyYzBlMGZjNGE5YzQyYjEwOWM1MCIsImxhdW5jaGVyX3NoYTI1NiI6IjVkMjQ0MTViZjc0NWY1MzhjZmNhMGYxY2NlYzcxNTFjYjdkMGQ0ODgwMGY3NTE5ZTczYzhhNzIzMzE2OTFlNmQiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJmMjI2YmIyM2IyMTJhYTgyNDQ3N2VhNjdkZjQyNDVmNDEyMWQ5ZDYxN2ZhMDg0ZWFhZDBlOGNiOWE1MjE3ZGVhIn1dfSx7InRhcmdldCI6ImJ1bi13aW5kb3dzLXg2NCIsImZpbGVuYW1lIjoibm90aWZhaS0xMi4wLjAtYmV0YS4xMy13aW5kb3dzLXg2NC56aXAiLCJieXRlcyI6NDE4NTc1MjIsInNoYTI1NiI6IjlhNWY1ZDk2NmIxMGI1YTFkMzUyOTc1Y2FmOWMyZmJhNDE4NGFkMGQ2NTQ3ODg5MzJjNjUwMTAzMWVmNTBlNWYiLCJydW50aW1lX3NoYTI1NiI6IjUxNTBlYzBjYzUzZjk5ODBhYmUwZDg0ZjkxN2Y3YjM1MTFiMDc4YTJhZWIwZjk1OWU3ZjkyMjMzN2MxNGE0YmIiLCJsYXVuY2hlcl9zaGEyNTYiOiI1MDkwYTliYjZlZDRjN2NlMWRmMDBlNDEzMmVhYWI4YmQ4NDhlYWEwNzIyZWY1ZGU3YjdhOTA5MTgxYWJhNzI4IiwibWF0ZXJpYWxzIjpbeyJwYXRoIjoiQlVOLUxJQ0VOU0UubWQiLCJieXRlcyI6NTYxMywic2hhMjU2IjoiYjljYWY1MjcyODY5MWI0MDU3ZTM3MTIzMmMyMjFhMTMyODgzMTk4YmUyZjNkMmRkZjkyYzkwNDA0Yzk4NGIxYSJ9LHsicGF0aCI6IkNPUlJFU1BPTkRJTkctU09VUkNFUy5qc29uIiwiYnl0ZXMiOjIwMjAsInNoYTI1NiI6ImZhNGMzNDQ4MDExNTQ4NzJkNjE3OWVlMmVmNDk5MjNkYzlmODkwOWVmMDFlNTNiODZlOGY1N2M2MjU4MjMyNzQifSx7InBhdGgiOiJMSUNFTlNFLnR4dCIsImJ5dGVzIjoxMTM0Niwic2hhMjU2IjoiOTQ0YzEzZmYwZmU3OTVlMjkxZmQxYzQ5NDczZjk4ZDRmZGYxZjc0NjM4ZTAxZjg4Mjc2OWNkNGNhZTc4YjczZCJ9LHsicGF0aCI6Ik5PVElDRS1QUk9WRU5BTkNFLmpzb24iLCJieXRlcyI6NDUwMjY0LCJzaGEyNTYiOiI1MzRkZDU5ZmQ0YzE1ZGQxMzgyZTgyN2YwYjg1YzE5ZjdjNjk4ZTIzNWY5Mjk5ZWFhMjAyZGI1NDAwODM0Mjg4In0seyJwYXRoIjoiTk9USUNFLnR4dCIsImJ5dGVzIjo2MjYsInNoYTI1NiI6IjFkZmJmNDQ5OGRjMDI2YjIwNTljMGIwYjVlYjVmYTFkODJhZTMzNGU1OGZmMTFlN2MyOTczMzMyN2YyNWM0ZWIifSx7InBhdGgiOiJSRUJVSUxESU5HLm1kIiwiYnl0ZXMiOjM4NDIsInNoYTI1NiI6ImNlNjA1YjVmZGIwMzE5MzM5ZjlmODNmMmZlN2NjY2JjN2U1NzI2ZmRmNDk0ZGE2ZTI4NDMzYmVmODI5ZWIwYmUifSx7InBhdGgiOiJTT1VSQ0UtTk9USUNFUy50eHQiLCJieXRlcyI6OTAxNzc3MSwic2hhMjU2IjoiODk5NzZiZWNjMjU2NTQwZTZkMmU4MDdiNDdhNGUwNWU4ODk5ODJjMDYyMmZjMDQ0MTNhN2JmN2U3N2E3N2UzNyJ9LHsicGF0aCI6IlRISVJELVBBUlRZLU5PVElDRVMudHh0IiwiYnl0ZXMiOjI0OTE0OTYsInNoYTI1NiI6IjExNjQ0N2VmZjc3ODkzNTExNzk3ZWY0NzYwMTFkZWM4MDAyMjRmOTFlMzM0MmUzZDY1NzA3MDg3MTJiNGI3NzIifSx7InBhdGgiOiJsaWNlbnNlcy9ucG0tY21kLXNoaW0udHh0IiwiYnl0ZXMiOjgxMywic2hhMjU2IjoiYWZmZmRmMTIwODExMjI3NDljNGI3MWM1YjFjMTFiYzY1OWQ3OTI0MmQxOWUxOGY1ZThkYmFiMDRhNDVlMzZiYiJ9LHsicGF0aCI6Im5wbS1hZGFwdGVyLWZpbGVzLmpzb24iLCJieXRlcyI6MTUyNCwic2hhMjU2IjoiZjIyNmJiMjNiMjEyYWE4MjQ0NzdlYTY3ZGY0MjQ1ZjQxMjFkOWQ2MTdmYTA4NGVhYWQwZThjYjlhNTIxN2RlYSJ9XX1dfQ==","signature":"P86ZWqty8zl111akeDRKvJEd2/D0ew2lIyGQRcc/myvJWBh+wVMC5GnV4+2613/GZJx7XQPpol/r0HPFSHPpAw=="}
|
|
1
|
+
{"key_id":"notifai-release-2026-10","payload":"eyJzY2hlbWEiOjIsInZlcnNpb24iOiIxMi4wLjAtYmV0YS4xNiIsInNvdXJjZV9yZXZpc2lvbiI6IjJhZjY2OGRmM2EwMGFmOTk0MDM5ZWExYjRhZDAzZThhOGVkNDlkMmEiLCJsb2NhbF9jb250aW51aXR5Ijp7ImNvbnRyYWN0Ijoibm90aWZhaS1zZXNzaW9uLXN0YXRlLXYxIn0sInN0b3JlX3NjaGVtYSI6MiwibGF1bmNoZXJfc2NoZW1hIjoxLCJhcnRpZmFjdHMiOlt7InRhcmdldCI6ImJ1bi1kYXJ3aW4tYXJtNjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuMTYtZGFyd2luLWFybTY0LnRhci5neiIsImJ5dGVzIjoyNzgyMDgzMywic2hhMjU2IjoiZWRhYmRmZDUwNzc3YjFkNGJjMzNlODIxZGEyZTNjM2FiMjUyZGQ5MWFlNWZkMzM1ZGYzN2E2MTlkOTdhNjU1NCIsInJ1bnRpbWVfc2hhMjU2IjoiZGI0OWI3MDA5OGM2YThmZjc1ZjRmYjU0NTcwNGY4NWI1ZGFkZWY2NTg4MTdiNTkxMjlmMWQxZTBjMDQwYWMwNyIsImxhdW5jaGVyX3NoYTI1NiI6IjRkYmU0YjY4ZjNhNDA0ZTYwZTY5MjEyOWQ0NmVlOGVmMDdiNGEzOWM1ZmQyNWY0YjE5NmZhOTM5N2ZmMDMwMmEiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJjNjRkNmFjYzk4YmNkZWUyMmJlM2QzMjY0ZmZiNjdlYzFmZjM0NmJkZWFlODE5ZGZiNGQzM2I3YTRlNjczZTliIn1dfSx7InRhcmdldCI6ImJ1bi1kYXJ3aW4teDY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjE2LWRhcndpbi14NjQudGFyLmd6IiwiYnl0ZXMiOjMwMDU4OTYyLCJzaGEyNTYiOiI5ZjhjOTBjNDI5MTJiNmU5ZDRiMTJmNjM5NGVhOWIwMTIxYzdjM2JiYWM4NGQxNjJhYWEwZTc2NzU2YTg0MDI1IiwicnVudGltZV9zaGEyNTYiOiIyNzQ2MjBlYjQ4YmJiYjE0Nzc5MmY3ODllMTNkZTIxYjFjMjc3ZTdlODc5YmQyZTZiMTU5NWE4ZWMyNjBmMzhhIiwibGF1bmNoZXJfc2hhMjU2IjoiYzRkMTExNTRhNDMzNGI1ZmYzMGNlZmQ5YTk2NTBkZTJhNjdiOTA5ZmVlOThiNTc0NmM0MzdhOWRiYzI1ZWRiNiIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjQsInNoYTI1NiI6ImM2NGQ2YWNjOThiY2RlZTIyYmUzZDMyNjRmZmI2N2VjMWZmMzQ2YmRlYWU4MTlkZmI0ZDMzYjdhNGU2NzNlOWIifV19LHsidGFyZ2V0IjoiYnVuLWxpbnV4LWFybTY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjE2LWxpbnV4LWFybTY0LnRhci5neiIsImJ5dGVzIjozOTM2NjczMCwic2hhMjU2IjoiNmVmZmQxNTdjODJiYTNjYjM1OGZhZWExYWQzMTYxMDg5ZDNmZDYzM2U2Yzk5OTZmNjc0ZDU3OTI0N2YyMGJhNSIsInJ1bnRpbWVfc2hhMjU2IjoiZTIyOTQxOTA1ZTM2ODBlNjlhNWZmNTRmYzE2Y2ZhZjBmMTEzODQ5YjZlOTIxNThjMmQ0NjM5MjQ0NzdkYjljMiIsImxhdW5jaGVyX3NoYTI1NiI6ImY4MGZkYmYzM2ZiYWEzOTAzYzU0NTI2ZjE5NTZjNjE5ZjJmNDcwMWY5ODcxOTBjNWJhMmI0ZDU3NGI0MzEwYTQiLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJjNjRkNmFjYzk4YmNkZWUyMmJlM2QzMjY0ZmZiNjdlYzFmZjM0NmJkZWFlODE5ZGZiNGQzM2I3YTRlNjczZTliIn1dfSx7InRhcmdldCI6ImJ1bi1saW51eC14NjQiLCJmaWxlbmFtZSI6Im5vdGlmYWktMTIuMC4wLWJldGEuMTYtbGludXgteDY0LnRhci5neiIsImJ5dGVzIjozODkyOTgzOCwic2hhMjU2IjoiOWJmNjNjOGU4ODYxOTg0ZGEwMGU2NGE5ZjA1NzA1ZDQ2NzdkYzYzNzEwZTZhMDZkZDFiM2IzYTc2NTc5YTBiYyIsInJ1bnRpbWVfc2hhMjU2IjoiZjU5NGEyYmMxNmNiYWEzYWEwOTQxYjkyOTk3ODQ2YWIxNTk4NDI0YWJmYWU5NTA1YWRkYTkzNzg5NDM3ZjllNSIsImxhdW5jaGVyX3NoYTI1NiI6IjhiMWYwOTNlNDRjNmZkMzk4NDFlMzliZGU5N2IyNzE1MDQ4ZDM5NjNiNzA0ZjYyZjJhYmViNTkwMmM3ZmJiZTciLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJjNjRkNmFjYzk4YmNkZWUyMmJlM2QzMjY0ZmZiNjdlYzFmZjM0NmJkZWFlODE5ZGZiNGQzM2I3YTRlNjczZTliIn1dfSx7InRhcmdldCI6ImJ1bi13aW5kb3dzLWFybTY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjE2LXdpbmRvd3MtYXJtNjQuemlwIiwiYnl0ZXMiOjM4NzYzNTM0LCJzaGEyNTYiOiJmNDA2YTczNWE3NmVlMjc2N2I3ZjM4ZWY1NjgzNzIxMTNmMzVlN2M5MWYxNWRhZDAzOTY5NjIzOGI0NWM5NzljIiwicnVudGltZV9zaGEyNTYiOiJhNzIzYmM2ZDkzMjNlM2FkNDIyMWJlYTcwYWQ4MjEyZmVlOTE5YzRhZmFlMTBjNzhhNDdlNDkyNDk3YmNlNjZkIiwibGF1bmNoZXJfc2hhMjU2IjoiMWU5NmU1MjlhMjNiMGZhOGMzNDYwNmQ0MjIzMzViYjE1NjhjNzU1NWNiMTBjN2Q1MmRmOGZlYjM5YzZmODgxYiIsIm1hdGVyaWFscyI6W3sicGF0aCI6IkJVTi1MSUNFTlNFLm1kIiwiYnl0ZXMiOjU2MTMsInNoYTI1NiI6ImI5Y2FmNTI3Mjg2OTFiNDA1N2UzNzEyMzJjMjIxYTEzMjg4MzE5OGJlMmYzZDJkZGY5MmM5MDQwNGM5ODRiMWEifSx7InBhdGgiOiJDT1JSRVNQT05ESU5HLVNPVVJDRVMuanNvbiIsImJ5dGVzIjoyMDIwLCJzaGEyNTYiOiJmYTRjMzQ0ODAxMTU0ODcyZDYxNzllZTJlZjQ5OTIzZGM5Zjg5MDllZjAxZTUzYjg2ZThmNTdjNjI1ODIzMjc0In0seyJwYXRoIjoiTElDRU5TRS50eHQiLCJieXRlcyI6MTEzNDYsInNoYTI1NiI6Ijk0NGMxM2ZmMGZlNzk1ZTI5MWZkMWM0OTQ3M2Y5OGQ0ZmRmMWY3NDYzOGUwMWY4ODI3NjljZDRjYWU3OGI3M2QifSx7InBhdGgiOiJOT1RJQ0UtUFJPVkVOQU5DRS5qc29uIiwiYnl0ZXMiOjQ1MDI2NCwic2hhMjU2IjoiNTM0ZGQ1OWZkNGMxNWRkMTM4MmU4MjdmMGI4NWMxOWY3YzY5OGUyMzVmOTI5OWVhYTIwMmRiNTQwMDgzNDI4OCJ9LHsicGF0aCI6Ik5PVElDRS50eHQiLCJieXRlcyI6NjI2LCJzaGEyNTYiOiIxZGZiZjQ0OThkYzAyNmIyMDU5YzBiMGI1ZWI1ZmExZDgyYWUzMzRlNThmZjExZTdjMjk3MzMzMjdmMjVjNGViIn0seyJwYXRoIjoiUkVCVUlMRElORy5tZCIsImJ5dGVzIjozODQyLCJzaGEyNTYiOiJjZTYwNWI1ZmRiMDMxOTMzOWY5ZjgzZjJmZTdjY2NiYzdlNTcyNmZkZjQ5NGRhNmUyODQzM2JlZjgyOWViMGJlIn0seyJwYXRoIjoiU09VUkNFLU5PVElDRVMudHh0IiwiYnl0ZXMiOjkwMTc3NzEsInNoYTI1NiI6Ijg5OTc2YmVjYzI1NjU0MGU2ZDJlODA3YjQ3YTRlMDVlODg5OTgyYzA2MjJmYzA0NDEzYTdiZjdlNzdhNzdlMzcifSx7InBhdGgiOiJUSElSRC1QQVJUWS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjoyNDkxNDk2LCJzaGEyNTYiOiIxMTY0NDdlZmY3Nzg5MzUxMTc5N2VmNDc2MDExZGVjODAwMjI0ZjkxZTMzNDJlM2Q2NTcwNzA4NzEyYjRiNzcyIn0seyJwYXRoIjoibGljZW5zZXMvbnBtLWNtZC1zaGltLnR4dCIsImJ5dGVzIjo4MTMsInNoYTI1NiI6ImFmZmZkZjEyMDgxMTIyNzQ5YzRiNzFjNWIxYzExYmM2NTlkNzkyNDJkMTllMThmNWU4ZGJhYjA0YTQ1ZTM2YmIifSx7InBhdGgiOiJucG0tYWRhcHRlci1maWxlcy5qc29uIiwiYnl0ZXMiOjE1MjQsInNoYTI1NiI6ImM2NGQ2YWNjOThiY2RlZTIyYmUzZDMyNjRmZmI2N2VjMWZmMzQ2YmRlYWU4MTlkZmI0ZDMzYjdhNGU2NzNlOWIifV19LHsidGFyZ2V0IjoiYnVuLXdpbmRvd3MteDY0IiwiZmlsZW5hbWUiOiJub3RpZmFpLTEyLjAuMC1iZXRhLjE2LXdpbmRvd3MteDY0LnppcCIsImJ5dGVzIjo0MTkwOTk3NCwic2hhMjU2IjoiNWNiYzI2MzMxMzgxNzcwODU0ZDI2YzdhNmIwODMxYjRkZWI1MmQ5ZWE5ZTVjMmYxNDYwOGYwMmEzNDJkNjZhZSIsInJ1bnRpbWVfc2hhMjU2IjoiYjQzNTNjNGQ5ZGI1ZmNhM2I1ODY3YWIzN2M2NjAzM2NlZmM3ODVmZDZmNGIwOTg3ZjFlNjI4M2U4N2ZlYzhhZiIsImxhdW5jaGVyX3NoYTI1NiI6ImEwZTcyZGQ3NTQyMGRlMTUyNjIyZjA4NmZmNTAyM2FlZTQwOWE4MDNiNTM1NTIzNTVhNTMxODAzYWU5MjVkYTciLCJtYXRlcmlhbHMiOlt7InBhdGgiOiJCVU4tTElDRU5TRS5tZCIsImJ5dGVzIjo1NjEzLCJzaGEyNTYiOiJiOWNhZjUyNzI4NjkxYjQwNTdlMzcxMjMyYzIyMWExMzI4ODMxOThiZTJmM2QyZGRmOTJjOTA0MDRjOTg0YjFhIn0seyJwYXRoIjoiQ09SUkVTUE9ORElORy1TT1VSQ0VTLmpzb24iLCJieXRlcyI6MjAyMCwic2hhMjU2IjoiZmE0YzM0NDgwMTE1NDg3MmQ2MTc5ZWUyZWY0OTkyM2RjOWY4OTA5ZWYwMWU1M2I4NmU4ZjU3YzYyNTgyMzI3NCJ9LHsicGF0aCI6IkxJQ0VOU0UudHh0IiwiYnl0ZXMiOjExMzQ2LCJzaGEyNTYiOiI5NDRjMTNmZjBmZTc5NWUyOTFmZDFjNDk0NzNmOThkNGZkZjFmNzQ2MzhlMDFmODgyNzY5Y2Q0Y2FlNzhiNzNkIn0seyJwYXRoIjoiTk9USUNFLVBST1ZFTkFOQ0UuanNvbiIsImJ5dGVzIjo0NTAyNjQsInNoYTI1NiI6IjUzNGRkNTlmZDRjMTVkZDEzODJlODI3ZjBiODVjMTlmN2M2OThlMjM1ZjkyOTllYWEyMDJkYjU0MDA4MzQyODgifSx7InBhdGgiOiJOT1RJQ0UudHh0IiwiYnl0ZXMiOjYyNiwic2hhMjU2IjoiMWRmYmY0NDk4ZGMwMjZiMjA1OWMwYjBiNWViNWZhMWQ4MmFlMzM0ZTU4ZmYxMWU3YzI5NzMzMzI3ZjI1YzRlYiJ9LHsicGF0aCI6IlJFQlVJTERJTkcubWQiLCJieXRlcyI6Mzg0Miwic2hhMjU2IjoiY2U2MDViNWZkYjAzMTkzMzlmOWY4M2YyZmU3Y2NjYmM3ZTU3MjZmZGY0OTRkYTZlMjg0MzNiZWY4MjllYjBiZSJ9LHsicGF0aCI6IlNPVVJDRS1OT1RJQ0VTLnR4dCIsImJ5dGVzIjo5MDE3NzcxLCJzaGEyNTYiOiI4OTk3NmJlY2MyNTY1NDBlNmQyZTgwN2I0N2E0ZTA1ZTg4OTk4MmMwNjIyZmMwNDQxM2E3YmY3ZTc3YTc3ZTM3In0seyJwYXRoIjoiVEhJUkQtUEFSVFktTk9USUNFUy50eHQiLCJieXRlcyI6MjQ5MTQ5Niwic2hhMjU2IjoiMTE2NDQ3ZWZmNzc4OTM1MTE3OTdlZjQ3NjAxMWRlYzgwMDIyNGY5MWUzMzQyZTNkNjU3MDcwODcxMmI0Yjc3MiJ9LHsicGF0aCI6ImxpY2Vuc2VzL25wbS1jbWQtc2hpbS50eHQiLCJieXRlcyI6ODEzLCJzaGEyNTYiOiJhZmZmZGYxMjA4MTEyMjc0OWM0YjcxYzViMWMxMWJjNjU5ZDc5MjQyZDE5ZTE4ZjVlOGRiYWIwNGE0NWUzNmJiIn0seyJwYXRoIjoibnBtLWFkYXB0ZXItZmlsZXMuanNvbiIsImJ5dGVzIjoxNTI0LCJzaGEyNTYiOiJjNjRkNmFjYzk4YmNkZWUyMmJlM2QzMjY0ZmZiNjdlYzFmZjM0NmJkZWFlODE5ZGZiNGQzM2I3YTRlNjczZTliIn1dfV19","signature":"IMOjqKajnZKMKzvEg2RnyiBi4UYF6694PJgoLxJXfUz8d/1WFe8YbYfUnu8/rm1Nlk3+S8eRDq78nZJWlrsvAw=="}
|
package/npm-adapter-files.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"package": "@raidiant/notifai",
|
|
4
|
-
"adapter_version": "12.0.0-beta.
|
|
4
|
+
"adapter_version": "12.0.0-beta.16",
|
|
5
5
|
"native": {
|
|
6
|
-
"version": "12.0.0-beta.
|
|
7
|
-
"source_revision": "
|
|
8
|
-
"inventory_url": "https://github.com/Raidiant-io/notifai/releases/download/v12.0.0-beta.
|
|
6
|
+
"version": "12.0.0-beta.16",
|
|
7
|
+
"source_revision": "2af668df3a00af994039ea1b4ad03e8a8ed49d2a",
|
|
8
|
+
"inventory_url": "https://github.com/Raidiant-io/notifai/releases/download/v12.0.0-beta.16/inventory.json"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
{
|
|
12
12
|
"path": "CHANGELOG.md",
|
|
13
|
-
"bytes":
|
|
14
|
-
"sha256": "
|
|
13
|
+
"bytes": 62828,
|
|
14
|
+
"sha256": "094f3eac2b0f29bf39008a2513d43b1443693f078942476af2131aa225b6c223"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"path": "LICENSE",
|
|
@@ -30,23 +30,23 @@
|
|
|
30
30
|
},
|
|
31
31
|
{
|
|
32
32
|
"path": "bin/notifai.mjs",
|
|
33
|
-
"bytes":
|
|
34
|
-
"sha256": "
|
|
33
|
+
"bytes": 521585,
|
|
34
|
+
"sha256": "c0a5ea720e2339716ee0ef808237b8389ab897310b26280771d3e8bc3c9ebace"
|
|
35
35
|
},
|
|
36
36
|
{
|
|
37
37
|
"path": "data/install.ps1",
|
|
38
|
-
"bytes":
|
|
39
|
-
"sha256": "
|
|
38
|
+
"bytes": 26228,
|
|
39
|
+
"sha256": "e111259532c11e1e822356d34b0b30059db17b59e6b69ce3af74e491ee3cbc5a"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"path": "data/release.json",
|
|
43
43
|
"bytes": 90,
|
|
44
|
-
"sha256": "
|
|
44
|
+
"sha256": "6ef1d9da9d4ee1d5a2c9ec5b6337c6718d461340145cf2cfe5ec2338febf5ed7"
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"path": "package.json",
|
|
48
48
|
"bytes": 815,
|
|
49
|
-
"sha256": "
|
|
49
|
+
"sha256": "ffd8da369a6f4485aa189c666d1f14b043d7a8a10cf94bf1438c097ba567670f"
|
|
50
50
|
}
|
|
51
51
|
]
|
|
52
52
|
}
|