@innspel/core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -353,11 +353,17 @@ interface InnspelOptions {
353
353
  /** Tidsavbrudd per kall i millisekunder. Standard 10 000 (wireframe 2i). */
354
354
  timeoutMs?: number;
355
355
  }
356
- /** Leietakerens innstillinger slik klienten kjenner dem. */
356
+ /**
357
+ * Leietakerens innstillinger slik klienten kjenner dem. Starter som opsjonene fra
358
+ * `init()` (strammest mulig uten dem), og oppdateres av `loadSettings()` fra
359
+ * `GET /v1/ingest/config` (M2.5) — samme objekt, så en holdt referanse følger med.
360
+ */
357
361
  interface ResolvedSettings {
358
362
  textMaxLength: TextMaxLength;
359
363
  minTextLength: number;
360
364
  screenshotsEnabled: boolean;
365
+ /** Leietakerens personvernerklæring — «hva samles inn». Finnes først etter `loadSettings()`. */
366
+ privacyUrl?: string;
361
367
  }
362
368
  /**
363
369
  * Bildet slik verten gir det fra seg — Blob (React Native og nettleser),
@@ -400,7 +406,11 @@ interface CaptureBase {
400
406
  * og kan feile alene (DD-42) — se `CaptureResult.attachment`.
401
407
  */
402
408
  attachment?: AttachmentInput;
403
- /** Legges på konteksten fra `init` — typisk `screen`. */
409
+ /**
410
+ * Legges på konteksten fra `init` — typisk `screen`. Et felt satt til
411
+ * `undefined` FJERNES fra innsendingen (DD-05, «Fjern» i kontekstlinja); et
412
+ * felt som ikke nevnes, beholdes fra `init`.
413
+ */
404
414
  context?: Partial<ContextInput>;
405
415
  /**
406
416
  * Idempotensnøkkel for offline-køen. Settes av kjernen hvis den utelates:
@@ -496,12 +506,20 @@ interface InnspelClient {
496
506
  readonly version: string;
497
507
  /** `true` når `identityProvider` er `null` — innsendinger kan ikke følges opp. */
498
508
  readonly isAnonymous: boolean;
499
- /** Leietakerens grenser slik klienten kjenner dem. */
509
+ /** Leietakerens grenser slik klienten kjenner dem. Oppdateres på plass av {@link loadSettings}. */
500
510
  readonly settings: ResolvedSettings;
501
511
  /** Konteksten som følger hver innsending, med `sdkVersion` satt av kjernen. */
502
512
  readonly context: ContextInput & {
503
513
  sdkVersion: string;
504
514
  };
515
+ /**
516
+ * Henter leietakerens klientkonfigurasjon (`GET /v1/ingest/config`, M2.5): tegngrense,
517
+ * minste antall tegn, skjermbilde og personvernlenke — det verten ellers måtte
518
+ * duplisere i `init()`. Kalles av widgeten ved åpning, aldri ved oppstart (DD-41).
519
+ * Svarer ikke kallet, beholdes det klienten alt har: konfigurasjonen er et tilbud,
520
+ * aldri en sperre. Returnerer `settings` — samme objekt, oppdatert.
521
+ */
522
+ loadSettings(): Promise<ResolvedSettings>;
505
523
  capture(input: CaptureInput): Promise<CaptureResult>;
