@offscript/sdk 0.1.5 → 0.1.6

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.
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkVYCDQLP7_cjs = require('./chunk-VYCDQLP7.cjs');
3
+ var chunkPCJRHW66_cjs = require('./chunk-PCJRHW66.cjs');
4
4
 
5
5
  // src/adapters/vanilla.ts
6
6
  async function createOffscript(config) {
7
- const sdk = new chunkVYCDQLP7_cjs.Offscript(config);
7
+ const sdk = new chunkPCJRHW66_cjs.Offscript(config);
8
8
  await sdk.init();
9
9
  return sdk;
10
10
  }
@@ -16,5 +16,5 @@ async function startOffscript(config) {
16
16
 
17
17
  exports.createOffscript = createOffscript;
18
18
  exports.startOffscript = startOffscript;
19
- //# sourceMappingURL=chunk-2MY2FWIA.cjs.map
20
- //# sourceMappingURL=chunk-2MY2FWIA.cjs.map
19
+ //# sourceMappingURL=chunk-RAUSXUGS.cjs.map
20
+ //# sourceMappingURL=chunk-RAUSXUGS.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/vanilla.ts"],"names":["Offscript"],"mappings":";;;;;AAIA,eAAsB,gBAAgB,MAAA,EAA6C;AACjF,EAAA,MAAM,GAAA,GAAM,IAAIA,2BAAA,CAAU,MAAM,CAAA;AAChC,EAAA,MAAM,IAAI,IAAA,EAAK;AACf,EAAA,OAAO,GAAA;AACT;AAEA,eAAsB,eAAe,MAAA,EAA6C;AAChF,EAAA,MAAM,GAAA,GAAM,MAAM,eAAA,CAAgB,MAAM,CAAA;AACxC,EAAA,MAAM,IAAI,cAAA,EAAe;AACzB,EAAA,OAAO,GAAA;AACT","file":"chunk-2MY2FWIA.cjs","sourcesContent":["import { Offscript } from \"../core/OffscriptSDK\";\nimport type { OffscriptConfig } from \"../types/config\";\n\n/** Atalho para aplicações JS tradicionais, Blade e MPA: inicializa a captura local. */\nexport async function createOffscript(config: OffscriptConfig): Promise<Offscript> {\n const sdk = new Offscript(config);\n await sdk.init();\n return sdk;\n}\n\nexport async function startOffscript(config: OffscriptConfig): Promise<Offscript> {\n const sdk = await createOffscript(config);\n await sdk.startRecording();\n return sdk;\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/vanilla.ts"],"names":["Offscript"],"mappings":";;;;;AAIA,eAAsB,gBAAgB,MAAA,EAA6C;AACjF,EAAA,MAAM,GAAA,GAAM,IAAIA,2BAAA,CAAU,MAAM,CAAA;AAChC,EAAA,MAAM,IAAI,IAAA,EAAK;AACf,EAAA,OAAO,GAAA;AACT;AAEA,eAAsB,eAAe,MAAA,EAA6C;AAChF,EAAA,MAAM,GAAA,GAAM,MAAM,eAAA,CAAgB,MAAM,CAAA;AACxC,EAAA,MAAM,IAAI,cAAA,EAAe;AACzB,EAAA,OAAO,GAAA;AACT","file":"chunk-RAUSXUGS.cjs","sourcesContent":["import { Offscript } from \"../core/OffscriptSDK\";\nimport type { OffscriptConfig } from \"../types/config\";\n\n/** Atalho para aplicações JS tradicionais, Blade e MPA: inicializa a captura local. */\nexport async function createOffscript(config: OffscriptConfig): Promise<Offscript> {\n const sdk = new Offscript(config);\n await sdk.init();\n return sdk;\n}\n\nexport async function startOffscript(config: OffscriptConfig): Promise<Offscript> {\n const sdk = await createOffscript(config);\n await sdk.startRecording();\n return sdk;\n}\n"]}
@@ -14,7 +14,7 @@ export type OffscriptEventMap = {
14
14
  recordingEnd: RecordingPayload;
15
15
  };
16
16
  export declare class Offscript implements EventSink {
17
- static readonly version = "0.1.5";
17
+ static readonly version = "0.1.6";
18
18
  readonly config: ResolvedConfig;
19
19
  readonly sanitizer: DataSanitizer;
20
20
  private readonly bus;
@@ -44,10 +44,18 @@ export declare class Offscript implements EventSink {
44
44
  private payload?;
45
45
  private submitted;
46
46
  private response;
47
+ private launchToken?;
48
+ private launchTokenChanged;
47
49
  constructor(config?: OffscriptConfig);
48
50
  getState(): OffscriptState;
49
51
  capturesSensitiveValues(): boolean;
50
52
  init(): Promise<void>;
53
+ private initialize;
54
+ private resolveLaunchToken;
55
+ private getOrCreateDraftKey;
56
+ private readSessionValue;
57
+ private writeSessionValue;
58
+ private removeSessionValue;
51
59
  private initializeDraft;
52
60
  private restoreDraft;
53
61
  private save;
@@ -57,7 +65,7 @@ export declare class Offscript implements EventSink {
57
65
  resumeRecording(): Promise<void>;
58
66
  stopRecording(): Promise<RecordingPayload>;
59
67
  private doStop;
60
- complete(options: CompleteOptions): Promise<unknown>;
68
+ complete(options?: CompleteOptions): Promise<unknown>;
61
69
  private doComplete;
62
70
  finishRecording(): Promise<unknown>;
63
71
  discardRecording(): Promise<void>;
package/dist/index.cjs CHANGED
@@ -1,78 +1,78 @@
1
1
  'use strict';
2
2
 
3
- var chunk2MY2FWIA_cjs = require('./chunk-2MY2FWIA.cjs');
4
- var chunkVYCDQLP7_cjs = require('./chunk-VYCDQLP7.cjs');
5
- var chunkHPDLEAAL_cjs = require('./chunk-HPDLEAAL.cjs');
3
+ var chunkRAUSXUGS_cjs = require('./chunk-RAUSXUGS.cjs');
4
+ var chunkPCJRHW66_cjs = require('./chunk-PCJRHW66.cjs');
5
+ var chunkMZXF2LF2_cjs = require('./chunk-MZXF2LF2.cjs');
6
6
 
7
7
 
8
8
 
9
9
  Object.defineProperty(exports, "createOffscript", {
10
10
  enumerable: true,
11
- get: function () { return chunk2MY2FWIA_cjs.createOffscript; }
11
+ get: function () { return chunkRAUSXUGS_cjs.createOffscript; }
12
12
  });
13
13
  Object.defineProperty(exports, "startOffscript", {
14
14
  enumerable: true,
15
- get: function () { return chunk2MY2FWIA_cjs.startOffscript; }
15
+ get: function () { return chunkRAUSXUGS_cjs.startOffscript; }
16
16
  });
17
17
  Object.defineProperty(exports, "ConfigError", {
18
18
  enumerable: true,
19
- get: function () { return chunkVYCDQLP7_cjs.ConfigError; }
19
+ get: function () { return chunkPCJRHW66_cjs.ConfigError; }
20
20
  });
21
21
  Object.defineProperty(exports, "DEFAULT_PRIVACY", {
22
22
  enumerable: true,
23
- get: function () { return chunkVYCDQLP7_cjs.DEFAULT_PRIVACY; }
23
+ get: function () { return chunkPCJRHW66_cjs.DEFAULT_PRIVACY; }
24
24
  });
25
25
  Object.defineProperty(exports, "DEFAULT_RECORDING", {
26
26
  enumerable: true,
27
- get: function () { return chunkVYCDQLP7_cjs.DEFAULT_RECORDING; }
27
+ get: function () { return chunkPCJRHW66_cjs.DEFAULT_RECORDING; }
28
28
  });
29
29
  Object.defineProperty(exports, "DataSanitizer", {
30
30
  enumerable: true,
31
- get: function () { return chunkVYCDQLP7_cjs.DataSanitizer; }
31
+ get: function () { return chunkPCJRHW66_cjs.DataSanitizer; }
32
32
  });
33
33
  Object.defineProperty(exports, "InvalidStateError", {
34
34
  enumerable: true,
35
- get: function () { return chunkVYCDQLP7_cjs.InvalidStateError; }
35
+ get: function () { return chunkPCJRHW66_cjs.InvalidStateError; }
36
36
  });
37
37
  Object.defineProperty(exports, "Offscript", {
38
38
  enumerable: true,
39
- get: function () { return chunkVYCDQLP7_cjs.Offscript; }
39
+ get: function () { return chunkPCJRHW66_cjs.Offscript; }
40
40
  });
41
41
  Object.defineProperty(exports, "OffscriptError", {
42
42
  enumerable: true,
43
- get: function () { return chunkVYCDQLP7_cjs.OffscriptError; }
43
+ get: function () { return chunkPCJRHW66_cjs.OffscriptError; }
44
44
  });
45
45
  Object.defineProperty(exports, "ACTION_SCHEMA_VERSION", {
46
46
  enumerable: true,
47
- get: function () { return chunkHPDLEAAL_cjs.ACTION_SCHEMA_VERSION; }
47
+ get: function () { return chunkMZXF2LF2_cjs.ACTION_SCHEMA_VERSION; }
48
48
  });
49
49
  Object.defineProperty(exports, "PLAYWRIGHT_CONTRACT_VERSION", {
50
50
  enumerable: true,
51
- get: function () { return chunkHPDLEAAL_cjs.PLAYWRIGHT_CONTRACT_VERSION; }
51
+ get: function () { return chunkMZXF2LF2_cjs.PLAYWRIGHT_CONTRACT_VERSION; }
52
52
  });
53
53
  Object.defineProperty(exports, "SCHEMA_VERSION", {
54
54
  enumerable: true,
55
- get: function () { return chunkHPDLEAAL_cjs.SCHEMA_VERSION; }
55
+ get: function () { return chunkMZXF2LF2_cjs.SCHEMA_VERSION; }
56
56
  });
57
57
  Object.defineProperty(exports, "SDK_VERSION", {
58
58
  enumerable: true,
59
- get: function () { return chunkHPDLEAAL_cjs.SDK_VERSION; }
59
+ get: function () { return chunkMZXF2LF2_cjs.SDK_VERSION; }
60
60
  });
61
61
  Object.defineProperty(exports, "SelectorGenerator", {
62
62
  enumerable: true,
63
- get: function () { return chunkHPDLEAAL_cjs.SelectorGenerator; }
63
+ get: function () { return chunkMZXF2LF2_cjs.SelectorGenerator; }
64
64
  });
65
65
  Object.defineProperty(exports, "buildPlaywrightContract", {
66
66
  enumerable: true,
67
- get: function () { return chunkHPDLEAAL_cjs.buildPlaywrightContract; }
67
+ get: function () { return chunkMZXF2LF2_cjs.buildPlaywrightContract; }
68
68
  });
69
69
  Object.defineProperty(exports, "normalizeActions", {
70
70
  enumerable: true,
71
- get: function () { return chunkHPDLEAAL_cjs.normalizeActions; }
71
+ get: function () { return chunkMZXF2LF2_cjs.normalizeActions; }
72
72
  });
73
73
  Object.defineProperty(exports, "validatePlaywrightContract", {
74
74
  enumerable: true,
75
- get: function () { return chunkHPDLEAAL_cjs.validatePlaywrightContract; }
75
+ get: function () { return chunkMZXF2LF2_cjs.validatePlaywrightContract; }
76
76
  });
77
77
  //# sourceMappingURL=index.cjs.map
78
78
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- export { createOffscript, startOffscript } from './chunk-V2YYWGIA.js';
2
- export { ConfigError, DEFAULT_PRIVACY, DEFAULT_RECORDING, DataSanitizer, InvalidStateError, Offscript, OffscriptError } from './chunk-XBXFGCUT.js';
3
- export { ACTION_SCHEMA_VERSION, PLAYWRIGHT_CONTRACT_VERSION, SCHEMA_VERSION, SDK_VERSION, SelectorGenerator, buildPlaywrightContract, normalizeActions, validatePlaywrightContract } from './chunk-6ROP37WI.js';
1
+ export { createOffscript, startOffscript } from './chunk-R2PPPR4K.js';
2
+ export { ConfigError, DEFAULT_PRIVACY, DEFAULT_RECORDING, DataSanitizer, InvalidStateError, Offscript, OffscriptError } from './chunk-5ZBR6FI5.js';
3
+ export { ACTION_SCHEMA_VERSION, PLAYWRIGHT_CONTRACT_VERSION, SCHEMA_VERSION, SDK_VERSION, SelectorGenerator, buildPlaywrightContract, normalizeActions, validatePlaywrightContract } from './chunk-KHKIWCLM.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
@@ -1,56 +1,56 @@
1
1
  'use strict';
2
2
 
3
- var chunkHPDLEAAL_cjs = require('./chunk-HPDLEAAL.cjs');
3
+ var chunkMZXF2LF2_cjs = require('./chunk-MZXF2LF2.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "CONTRACT_LIMITATIONS", {
8
8
  enumerable: true,
9
- get: function () { return chunkHPDLEAAL_cjs.CONTRACT_LIMITATIONS; }
9
+ get: function () { return chunkMZXF2LF2_cjs.CONTRACT_LIMITATIONS; }
10
10
  });
11
11
  Object.defineProperty(exports, "PLAYWRIGHT_CONTRACT_KIND", {
12
12
  enumerable: true,
13
- get: function () { return chunkHPDLEAAL_cjs.PLAYWRIGHT_CONTRACT_KIND; }
13
+ get: function () { return chunkMZXF2LF2_cjs.PLAYWRIGHT_CONTRACT_KIND; }
14
14
  });
15
15
  Object.defineProperty(exports, "PLAYWRIGHT_CONTRACT_VERSION", {
16
16
  enumerable: true,
17
- get: function () { return chunkHPDLEAAL_cjs.PLAYWRIGHT_CONTRACT_VERSION; }
17
+ get: function () { return chunkMZXF2LF2_cjs.PLAYWRIGHT_CONTRACT_VERSION; }
18
18
  });
19
19
  Object.defineProperty(exports, "SelectorGenerator", {
20
20
  enumerable: true,
21
- get: function () { return chunkHPDLEAAL_cjs.SelectorGenerator; }
21
+ get: function () { return chunkMZXF2LF2_cjs.SelectorGenerator; }
22
22
  });
23
23
  Object.defineProperty(exports, "accessibleName", {
24
24
  enumerable: true,
25
- get: function () { return chunkHPDLEAAL_cjs.accessibleName; }
25
+ get: function () { return chunkMZXF2LF2_cjs.accessibleName; }
26
26
  });
27
27
  Object.defineProperty(exports, "buildPlaywrightContract", {
28
28
  enumerable: true,
29
- get: function () { return chunkHPDLEAAL_cjs.buildPlaywrightContract; }
29
+ get: function () { return chunkMZXF2LF2_cjs.buildPlaywrightContract; }
30
30
  });
31
31
  Object.defineProperty(exports, "implicitRole", {
32
32
  enumerable: true,
33
- get: function () { return chunkHPDLEAAL_cjs.implicitRole; }
33
+ get: function () { return chunkMZXF2LF2_cjs.implicitRole; }
34
34
  });
35
35
  Object.defineProperty(exports, "isStableClass", {
36
36
  enumerable: true,
37
- get: function () { return chunkHPDLEAAL_cjs.isStableClass; }
37
+ get: function () { return chunkMZXF2LF2_cjs.isStableClass; }
38
38
  });
39
39
  Object.defineProperty(exports, "isStableId", {
40
40
  enumerable: true,
41
- get: function () { return chunkHPDLEAAL_cjs.isStableId; }
41
+ get: function () { return chunkMZXF2LF2_cjs.isStableId; }
42
42
  });
43
43
  Object.defineProperty(exports, "labelText", {
44
44
  enumerable: true,
45
- get: function () { return chunkHPDLEAAL_cjs.labelText; }
45
+ get: function () { return chunkMZXF2LF2_cjs.labelText; }
46
46
  });
47
47
  Object.defineProperty(exports, "normalizeActions", {
48
48
  enumerable: true,
49
- get: function () { return chunkHPDLEAAL_cjs.normalizeActions; }
49
+ get: function () { return chunkMZXF2LF2_cjs.normalizeActions; }
50
50
  });
51
51
  Object.defineProperty(exports, "validatePlaywrightContract", {
52
52
  enumerable: true,
53
- get: function () { return chunkHPDLEAAL_cjs.validatePlaywrightContract; }
53
+ get: function () { return chunkMZXF2LF2_cjs.validatePlaywrightContract; }
54
54
  });
55
55
  //# sourceMappingURL=playwright.cjs.map
56
56
  //# sourceMappingURL=playwright.cjs.map
@@ -1,3 +1,3 @@
1
- export { CONTRACT_LIMITATIONS, PLAYWRIGHT_CONTRACT_KIND, PLAYWRIGHT_CONTRACT_VERSION, SelectorGenerator, accessibleName, buildPlaywrightContract, implicitRole, isStableClass, isStableId, labelText, normalizeActions, validatePlaywrightContract } from './chunk-6ROP37WI.js';
1
+ export { CONTRACT_LIMITATIONS, PLAYWRIGHT_CONTRACT_KIND, PLAYWRIGHT_CONTRACT_VERSION, SelectorGenerator, accessibleName, buildPlaywrightContract, implicitRole, isStableClass, isStableId, labelText, normalizeActions, validatePlaywrightContract } from './chunk-KHKIWCLM.js';
2
2
  //# sourceMappingURL=playwright.js.map
3
3
  //# sourceMappingURL=playwright.js.map
@@ -70,9 +70,11 @@ export interface OffscriptConfig {
70
70
  privacy?: Partial<PrivacyConfig>;
71
71
  correlationWindowMs?: number;
72
72
  controls?: boolean;
73
- /** Opaque per-tab key supplied by the host to preserve a local draft across documents. */
73
+ /** Endpoint that receives completed recordings. */
74
+ endpoint?: string;
75
+ /** Optional opaque key for a local draft; the SDK creates and stores one for tokenized sessions by default. */
74
76
  persistenceKey?: string;
75
- /** Called by the overlay when the user finishes. The host supplies endpoint and token here. */
77
+ /** Optional custom handler called by the overlay when the user finishes. */
76
78
  onComplete?: () => Promise<unknown>;
77
79
  }
78
80
  export interface ResolvedConfig {
@@ -80,6 +82,7 @@ export interface ResolvedConfig {
80
82
  privacy: PrivacyConfig;
81
83
  correlationWindowMs: number;
82
84
  controls: boolean;
85
+ endpoint?: string;
83
86
  persistenceKey?: string;
84
87
  onComplete?: () => Promise<unknown>;
85
88
  }
@@ -1,5 +1,5 @@
1
1
  export declare const SCHEMA_VERSION = "1.0";
2
- export declare const SDK_VERSION = "0.1.5";
2
+ export declare const SDK_VERSION = "0.1.6";
3
3
  export type EventKind = "rrweb" | "action" | "http" | "console" | "error" | "context" | "iframe" | "lifecycle";
4
4
  /** Envelope comum a todos os eventos. A ordem canônica é (tabId, sequence). */
5
5
  export interface OffscriptEvent<T = unknown> {
@@ -10,8 +10,8 @@ export interface OffscriptState {
10
10
  };
11
11
  }
12
12
  export interface CompleteOptions {
13
- endpoint: string;
14
- token: string;
13
+ endpoint?: string;
14
+ token?: string;
15
15
  }
16
16
  export interface RecordingPayload {
17
17
  recording: OffscriptEvent[];
@@ -1,6 +1,6 @@
1
1
  # Envio final
2
2
 
3
- O SDK grava localmente. `complete({ endpoint, token })` encerra a captura e faz um POST ao endpoint informado pelo host, com JSON e `Authorization: Bearer <token>`.
3
+ O SDK grava localmente. `complete()` encerra a captura e faz um POST ao endpoint configurado, com JSON e `Authorization: Bearer <token>`. O token vem de `offscript_token` na URL ou da sessão da aba; a query não é removida. É possível sobrescrever endpoint/token explicitamente em integrações personalizadas.
4
4
 
5
5
  Campos: `recording` é a lista de envelopes não HTTP, incluindo rrweb; `request` contém envelopes HTTP; `regression` descreve condições iniciais e passos Playwright. IDs do domínio não são enviados. A autorização e a associação do token pertencem ao destinatário.
6
6
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  `Offscript` coordena o ciclo de captura e mantém envelopes em memória. Os recorders capturam rrweb, ações, HTTP, console/erros, contexto e iframes por meio de `EventSink`. `DataSanitizer` aplica as opções de privacidade. `LifecycleManager` observa navegação SPA e mudanças de visibilidade sem enviar dados.
4
4
 
5
- Ao finalizar, todos os recorders são parados. O núcleo monta o payload e o contrato Playwright. O host fornece destino e token a `complete`. O overlay usa `startRecording`, pausa/retomada, descarte e o callback `onComplete` do host. `stopRecording` permite obter o payload sem rede.
5
+ Ao finalizar, todos os recorders são parados. O núcleo monta o payload e o contrato Playwright. O host configura o endpoint; o SDK lê o token de `offscript_token` ou da sessão da aba e usa ambos em `complete()`. O overlay usa `startRecording`, pausa/retomada, descarte e, opcionalmente, o callback `onComplete` do host. `stopRecording` permite obter o payload sem rede.
6
6
 
7
- A persistência local é opcional, habilitada por `persistenceKey` fornecida pelo host. `RecordingStore` guarda status e eventos incrementalmente no IndexedDB. Ao sair do documento, um checkpoint síncrono no sessionStorage preserva a cauda ainda não confirmada. Na próxima página, o SDK recupera esse checkpoint, restaura os dados e retoma o estado anterior com um novo identificador de página e snapshot rrweb. Não há comunicação com backend durante essa continuidade.
7
+ Em sessões com token, a persistência local usa uma chave opaca gerenciada pelo SDK. `RecordingStore` guarda status e eventos incrementalmente no IndexedDB. Ao sair do documento, um checkpoint síncrono no sessionStorage preserva a cauda ainda não confirmada. Na próxima página, o SDK recupera esse checkpoint, restaura os dados e retoma o estado anterior com um novo identificador de página e snapshot rrweb. Não há comunicação com backend durante essa continuidade.
8
8
 
9
- O host mantém o token separadamente na aba; o armazenamento do SDK não recebe credenciais. Sucesso no envio e descarte limpam o rascunho. `destroy` apenas fecha os recursos. Sem `persistenceKey`, o comportamento permanece em memória.
9
+ O SDK mantém o token de execução na sessão da aba, sem remover a query da URL. Sucesso no envio limpa o rascunho e marca a sessão concluída; `destroy` apenas fecha os recursos.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@offscript/sdk",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Offscript SDK - grava\u00e7\u00e3o de sess\u00f5es de teste QA (rrweb, a\u00e7\u00f5es, rede, erros)",
5
5
  "license": "MIT",
6
6
  "type": "module",