@innspel/core 0.2.1 → 0.4.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/README.md CHANGED
@@ -29,6 +29,14 @@ await innspel.capture({ type: 'feil', text: 'Dørlista er tom etter kl. 22.' });
29
29
 
30
30
  Det er hele veien til første innsending. Alt annet under er valgfritt.
31
31
 
32
+ Leietakerens grenser — tegngrense, minste antall tegn, om skjermbilde finnes og
33
+ personvernlenken — hentes fra plattformen med `innspel.loadSettings()`. Widgetene
34
+ gjør det ved åpning, aldri ved oppstart. Til kallet har svart gjelder de strammeste
35
+ verdiene (140 tegn, 10 som minimum, skjermbilde av); `textMaxLength`,
36
+ `minTextLength` og `screenshotsEnabled` i `init()` er bare startverdier, og det
37
+ leietakeren har satt i panelet vinner. Svarer ikke kallet, kan innsenderen
38
+ fortsatt melde.
39
+
32
40
  ## De fire opsjonene du må gi
33
41
 
34
42
  | Opsjon | Hva |
@@ -89,6 +97,9 @@ innspel.knownIssues.confirm(id) // «Ja, jeg også»
89
97
  innspel.subjects.submissions() // «Mine innspill», inkl. det som venter på nett
90
98
  innspel.subjects.status(submissionId) // status for én egen innsending
91
99
  innspel.programs.list() // invitasjoner, deltakelser, oppfølginger
100
+ innspel.programs.accept(invitationToken) // ja til invitasjonen — tokenet kom i DIN kanal
101
+ innspel.programs.decline(invitationToken) // nei. Ingen årsak spørres
102
+ innspel.programs.withdraw(participationId) // «Gå ut» — umiddelbart, alltid tillatt
92
103
  innspel.attachments.upload(submissionId, attachment) // skjermbilde til en innsending som alt er lagret
93
104
  innspel.queue.pending() // det som ligger i offline-køen
94
105
  innspel.queue.flush() // sendes ellers automatisk
package/dist/index.cjs CHANGED
@@ -802,6 +802,33 @@ var attachmentsComplete = (options) => (options.client ?? client).post({
802
802
  url: "/v1/ingest/attachments/{id}/complete",
803
803
  ...options
804
804
  });