506
524
  readonly knownIssues: {
507
525
  /** Kortene som vises FØR feltet i feilsporet (DD-03). Feiler oppslaget, er lista tom. */
@@ -724,6 +742,6 @@ declare function dekkerAlt(rekter: readonly MaskRect[], bilde: {
724
742
  * ikke kan lese JSON, og `test/versjon.test.ts` holder den i takt med
725
743
  * `package.json`.
726
744
  */
727
- declare const VERSJON = "0.2.0";
745
+ declare const VERSJON = "0.3.0";
728
746
 
729
747
  export { type AttachmentBody, type AttachmentInput, type SubmissionsAttachmentMime as AttachmentMime, type AttachmentOutcome, type SubmissionsAttachmentView as AttachmentView, type CaptureFeil, type CaptureInput, type CaptureOnske, type CaptureResult, type ContextInput, type CommonCorrelation as Correlation, type CommonErrorCode as ErrorCode, type FlushResult, type IdentityProvider, InnspelApiError, type InnspelClient, InnspelConfigError, type InnspelOptions, InnspelQueueFullError, type InnspelStorage, KONTEKST_FELTER, KO_TAK, type KnownIssuesKnownIssueCard as KnownIssueCard, type KnownIssueQuery, type SubmissionsKnownIssueRef as KnownIssueRef, type KnownIssuesKnownIssueStatus as KnownIssueStatus, type MaskPoint, type MaskRect, type ProgramsMyPrograms as MyPrograms, type MySubmission, type OpenFeedbackOptions, type PatternFinding, type PatternKind, type CommonPlatform as Platform, type Presenter, type QueuedSubmission, type SubmissionsReasonCode as ReasonCode, type SubmissionsReplyView as ReplyView, type ResolvedSettings, type SubmissionsStatusType as StatusType, type SubmissionsSubmissionStatus as SubmissionStatus, type SubmissionsSubmissionStatusView as SubmissionStatusView, type SubmissionsSubmissionType as SubmissionType, TILLATTE_MIME, type Telemetry, type TelemetryEvent, type TextMaxLength, VEDLEGG_GRENSER, VERSJON, dekkerAlt, init, klipp, scanText, skaler, strokTilRekter, treffer, trykkTilRekt };
package/dist/index.d.ts CHANGED
@@ -353,11 +353,17 @@ interface InnspelOptions {
353
353
  /** Tidsavbrudd per kall i millisekunder. Standard 10 000 (wireframe 2i). */
354
354
  timeoutMs?: number;
355
355
  }
356
- /** Leietakerens innstillinger slik klienten kjenner dem. */
356
+ /**
357
+ * Leietakerens innstillinger slik klienten kjenner dem. Starter som opsjonene fra
358
+ * `init()` (strammest mulig uten dem), og oppdateres av `loadSettings()` fra
359
+ * `GET /v1/ingest/config` (M2.5) — samme objekt, så en holdt referanse følger med.
360
+ */
357
361
  interface ResolvedSettings {
358
362
  textMaxLength: TextMaxLength;
359
363
  minTextLength: number;
360
364
  screenshotsEnabled: boolean;
365
+ /** Leietakerens personvernerklæring — «hva samles inn». Finnes først etter `loadSettings()`. */
366
+ privacyUrl?: string;
361
367
  }
362
368
  /**
363
369
  * Bildet slik verten gir det fra seg — Blob (React Native og nettleser),
@@ -400,7 +406,11 @@ interface CaptureBase {
400
406
  * og kan feile alene (DD-42) — se `CaptureResult.attachment`.
401
407
  */
402
408
  attachment?: AttachmentInput;
403
- /** Legges på konteksten fra `init` — typisk `screen`. */
409
+ /**
410
+ * Legges på konteksten fra `init` — typisk `screen`. Et felt satt til
411
+ * `undefined` FJERNES fra innsendingen (DD-05, «Fjern» i kontekstlinja); et
412
+ * felt som ikke nevnes, beholdes fra `init`.
413
+ */
404
414
  context?: Partial<ContextInput>;
405
415
  /**
406
416
  * Idempotensnøkkel for offline-køen. Settes av kjernen hvis den utelates:
@@ -496,12 +506,20 @@ interface InnspelClient {
496
506
  readonly version: string;
497
507
  /** `true` når `identityProvider` er `null` — innsendinger kan ikke følges opp. */
498
508
  readonly isAnonymous: boolean;
499
- /** Leietakerens grenser slik klienten kjenner dem. */
509
+ /** Leietakerens grenser slik klienten kjenner dem. Oppdateres på plass av {@link loadSettings}. */
500
510
  readonly settings: ResolvedSettings;
501
511
  /** Konteksten som følger hver innsending, med `sdkVersion` satt av kjernen. */
502
512
  readonly context: ContextInput & {
503
513
  sdkVersion: string;
504
514
  };
515
+ /**
516
+ * Henter leietakerens klientkonfigurasjon (`GET /v1/ingest/config`, M2.5): tegngrense,
517
+ * minste antall tegn, skjermbilde og personvernlenke — det verten ellers måtte
518
+ * duplisere i `init()`. Kalles av widgeten ved åpning, aldri ved oppstart (DD-41).
519
+ * Svarer ikke kallet, beholdes det klienten alt har: konfigurasjonen er et tilbud,
520
+ * aldri en sperre. Returnerer `settings` — samme objekt, oppdatert.
521
+ */
522
+ loadSettings(): Promise<ResolvedSettings>;
505
523
  capture(input: CaptureInput): Promise<CaptureResult>;
506
524
  readonly knownIssues: {
507
525
  /** Kortene som vises FØR feltet i feilsporet (DD-03). Feiler oppslaget, er lista tom. */
@@ -724,6 +742,6 @@ declare function dekkerAlt(rekter: readonly MaskRect[], bilde: {
724
742
  * ikke kan lese JSON, og `test/versjon.test.ts` holder den i takt med
725
743
  * `package.json`.
726
744
  */
727
- declare const VERSJON = "0.2.0";
745
+ declare const VERSJON = "0.3.0";
728
746
 
729
747
  export { type AttachmentBody, type AttachmentInput, type SubmissionsAttachmentMime as AttachmentMime, type AttachmentOutcome, type SubmissionsAttachmentView as AttachmentView, type CaptureFeil, type CaptureInput, type CaptureOnske, type CaptureResult, type ContextInput, type CommonCorrelation as Correlation, type CommonErrorCode as ErrorCode, type FlushResult, type IdentityProvider, InnspelApiError, type InnspelClient, InnspelConfigError, type InnspelOptions, InnspelQueueFullError, type InnspelStorage, KONTEKST_FELTER, KO_TAK, type KnownIssuesKnownIssueCard as KnownIssueCard, type KnownIssueQuery, type SubmissionsKnownIssueRef as KnownIssueRef, type KnownIssuesKnownIssueStatus as KnownIssueStatus, type MaskPoint, type MaskRect, type ProgramsMyPrograms as MyPrograms, type MySubmission, type OpenFeedbackOptions, type PatternFinding, type PatternKind, type CommonPlatform as Platform, type Presenter, type QueuedSubmission, type SubmissionsReasonCode as ReasonCode, type SubmissionsReplyView as ReplyView, type ResolvedSettings, type SubmissionsStatusType as StatusType, type SubmissionsSubmissionStatus as SubmissionStatus, type SubmissionsSubmissionStatusView as SubmissionStatusView, type SubmissionsSubmissionType as SubmissionType, TILLATTE_MIME, type Telemetry, type TelemetryEvent, type TextMaxLength, VEDLEGG_GRENSER, VERSJON, dekkerAlt, init, klipp, scanText, skaler, strokTilRekter, treffer, trykkTilRekt };
package/dist/index.js CHANGED
@@ -800,6 +800,15 @@ var attachmentsComplete = (options) => (options.client ?? client).post({
800
800
  url: "/v1/ingest/attachments/{id}/complete",
801
801
  ...options
802
802
  });
803
+ var configGet = (options) => (options?.client ?? client).get({
804
+ security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
805
+ key: "FeedbackTokenAuth",
806
+ scheme: "bearer",
807
+ type: "http"
808
+ }],
809
+ url: "/v1/ingest/config",
810
+ ...options
811
+ });
803
812
  var knownIssuesList2 = (options) => (options?.client ?? client).get({
804
813
  security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
805
814
  key: "FeedbackTokenAuth",
@@ -1041,8 +1050,8 @@ function validerKontekst(kontekst, sti, krevPlatform) {
1041
1050
  function sl\u00E5SammenKontekst(base, p\u00E5Lagt, sdkVersion) {
1042
1051
  const ut = {};
1043
1052
  for (const felt of KONTEKST_FELTER) {
1044
- const verdi = p\u00E5Lagt?.[felt] ?? base[felt];
1045
- if (verdi !== void 0) ut[felt] = verdi;
1053
+ const verdi = p\u00E5Lagt && felt in p\u00E5Lagt ? p\u00E5Lagt[felt] : base[felt];
1054
+ if (verdi !== void 0 && verdi !== null) ut[felt] = verdi;
1046
1055
  }
1047
1056
  ut["sdkVersion"] = sdkVersion;
1048
1057
  return ut;
@@ -1208,7 +1217,7 @@ async function lastOppTilLagring(fetchImpl, presign, body, signal) {
1208
1217
  }
1209
1218
 
1210
1219
  // src/versjon.ts
1211
- var VERSJON = "0.2.0";
1220
+ var VERSJON = "0.3.0";
1212
1221
 
1213
1222
  // src/klient.ts
1214
1223
  var STANDARD_TIMEOUT_MS = 1e4;
@@ -1280,8 +1289,9 @@ function tilApiFeil(status, kropp, response) {
1280
1289
  function init(options) {
1281
1290
  validerOpsjoner(options);
1282
1291
  const settings = {
1283
- // Strammest mulig som standard: ingest-flaten har ingen klientkonfig, og
1284
- // 140 / skjermbilde av er verdiene ved minorsPresent (K18).
1292
+ // Strammest mulig til loadSettings() har svart: 140 / 10 / skjermbilde av er
1293
+ // verdiene ved minorsPresent (K18). Verten kan overstyre startverdiene, men
1294
+ // det leietakeren har satt i panelet vinner når konfigurasjonen er hentet.
1285
1295
  textMaxLength: options.textMaxLength ?? 140,
1286
1296
  minTextLength: options.minTextLength ?? 10,
1287
1297
  screenshotsEnabled: options.screenshotsEnabled ?? false
@@ -1385,6 +1395,19 @@ function init(options) {
1385
1395
  isAnonymous: anonym,
1386
1396
  settings,
1387
1397
  context: kontekst,
1398
+ async loadSettings() {
1399
+ try {
1400
+ const cfg = await medToken(
1401
+ (h) => configGet({ client: klient, headers: h, signal: signal() })
1402
+ );
1403
+ if (cfg?.textMaxLength === 140 || cfg?.textMaxLength === 280) settings.textMaxLength = cfg.textMaxLength;
1404
+ if (typeof cfg?.minTextLength === "number" && cfg.minTextLength >= 1) settings.minTextLength = cfg.minTextLength;
1405
+ if (typeof cfg?.screenshotsEnabled === "boolean") settings.screenshotsEnabled = cfg.screenshotsEnabled;
1406
+ if (typeof cfg?.privacyUrl === "string" && cfg.privacyUrl) settings.privacyUrl = cfg.privacyUrl;
1407
+ } catch {
1408
+ }
1409
+ return settings;
1410
+ },
1388
1411
  async capture(input) {
1389
1412
  const tekst = input.text ?? "";
1390
1413
  if (tekst.length < settings.minTextLength) {