805
+ var configGet = (options) => (options?.client ?? client).get({
806
+ security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
807
+ key: "FeedbackTokenAuth",
808
+ scheme: "bearer",
809
+ type: "http"
810
+ }],
811
+ url: "/v1/ingest/config",
812
+ ...options
813
+ });
814
+ var programsAccept = (options) => (options.client ?? client).post({
815
+ security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
816
+ key: "FeedbackTokenAuth",
817
+ scheme: "bearer",
818
+ type: "http"
819
+ }],
820
+ url: "/v1/ingest/invitations/{token}/accept",
821
+ ...options
822
+ });
823
+ var programsDecline = (options) => (options.client ?? client).post({
824
+ security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
825
+ key: "FeedbackTokenAuth",
826
+ scheme: "bearer",
827
+ type: "http"
828
+ }],
829
+ url: "/v1/ingest/invitations/{token}/decline",
830
+ ...options
831
+ });
805
832
  var knownIssuesList2 = (options) => (options?.client ?? client).get({
806
833
  security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
807
834
  key: "FeedbackTokenAuth",
@@ -824,6 +851,15 @@ var knownIssuesConfirm = (options) => (options.client ?? client).post({
824
851
  ...options.headers
825
852
  }
826
853
  });
854
+ var programsWithdraw = (options) => (options.client ?? client).post({
855
+ security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
856
+ key: "FeedbackTokenAuth",
857
+ scheme: "bearer",
858
+ type: "http"
859
+ }],
860
+ url: "/v1/ingest/participations/{id}/withdraw",
861
+ ...options
862
+ });
827
863
  var programsListMine = (options) => (options?.client ?? client).get({
828
864
  security: [{ name: "X-Innspel-Tenant-Key", type: "apiKey" }, {
829
865
  key: "FeedbackTokenAuth",
@@ -1210,7 +1246,7 @@ async function lastOppTilLagring(fetchImpl, presign, body, signal) {
1210
1246
  }
1211
1247
 
1212
1248
  // src/versjon.ts
1213
- var VERSJON = "0.2.1";
1249
+ var VERSJON = "0.4.0";
1214
1250
 
1215
1251
  // src/klient.ts
1216
1252
  var STANDARD_TIMEOUT_MS = 1e4;
@@ -1282,8 +1318,9 @@ function tilApiFeil(status, kropp, response) {
1282
1318
  function init(options) {
1283
1319
  validerOpsjoner(options);
1284
1320
  const settings = {
1285
- // Strammest mulig som standard: ingest-flaten har ingen klientkonfig, og
1286
- // 140 / skjermbilde av er verdiene ved minorsPresent (K18).
1321
+ // Strammest mulig til loadSettings() har svart: 140 / 10 / skjermbilde av er
1322
+ // verdiene ved minorsPresent (K18). Verten kan overstyre startverdiene, men
1323
+ // det leietakeren har satt i panelet vinner når konfigurasjonen er hentet.
1287
1324
  textMaxLength: options.textMaxLength ?? 140,
1288
1325
  minTextLength: options.minTextLength ?? 10,
1289
1326
  screenshotsEnabled: options.screenshotsEnabled ?? false
@@ -1319,6 +1356,14 @@ function init(options) {
1319
1356
  if (!res.response.ok) throw tilApiFeil(res.response.status, res.error, res.response);
1320
1357
  return res.data;
1321
1358
  }
1359
+ function krevInvitasjonstoken(token) {
1360
+ if (typeof token !== "string" || token.length === 0) {
1361
+ throw new InnspelConfigError(
1362
+ "invitationToken",
1363
+ "mangler \u2014 det er engangs-tokenet leietakeren sendte i sin egen kanal (dyplenke, varsel eller e-post)"
1364
+ );
1365
+ }
1366
+ }
1322
1367
  function krevToken() {
1323
1368
  if (anonym) {
1324
1369
  throw new InnspelApiError(
@@ -1387,6 +1432,19 @@ function init(options) {
1387
1432
  isAnonymous: anonym,
1388
1433
  settings,
1389
1434
  context: kontekst,
1435
+ async loadSettings() {
1436
+ try {
1437
+ const cfg = await medToken(
1438
+ (h) => configGet({ client: klient, headers: h, signal: signal() })
1439
+ );
1440
+ if (cfg?.textMaxLength === 140 || cfg?.textMaxLength === 280) settings.textMaxLength = cfg.textMaxLength;
1441
+ if (typeof cfg?.minTextLength === "number" && cfg.minTextLength >= 1) settings.minTextLength = cfg.minTextLength;
1442
+ if (typeof cfg?.screenshotsEnabled === "boolean") settings.screenshotsEnabled = cfg.screenshotsEnabled;
1443
+ if (typeof cfg?.privacyUrl === "string" && cfg.privacyUrl) settings.privacyUrl = cfg.privacyUrl;
1444
+ } catch {
1445
+ }
1446
+ return settings;
1447
+ },
1390
1448
  async capture(input) {
1391
1449
  const tekst = input.text ?? "";
1392
1450
  if (tekst.length < settings.minTextLength) {
@@ -1519,6 +1577,47 @@ function init(options) {
1519
1577
  return medToken(
1520
1578
  (h) => programsListMine({ client: klient, headers: h, signal: signal() })
1521
1579
  );
1580
+ },
1581
+ async accept(invitationToken) {
1582
+ krevInvitasjonstoken(invitationToken);
1583
+ krevToken();
1584
+ const svar = await medToken(
1585
+ (h) => programsAccept({
1586
+ client: klient,
1587
+ headers: h,
1588
+ signal: signal(),
1589
+ path: { token: invitationToken }
1590
+ })
1591
+ );
1592
+ telemetri.emit({ name: "invitation_accepted" });
1593
+ return svar;
1594
+ },
1595
+ async decline(invitationToken) {
1596
+ krevInvitasjonstoken(invitationToken);
1597
+ krevToken();
1598
+ await medToken(
1599
+ (h) => programsDecline({
1600
+ client: klient,
1601
+ headers: h,
1602
+ signal: signal(),
1603
+ path: { token: invitationToken }
1604
+ })
1605
+ );
1606
+ telemetri.emit({ name: "invitation_declined" });
1607
+ },
1608
+ async withdraw(participationId) {
1609
+ if (typeof participationId !== "string" || participationId.length === 0) {
1610
+ throw new InnspelConfigError("participationId", "mangler \u2014 bruk id fra deltakelsen i programs.list()");
1611
+ }
1612
+ krevToken();
1613
+ return medToken(
1614
+ (h) => programsWithdraw({
1615
+ client: klient,
1616
+ headers: h,
1617
+ signal: signal(),
1618
+ path: { id: participationId }
1619
+ })
1620
+ );
1522
1621
  }
1523
1622
  },
1524
1623
  attachments: {