@graphext/cuery 0.2.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 +18 -0
- package/esm/_dnt.shims.d.ts +6 -0
- package/esm/_dnt.shims.d.ts.map +1 -0
- package/esm/_dnt.shims.js +61 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/index.js +4 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts +2 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts +18 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.js +17 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts +51 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.js +31 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts +31 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.js +48 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts +14 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.js +18 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts +23 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.js +30 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts +32 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.js +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts +674 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.js +1040 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts +296 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.js +925 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts +279 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.js +560 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts +53 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.js +65 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.js +36 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts +211 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.js +181 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts +15 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.js +14 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts +89 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts +50 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.js +93 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts +79 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.js +127 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts +36 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.js +52 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts +1115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.js +1954 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts +56 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.js +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts +91 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.js +920 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts +198 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.js +600 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.js +164 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.js +128 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.js +135 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.js +131 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.js +149 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts +48 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.js +47 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.js +125 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.js +121 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.js +230 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.js +122 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.js +164 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.js +118 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts +6 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.js +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.js +117 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.js +115 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.js +116 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts +5 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts.map +1 -0
- package/esm/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.js +117 -0
- package/esm/mod.d.ts +23 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +22 -0
- package/esm/package.json +3 -0
- package/esm/src/api.d.ts +42 -0
- package/esm/src/api.d.ts.map +1 -0
- package/esm/src/api.js +161 -0
- package/esm/src/apis/chatgptScraper/brightdata.d.ts +3 -0
- package/esm/src/apis/chatgptScraper/brightdata.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/brightdata.js +172 -0
- package/esm/src/apis/chatgptScraper/index.d.ts +10 -0
- package/esm/src/apis/chatgptScraper/index.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/index.js +41 -0
- package/esm/src/apis/chatgptScraper/oxy.d.ts +3 -0
- package/esm/src/apis/chatgptScraper/oxy.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/oxy.js +156 -0
- package/esm/src/apis/chatgptScraper/scraper.d.ts +46 -0
- package/esm/src/apis/chatgptScraper/scraper.d.ts.map +1 -0
- package/esm/src/apis/chatgptScraper/scraper.js +98 -0
- package/esm/src/apis/googleAds/apiTypes.d.ts +131 -0
- package/esm/src/apis/googleAds/apiTypes.d.ts.map +1 -0
- package/esm/src/apis/googleAds/apiTypes.js +1 -0
- package/esm/src/apis/googleAds/client.d.ts +2 -0
- package/esm/src/apis/googleAds/client.d.ts.map +1 -0
- package/esm/src/apis/googleAds/client.js +97 -0
- package/esm/src/apis/googleAds/countryResourceMap.d.ts +2 -0
- package/esm/src/apis/googleAds/countryResourceMap.d.ts.map +1 -0
- package/esm/src/apis/googleAds/countryResourceMap.js +874 -0
- package/esm/src/apis/googleAds/keywordPlanner.d.ts +64 -0
- package/esm/src/apis/googleAds/keywordPlanner.d.ts.map +1 -0
- package/esm/src/apis/googleAds/keywordPlanner.js +462 -0
- package/esm/src/apis/googleAds/languageResourceMap.d.ts +2 -0
- package/esm/src/apis/googleAds/languageResourceMap.d.ts.map +1 -0
- package/esm/src/apis/googleAds/languageResourceMap.js +208 -0
- package/esm/src/apis/hasdata/aim.d.ts +4 -0
- package/esm/src/apis/hasdata/aim.d.ts.map +1 -0
- package/esm/src/apis/hasdata/aim.js +32 -0
- package/esm/src/apis/hasdata/aio.d.ts +4 -0
- package/esm/src/apis/hasdata/aio.d.ts.map +1 -0
- package/esm/src/apis/hasdata/aio.js +42 -0
- package/esm/src/apis/hasdata/helpers.d.ts +55 -0
- package/esm/src/apis/hasdata/helpers.d.ts.map +1 -0
- package/esm/src/apis/hasdata/helpers.js +182 -0
- package/esm/src/async.d.ts +29 -0
- package/esm/src/async.d.ts.map +1 -0
- package/esm/src/async.js +109 -0
- package/esm/src/models.d.ts +18 -0
- package/esm/src/models.d.ts.map +1 -0
- package/esm/src/models.js +48 -0
- package/esm/src/openai.d.ts +17 -0
- package/esm/src/openai.d.ts.map +1 -0
- package/esm/src/openai.js +136 -0
- package/esm/src/schemas/brand.schema.d.ts +182 -0
- package/esm/src/schemas/brand.schema.d.ts.map +1 -0
- package/esm/src/schemas/brand.schema.js +49 -0
- package/esm/src/schemas/entity.schema.d.ts +14 -0
- package/esm/src/schemas/entity.schema.d.ts.map +1 -0
- package/esm/src/schemas/entity.schema.js +8 -0
- package/esm/src/schemas/funnel.schema.d.ts +94 -0
- package/esm/src/schemas/funnel.schema.d.ts.map +1 -0
- package/esm/src/schemas/funnel.schema.js +46 -0
- package/esm/src/schemas/index.d.ts +21 -0
- package/esm/src/schemas/index.d.ts.map +1 -0
- package/esm/src/schemas/index.js +13 -0
- package/esm/src/schemas/keyword.schema.d.ts +44 -0
- package/esm/src/schemas/keyword.schema.d.ts.map +1 -0
- package/esm/src/schemas/keyword.schema.js +6 -0
- package/esm/src/schemas/models.schema.d.ts +6 -0
- package/esm/src/schemas/models.schema.d.ts.map +1 -0
- package/esm/src/schemas/models.schema.js +1 -0
- package/esm/src/schemas/persona.schema.d.ts +50 -0
- package/esm/src/schemas/persona.schema.d.ts.map +1 -0
- package/esm/src/schemas/persona.schema.js +21 -0
- package/esm/src/schemas/pipeline.schema.d.ts +146 -0
- package/esm/src/schemas/pipeline.schema.d.ts.map +1 -0
- package/esm/src/schemas/pipeline.schema.js +16 -0
- package/esm/src/schemas/search.schema.d.ts +29 -0
- package/esm/src/schemas/search.schema.d.ts.map +1 -0
- package/esm/src/schemas/search.schema.js +1 -0
- package/esm/src/schemas/seedKeyword.schema.d.ts +15 -0
- package/esm/src/schemas/seedKeyword.schema.d.ts.map +1 -0
- package/esm/src/schemas/seedKeyword.schema.js +7 -0
- package/esm/src/schemas/sentiment.schema.d.ts +22 -0
- package/esm/src/schemas/sentiment.schema.d.ts.map +1 -0
- package/esm/src/schemas/sentiment.schema.js +9 -0
- package/esm/src/schemas/sources.schema.d.ts +29 -0
- package/esm/src/schemas/sources.schema.d.ts.map +1 -0
- package/esm/src/schemas/sources.schema.js +1 -0
- package/esm/src/schemas/topics.schema.d.ts +33 -0
- package/esm/src/schemas/topics.schema.d.ts.map +1 -0
- package/esm/src/schemas/topics.schema.js +14 -0
- package/esm/src/tools/brands.d.ts +55 -0
- package/esm/src/tools/brands.d.ts.map +1 -0
- package/esm/src/tools/brands.js +458 -0
- package/esm/src/tools/classifier.d.ts +17 -0
- package/esm/src/tools/classifier.d.ts.map +1 -0
- package/esm/src/tools/classifier.js +135 -0
- package/esm/src/tools/entities.d.ts +19 -0
- package/esm/src/tools/entities.d.ts.map +1 -0
- package/esm/src/tools/entities.js +80 -0
- package/esm/src/tools/funnel.d.ts +41 -0
- package/esm/src/tools/funnel.d.ts.map +1 -0
- package/esm/src/tools/funnel.js +372 -0
- package/esm/src/tools/keywords.d.ts +21 -0
- package/esm/src/tools/keywords.d.ts.map +1 -0
- package/esm/src/tools/keywords.js +172 -0
- package/esm/src/tools/personas.d.ts +3 -0
- package/esm/src/tools/personas.d.ts.map +1 -0
- package/esm/src/tools/personas.js +88 -0
- package/esm/src/tools/scorer.d.ts +14 -0
- package/esm/src/tools/scorer.d.ts.map +1 -0
- package/esm/src/tools/scorer.js +54 -0
- package/esm/src/tools/search.d.ts +24 -0
- package/esm/src/tools/search.d.ts.map +1 -0
- package/esm/src/tools/search.js +130 -0
- package/esm/src/tools/seedKeywords.d.ts +68 -0
- package/esm/src/tools/seedKeywords.d.ts.map +1 -0
- package/esm/src/tools/seedKeywords.js +214 -0
- package/esm/src/tools/sentiment.d.ts +11 -0
- package/esm/src/tools/sentiment.d.ts.map +1 -0
- package/esm/src/tools/sentiment.js +68 -0
- package/esm/src/tools/sources.d.ts +39 -0
- package/esm/src/tools/sources.d.ts.map +1 -0
- package/esm/src/tools/sources.js +263 -0
- package/esm/src/tools/topics.d.ts +74 -0
- package/esm/src/tools/topics.d.ts.map +1 -0
- package/esm/src/tools/topics.js +229 -0
- package/esm/src/tools/translate.d.ts +44 -0
- package/esm/src/tools/translate.d.ts.map +1 -0
- package/esm/src/tools/translate.js +112 -0
- package/esm/src/urls.d.ts +10 -0
- package/esm/src/urls.d.ts.map +1 -0
- package/esm/src/urls.js +49 -0
- package/esm/src/utils.d.ts +38 -0
- package/esm/src/utils.d.ts.map +1 -0
- package/esm/src/utils.js +175 -0
- package/package.json +32 -0
- package/script/_dnt.shims.d.ts +6 -0
- package/script/_dnt.shims.d.ts.map +1 -0
- package/script/_dnt.shims.js +65 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/index.js +43 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/checks.js +32 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts +18 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/coerce.js +57 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts +51 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/compat.js +71 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts +31 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/errors.js +84 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts +14 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/external.js +80 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts +23 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/iso.js +70 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts +32 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/parse.js +51 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts +674 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/classic/schemas.js +1161 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts +296 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/api.js +1066 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts +279 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/checks.js +596 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts +53 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/core.js +72 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts +15 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/doc.js +40 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts +211 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/errors.js +222 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts +15 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/index.js +53 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts +89 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/json-schema.js +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts +50 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/parse.js +141 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts +79 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/regexes.js +136 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts +36 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/registries.js +57 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts +1115 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/schemas.js +1995 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts +56 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/standard-schema.js +2 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts +91 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/to-json-schema.js +925 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts +198 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/util.js +657 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/core/versions.js +8 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ar.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/az.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/be.js +200 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/bg.js +166 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ca.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/cs.js +171 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/da.js +167 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/de.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/en.js +155 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/eo.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/es.js +185 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fa.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fi.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr-CA.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/fr.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/he.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/hu.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/id.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts +48 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/index.js +100 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/is.js +155 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/it.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ja.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ka.js +163 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/kh.js +11 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/km.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ko.js +157 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/lt.js +268 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/mk.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ms.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/nl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/no.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ota.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ps.js +158 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/pt.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ru.js +200 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sl.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/sv.js +154 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ta.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/th.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/tr.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts +6 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ua.js +11 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/uk.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/ur.js +153 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/vi.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/yo.js +151 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-CN.js +152 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts +5 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.d.ts.map +1 -0
- package/script/deps/jsr.io/@zod/zod/4.1.12/src/v4/locales/zh-TW.js +153 -0
- package/script/mod.d.ts +23 -0
- package/script/mod.d.ts.map +1 -0
- package/script/mod.js +38 -0
- package/script/package.json +3 -0
- package/script/src/api.d.ts +42 -0
- package/script/src/api.d.ts.map +1 -0
- package/script/src/api.js +172 -0
- package/script/src/apis/chatgptScraper/brightdata.d.ts +3 -0
- package/script/src/apis/chatgptScraper/brightdata.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/brightdata.js +208 -0
- package/script/src/apis/chatgptScraper/index.d.ts +10 -0
- package/script/src/apis/chatgptScraper/index.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/index.js +81 -0
- package/script/src/apis/chatgptScraper/oxy.d.ts +3 -0
- package/script/src/apis/chatgptScraper/oxy.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/oxy.js +192 -0
- package/script/src/apis/chatgptScraper/scraper.d.ts +46 -0
- package/script/src/apis/chatgptScraper/scraper.d.ts.map +1 -0
- package/script/src/apis/chatgptScraper/scraper.js +139 -0
- package/script/src/apis/googleAds/apiTypes.d.ts +131 -0
- package/script/src/apis/googleAds/apiTypes.d.ts.map +1 -0
- package/script/src/apis/googleAds/apiTypes.js +2 -0
- package/script/src/apis/googleAds/client.d.ts +2 -0
- package/script/src/apis/googleAds/client.d.ts.map +1 -0
- package/script/src/apis/googleAds/client.js +133 -0
- package/script/src/apis/googleAds/countryResourceMap.d.ts +2 -0
- package/script/src/apis/googleAds/countryResourceMap.d.ts.map +1 -0
- package/script/src/apis/googleAds/countryResourceMap.js +877 -0
- package/script/src/apis/googleAds/keywordPlanner.d.ts +64 -0
- package/script/src/apis/googleAds/keywordPlanner.d.ts.map +1 -0
- package/script/src/apis/googleAds/keywordPlanner.js +465 -0
- package/script/src/apis/googleAds/languageResourceMap.d.ts +2 -0
- package/script/src/apis/googleAds/languageResourceMap.d.ts.map +1 -0
- package/script/src/apis/googleAds/languageResourceMap.js +211 -0
- package/script/src/apis/hasdata/aim.d.ts +4 -0
- package/script/src/apis/hasdata/aim.d.ts.map +1 -0
- package/script/src/apis/hasdata/aim.js +36 -0
- package/script/src/apis/hasdata/aio.d.ts +4 -0
- package/script/src/apis/hasdata/aio.d.ts.map +1 -0
- package/script/src/apis/hasdata/aio.js +46 -0
- package/script/src/apis/hasdata/helpers.d.ts +55 -0
- package/script/src/apis/hasdata/helpers.d.ts.map +1 -0
- package/script/src/apis/hasdata/helpers.js +222 -0
- package/script/src/async.d.ts +29 -0
- package/script/src/async.d.ts.map +1 -0
- package/script/src/async.js +148 -0
- package/script/src/models.d.ts +18 -0
- package/script/src/models.d.ts.map +1 -0
- package/script/src/models.js +52 -0
- package/script/src/openai.d.ts +17 -0
- package/script/src/openai.d.ts.map +1 -0
- package/script/src/openai.js +175 -0
- package/script/src/schemas/brand.schema.d.ts +182 -0
- package/script/src/schemas/brand.schema.d.ts.map +1 -0
- package/script/src/schemas/brand.schema.js +52 -0
- package/script/src/schemas/entity.schema.d.ts +14 -0
- package/script/src/schemas/entity.schema.d.ts.map +1 -0
- package/script/src/schemas/entity.schema.js +11 -0
- package/script/src/schemas/funnel.schema.d.ts +94 -0
- package/script/src/schemas/funnel.schema.d.ts.map +1 -0
- package/script/src/schemas/funnel.schema.js +49 -0
- package/script/src/schemas/index.d.ts +21 -0
- package/script/src/schemas/index.d.ts.map +1 -0
- package/script/src/schemas/index.js +14 -0
- package/script/src/schemas/keyword.schema.d.ts +44 -0
- package/script/src/schemas/keyword.schema.d.ts.map +1 -0
- package/script/src/schemas/keyword.schema.js +9 -0
- package/script/src/schemas/models.schema.d.ts +6 -0
- package/script/src/schemas/models.schema.d.ts.map +1 -0
- package/script/src/schemas/models.schema.js +2 -0
- package/script/src/schemas/persona.schema.d.ts +50 -0
- package/script/src/schemas/persona.schema.d.ts.map +1 -0
- package/script/src/schemas/persona.schema.js +24 -0
- package/script/src/schemas/pipeline.schema.d.ts +146 -0
- package/script/src/schemas/pipeline.schema.d.ts.map +1 -0
- package/script/src/schemas/pipeline.schema.js +17 -0
- package/script/src/schemas/search.schema.d.ts +29 -0
- package/script/src/schemas/search.schema.d.ts.map +1 -0
- package/script/src/schemas/search.schema.js +2 -0
- package/script/src/schemas/seedKeyword.schema.d.ts +15 -0
- package/script/src/schemas/seedKeyword.schema.d.ts.map +1 -0
- package/script/src/schemas/seedKeyword.schema.js +8 -0
- package/script/src/schemas/sentiment.schema.d.ts +22 -0
- package/script/src/schemas/sentiment.schema.d.ts.map +1 -0
- package/script/src/schemas/sentiment.schema.js +12 -0
- package/script/src/schemas/sources.schema.d.ts +29 -0
- package/script/src/schemas/sources.schema.d.ts.map +1 -0
- package/script/src/schemas/sources.schema.js +2 -0
- package/script/src/schemas/topics.schema.d.ts +33 -0
- package/script/src/schemas/topics.schema.d.ts.map +1 -0
- package/script/src/schemas/topics.schema.js +17 -0
- package/script/src/tools/brands.d.ts +55 -0
- package/script/src/tools/brands.d.ts.map +1 -0
- package/script/src/tools/brands.js +470 -0
- package/script/src/tools/classifier.d.ts +17 -0
- package/script/src/tools/classifier.d.ts.map +1 -0
- package/script/src/tools/classifier.js +141 -0
- package/script/src/tools/entities.d.ts +19 -0
- package/script/src/tools/entities.d.ts.map +1 -0
- package/script/src/tools/entities.js +88 -0
- package/script/src/tools/funnel.d.ts +41 -0
- package/script/src/tools/funnel.d.ts.map +1 -0
- package/script/src/tools/funnel.js +381 -0
- package/script/src/tools/keywords.d.ts +21 -0
- package/script/src/tools/keywords.d.ts.map +1 -0
- package/script/src/tools/keywords.js +190 -0
- package/script/src/tools/personas.d.ts +3 -0
- package/script/src/tools/personas.d.ts.map +1 -0
- package/script/src/tools/personas.js +91 -0
- package/script/src/tools/scorer.d.ts +14 -0
- package/script/src/tools/scorer.d.ts.map +1 -0
- package/script/src/tools/scorer.js +59 -0
- package/script/src/tools/search.d.ts +24 -0
- package/script/src/tools/search.d.ts.map +1 -0
- package/script/src/tools/search.js +135 -0
- package/script/src/tools/seedKeywords.d.ts +68 -0
- package/script/src/tools/seedKeywords.d.ts.map +1 -0
- package/script/src/tools/seedKeywords.js +220 -0
- package/script/src/tools/sentiment.d.ts +11 -0
- package/script/src/tools/sentiment.d.ts.map +1 -0
- package/script/src/tools/sentiment.js +72 -0
- package/script/src/tools/sources.d.ts +39 -0
- package/script/src/tools/sources.d.ts.map +1 -0
- package/script/src/tools/sources.js +273 -0
- package/script/src/tools/topics.d.ts +74 -0
- package/script/src/tools/topics.d.ts.map +1 -0
- package/script/src/tools/topics.js +237 -0
- package/script/src/tools/translate.d.ts +44 -0
- package/script/src/tools/translate.d.ts.map +1 -0
- package/script/src/tools/translate.js +118 -0
- package/script/src/urls.d.ts +10 -0
- package/script/src/urls.d.ts.map +1 -0
- package/script/src/urls.js +53 -0
- package/script/src/utils.d.ts +38 -0
- package/script/src/utils.d.ts.map +1 -0
- package/script/src/utils.js +183 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { KeywordsOptions } from '../schemas/keyword.schema.js';
|
|
2
|
+
import { type KeywordsResponse } from '../schemas/keyword.schema.js';
|
|
3
|
+
import { type KeywordRecord } from '../apis/googleAds/keywordPlanner.js';
|
|
4
|
+
export interface ExpandKeywordsParams {
|
|
5
|
+
seedKeywords: Array<string | Array<string>>;
|
|
6
|
+
url?: string;
|
|
7
|
+
urlAsExpandRelevanceContext?: string;
|
|
8
|
+
language?: string;
|
|
9
|
+
countryISOCode?: string | null;
|
|
10
|
+
generateIdeasFromSeeds?: boolean;
|
|
11
|
+
/** When true, adds deduplicatedKeywords column with all keywords sharing the same metrics */
|
|
12
|
+
includeDeduplicatedKeywords?: boolean;
|
|
13
|
+
/** When true, includes seedKeywords column in output records. Defaults to false. */
|
|
14
|
+
includeSeedKeywords?: boolean;
|
|
15
|
+
/** When true, generates a separate dataset with all keywords (dedup by keyword only). Defaults to false. */
|
|
16
|
+
includeAllKeywordsDataset?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function expandKeywords({ seedKeywords, url, urlAsExpandRelevanceContext, language, countryISOCode, generateIdeasFromSeeds, includeSeedKeywords }: ExpandKeywordsParams): Promise<Array<Array<KeywordRecord>>>;
|
|
19
|
+
export declare function generateKeywords({ sector, market, brand, brandDomain, language, userLanguage, model, briefing, instructions, keywords, brands, personas, funnel }: KeywordsOptions): Promise<KeywordsResponse>;
|
|
20
|
+
export * from '../schemas/keyword.schema.js';
|
|
21
|
+
//# sourceMappingURL=keywords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../../src/src/tools/keywords.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE7F,OAAO,EAAoC,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAE3G,MAAM,WAAW,oBAAoB;IACpC,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,6FAA6F;IAC7F,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,4GAA4G;IAC5G,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,wBAAsB,cAAc,CAAC,EACpC,YAAY,EACZ,GAAG,EACH,2BAA2B,EAC3B,QAAe,EACf,cAAc,EACd,sBAA8B,EAC9B,mBAA2B,EAC3B,EAAE,oBAAoB,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAsC7D;AAiGD,wBAAsB,gBAAgB,CAAC,EACtC,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACX,QAAoB,EACpB,YAAmB,EACnB,KAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,QAAe,EACf,MAAa,EACb,QAAe,EACf,MAAa,EACb,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8D7C;AAED,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { mapParallel } from '../async.js';
|
|
2
|
+
import { askOpenAISafe } from '../openai.js';
|
|
3
|
+
import { buildBrandContext } from './brands.js';
|
|
4
|
+
import { KeywordsResponseSchema } from '../schemas/keyword.schema.js';
|
|
5
|
+
import { dedent } from '../utils.js';
|
|
6
|
+
import { keywords as getGoogleAdsKeywords } from '../apis/googleAds/keywordPlanner.js';
|
|
7
|
+
export async function expandKeywords({ seedKeywords, url, urlAsExpandRelevanceContext, language = 'EN', countryISOCode, generateIdeasFromSeeds = false, includeSeedKeywords = false }) {
|
|
8
|
+
url = url?.trim();
|
|
9
|
+
language = language?.trim();
|
|
10
|
+
countryISOCode = countryISOCode?.trim();
|
|
11
|
+
const expandedKeywords = [];
|
|
12
|
+
const keywordIdeasPromise = mapParallel(seedKeywords, 2, async (keyword) => {
|
|
13
|
+
const keywordData = await getGoogleAdsKeywords({
|
|
14
|
+
keywords: Array.isArray(keyword) ? keyword : [keyword],
|
|
15
|
+
ideas: generateIdeasFromSeeds, // Configurable: get data for seed keywords OR generate ideas
|
|
16
|
+
language,
|
|
17
|
+
countryISOCode,
|
|
18
|
+
url: generateIdeasFromSeeds != null ? urlAsExpandRelevanceContext : undefined,
|
|
19
|
+
includeSeedKeywords
|
|
20
|
+
});
|
|
21
|
+
expandedKeywords.push(keywordData);
|
|
22
|
+
});
|
|
23
|
+
const urlIdeasPromise = url
|
|
24
|
+
? getGoogleAdsKeywords({
|
|
25
|
+
url,
|
|
26
|
+
wholeSite: true,
|
|
27
|
+
ideas: true, // Generate keyword ideas from URL
|
|
28
|
+
maxIdeas: 10000,
|
|
29
|
+
language,
|
|
30
|
+
countryISOCode,
|
|
31
|
+
includeSeedKeywords
|
|
32
|
+
}).then(ideas => expandedKeywords.push(ideas))
|
|
33
|
+
: Promise.resolve([]);
|
|
34
|
+
await Promise.all([keywordIdeasPromise, urlIdeasPromise]);
|
|
35
|
+
return expandedKeywords;
|
|
36
|
+
}
|
|
37
|
+
const GENERATE_KEYWORDS_PROMPT = dedent(`
|
|
38
|
+
You're a keyword research expert helping a brand in the {sector} sector targeting the {market} market.
|
|
39
|
+
|
|
40
|
+
For context, the brand being analyzed is{brand_context}. Use this brand as context to better understand
|
|
41
|
+
the specific niche, positioning, and target audience within the {sector} sector.
|
|
42
|
+
|
|
43
|
+
{brandsInfo}
|
|
44
|
+
|
|
45
|
+
{personasInfo}
|
|
46
|
+
|
|
47
|
+
{funnelInfo}
|
|
48
|
+
|
|
49
|
+
# Your Task
|
|
50
|
+
|
|
51
|
+
You must follow the user's instructions below. The instructions will tell you EXACTLY what to do with keywords.
|
|
52
|
+
|
|
53
|
+
**CRITICAL**: Only generate new keywords if the instructions EXPLICITLY ask you to generate, add, create,
|
|
54
|
+
or suggest keywords. If the instructions ask for something else (like analysis, filtering, removing, or
|
|
55
|
+
any other operation), do NOT generate new keywords - instead, perform only what is requested.
|
|
56
|
+
|
|
57
|
+
If you are asked to generate keywords, they should be:
|
|
58
|
+
- Broad enough (1-3 words typically) for Google Keyword Planner seed expansion
|
|
59
|
+
- Natural search queries that real users would type
|
|
60
|
+
- Mix of informational and transactional intent
|
|
61
|
+
- Focused on the sector and market context
|
|
62
|
+
- Consider the customer personas and their search behaviors if provided
|
|
63
|
+
- Cover different funnel stages if funnel information is provided
|
|
64
|
+
- Do NOT include brand names{brand_exclusion}
|
|
65
|
+
|
|
66
|
+
IMPORTANT: Any "keywordSeeds" fields you see in the brands, personas, or funnel data above are for REFERENCE ONLY
|
|
67
|
+
to help you understand the context - they are managed separately and you should NOT include them in your output.
|
|
68
|
+
|
|
69
|
+
Return keywords as a list of strings in language {language}.
|
|
70
|
+
|
|
71
|
+
Make sure your answer is in the language "{userLanguage}" except the keywords themselves, which should
|
|
72
|
+
maintain the original language {language}.
|
|
73
|
+
|
|
74
|
+
Also provide an "explanation" field with a brief summary (2-3 sentences) explaining what you did
|
|
75
|
+
based on the instructions.
|
|
76
|
+
|
|
77
|
+
# User Instructions
|
|
78
|
+
|
|
79
|
+
{instructions}
|
|
80
|
+
|
|
81
|
+
{currentKeywordsInfo}
|
|
82
|
+
`);
|
|
83
|
+
const CURRENT_KEYWORDS_CLAUSE = dedent(`
|
|
84
|
+
# Current Custom Keywords
|
|
85
|
+
|
|
86
|
+
The following is the current list of custom keywords the user has.
|
|
87
|
+
|
|
88
|
+
{currentData}
|
|
89
|
+
|
|
90
|
+
**CRITICAL**: Unless the instructions EXPLICITLY ask you to generate, add, create, or suggest NEW keywords,
|
|
91
|
+
you MUST return EXACTLY the same keywords that are in the current data (possibly modified per instructions
|
|
92
|
+
like filtering or removing). Do NOT automatically generate new keywords - only do so if explicitly requested.
|
|
93
|
+
`);
|
|
94
|
+
const BRANDS_CLAUSE = dedent(`
|
|
95
|
+
# Brands Information (Reference Only)
|
|
96
|
+
|
|
97
|
+
The following brands (including competitors) are relevant to this analysis:
|
|
98
|
+
|
|
99
|
+
{brandsData}
|
|
100
|
+
|
|
101
|
+
Use this information to understand the competitive landscape and generate custom keywords that could help
|
|
102
|
+
the brand compete effectively. Consider the products, services, and market positions of these brands.
|
|
103
|
+
NOTE: Any "keywordSeeds" in the portfolio items are for reference only - do not include them directly in your output.
|
|
104
|
+
`);
|
|
105
|
+
const PERSONAS_CLAUSE = dedent(`
|
|
106
|
+
# Customer Personas (Reference Only)
|
|
107
|
+
|
|
108
|
+
The following customer personas represent the target audience:
|
|
109
|
+
|
|
110
|
+
{personasData}
|
|
111
|
+
|
|
112
|
+
Generate custom keywords that these personas would naturally search for based on their characteristics,
|
|
113
|
+
needs, and behaviors. Consider their language, expertise level, and search intent.
|
|
114
|
+
NOTE: Any "keywordSeeds" in the personas are for reference only - do not include them directly in your output.
|
|
115
|
+
`);
|
|
116
|
+
const FUNNEL_CLAUSE = dedent(`
|
|
117
|
+
# Marketing Funnel (Reference Only)
|
|
118
|
+
|
|
119
|
+
The following marketing funnel defines the customer journey stages:
|
|
120
|
+
|
|
121
|
+
{funnelData}
|
|
122
|
+
|
|
123
|
+
Generate custom keywords that cover different stages of this funnel, from awareness to conversion.
|
|
124
|
+
Consider the goals and categories at each stage to ensure comprehensive keyword coverage.
|
|
125
|
+
NOTE: Any "keywordSeeds" in the funnel categories are for reference only - do not include them directly in your output.
|
|
126
|
+
`);
|
|
127
|
+
export async function generateKeywords({ sector, market, brand, brandDomain, language = 'english', userLanguage = null, model = 'gpt-4.1', briefing, instructions, keywords = null, brands = null, personas = null, funnel = null }) {
|
|
128
|
+
if (!brand && !brandDomain) {
|
|
129
|
+
throw new Error('Either brand or brandDomain must be provided');
|
|
130
|
+
}
|
|
131
|
+
const brandContext = buildBrandContext({
|
|
132
|
+
brand,
|
|
133
|
+
brandDomain,
|
|
134
|
+
sector,
|
|
135
|
+
market,
|
|
136
|
+
briefing
|
|
137
|
+
});
|
|
138
|
+
let brandExclusion;
|
|
139
|
+
if (brandDomain) {
|
|
140
|
+
if (brand) {
|
|
141
|
+
brandExclusion = ` "${brand}" or the domain`;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
brandExclusion = ' or domain';
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
brandExclusion = ` "${brand}"`;
|
|
149
|
+
}
|
|
150
|
+
const currentData = keywords && keywords.length > 0 ? CURRENT_KEYWORDS_CLAUSE.replace('{currentData}', JSON.stringify({ keywords }, null, 2)) : null;
|
|
151
|
+
const brandsInfo = brands && brands.length > 0 ? BRANDS_CLAUSE.replace('{brandsData}', JSON.stringify(brands, null, 2)) : null;
|
|
152
|
+
const personasInfo = personas && personas.length > 0 ? PERSONAS_CLAUSE.replace('{personasData}', JSON.stringify(personas, null, 2)) : null;
|
|
153
|
+
const funnelInfo = funnel != null ? FUNNEL_CLAUSE.replace('{funnelData}', JSON.stringify(funnel, null, 2)) : null;
|
|
154
|
+
const content = GENERATE_KEYWORDS_PROMPT
|
|
155
|
+
.replaceAll('{sector}', sector)
|
|
156
|
+
.replaceAll('{market}', market)
|
|
157
|
+
.replaceAll('{brand_context}', brandContext)
|
|
158
|
+
.replaceAll('{brand_exclusion}', brandExclusion)
|
|
159
|
+
.replaceAll('{language}', language)
|
|
160
|
+
.replaceAll('{userLanguage}', userLanguage ?? language)
|
|
161
|
+
.replaceAll('{instructions}', instructions || '')
|
|
162
|
+
.replaceAll('{currentKeywordsInfo}', currentData || '')
|
|
163
|
+
.replaceAll('{brandsInfo}', brandsInfo || '')
|
|
164
|
+
.replaceAll('{personasInfo}', personasInfo || '')
|
|
165
|
+
.replaceAll('{funnelInfo}', funnelInfo || '');
|
|
166
|
+
const { parsed } = await askOpenAISafe(content, model, KeywordsResponseSchema);
|
|
167
|
+
if (!parsed) {
|
|
168
|
+
throw new Error('Failed to parse response from OpenAI');
|
|
169
|
+
}
|
|
170
|
+
return parsed;
|
|
171
|
+
}
|
|
172
|
+
export * from '../schemas/keyword.schema.js';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PersonasOptions, PersonasResponse } from '../schemas/persona.schema.js';
|
|
2
|
+
export declare function generatePersonas({ sector, market, brand, brandDomain, language, userLanguage, count, model, briefing, instructions, personas }: PersonasOptions): Promise<PersonasResponse>;
|
|
3
|
+
//# sourceMappingURL=personas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"personas.d.ts","sourceRoot":"","sources":["../../../src/src/tools/personas.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAkDtF,wBAAsB,gBAAgB,CAAC,EACtC,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACX,QAAoB,EACpB,YAAmB,EACnB,KAAS,EACT,KAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,QAAe,EACf,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4C7C"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { askOpenAISafe } from '../openai.js';
|
|
2
|
+
import { buildBrandContext } from './brands.js';
|
|
3
|
+
import { PersonasResponseSchema } from '../schemas/persona.schema.js';
|
|
4
|
+
import { dedent } from '../utils.js';
|
|
5
|
+
const PROMPT = dedent(`
|
|
6
|
+
You're a marketing expert identifying typical profiles/personas of people searching
|
|
7
|
+
for brands, products or services. Generate {count} detailed customer personas for a brand
|
|
8
|
+
in the {sector} sector targeting the {market} market.
|
|
9
|
+
|
|
10
|
+
For context, the brand being analyzed is{brand_context}. Use this brand as context to better understand
|
|
11
|
+
the specific niche, positioning, and target audience within the {sector} sector. However, you MUST NOT
|
|
12
|
+
mention the brand name{brand_exclusion} anywhere in the persona names or descriptions. The personas should be
|
|
13
|
+
generic profiles that could apply to similar brands in the same space.
|
|
14
|
+
|
|
15
|
+
Each persona should include:
|
|
16
|
+
- name: A short and catchy name, such as "Tech-Savvy Creative Director", "Gaming Industry Veteran",
|
|
17
|
+
"Eco-Conscious Millennial", "Budget-Conscious Family Planner", or "Luxury Lifestyle Enthusiast".
|
|
18
|
+
- description: A brief description of the persona's characteristics, needs, and behaviors.
|
|
19
|
+
- keywordSeeds: A list of 5-10 keyword seed phrases in language {language} that this persona would typically search for
|
|
20
|
+
when looking for products/services in this space. These should be realistic search queries that
|
|
21
|
+
reflect the persona's language ({language}), intent, and level of expertise. Include a mix of informational
|
|
22
|
+
and transactional queries. Keywords should be broad (1-3 words) suitable for Google Keyword Planner
|
|
23
|
+
seed expansion. Do NOT include the brand name {brand_exclusion} in these keywords.
|
|
24
|
+
|
|
25
|
+
Make sure you're answer is in the language "{userLanguage} except keywordSeeds, that should maintain the original language {language}".
|
|
26
|
+
|
|
27
|
+
Return the personas as a list of JSON objects.
|
|
28
|
+
|
|
29
|
+
Also provide an "explanation" field with a brief summary (2-3 sentences) explaining the reasoning behind
|
|
30
|
+
the personas you generated: why these profiles are relevant for this sector and market, and what key
|
|
31
|
+
customer segments they represent.
|
|
32
|
+
|
|
33
|
+
{instructions}
|
|
34
|
+
|
|
35
|
+
{currentPersonasInfo}
|
|
36
|
+
`);
|
|
37
|
+
const CURRENT_DATA_CLAUSE = dedent(`
|
|
38
|
+
# Current Personas Information
|
|
39
|
+
|
|
40
|
+
The following is the current information the user has about personas for the brand(s).
|
|
41
|
+
|
|
42
|
+
{currentData}
|
|
43
|
+
|
|
44
|
+
IMPORTANT: Unless the instructions explicitly specify to modify, replace, add, or remove competitors
|
|
45
|
+
from this list, you MUST return at least all the same competitors that are already present in the
|
|
46
|
+
current data. If no modification instructions are provided, maintain the existing list and only add
|
|
47
|
+
new competitors if they are relevant.
|
|
48
|
+
`);
|
|
49
|
+
export async function generatePersonas({ sector, market, brand, brandDomain, language = 'english', userLanguage = null, count = 5, model = 'gpt-4.1', briefing, instructions, personas = null }) {
|
|
50
|
+
if (!brand && !brandDomain) {
|
|
51
|
+
throw new Error('Either brand or brandDomain must be provided');
|
|
52
|
+
}
|
|
53
|
+
const brandContext = buildBrandContext({
|
|
54
|
+
brand,
|
|
55
|
+
brandDomain,
|
|
56
|
+
sector,
|
|
57
|
+
market,
|
|
58
|
+
briefing
|
|
59
|
+
});
|
|
60
|
+
let brandExclusion;
|
|
61
|
+
if (brandDomain) {
|
|
62
|
+
if (brand) {
|
|
63
|
+
brandExclusion = ` "${brand}" or the domain`;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
brandExclusion = ' or domain';
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
brandExclusion = ` "${brand}"`;
|
|
71
|
+
}
|
|
72
|
+
const currentData = personas && personas.length > 0 ? CURRENT_DATA_CLAUSE.replace('{currentData}', JSON.stringify({ personas }, null, 2)) : null;
|
|
73
|
+
const content = PROMPT
|
|
74
|
+
.replace('{count}', count.toString())
|
|
75
|
+
.replaceAll('{sector}', sector)
|
|
76
|
+
.replaceAll('{market}', market)
|
|
77
|
+
.replaceAll('{brand_context}', brandContext)
|
|
78
|
+
.replaceAll('{brand_exclusion}', brandExclusion)
|
|
79
|
+
.replaceAll('{language}', language)
|
|
80
|
+
.replaceAll('{userLanguage}', userLanguage ?? language)
|
|
81
|
+
.replaceAll('{instructions}', instructions || '')
|
|
82
|
+
.replaceAll('{currentPersonasInfo}', currentData || '');
|
|
83
|
+
const { parsed } = await askOpenAISafe(content, model, PersonasResponseSchema);
|
|
84
|
+
if (!parsed) {
|
|
85
|
+
throw new Error('Failed to parse response from OpenAI');
|
|
86
|
+
}
|
|
87
|
+
return parsed;
|
|
88
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from '../../deps/jsr.io/@zod/zod/4.1.12/src/index.js';
|
|
2
|
+
export type ScoreSchema = z.ZodObject<{
|
|
3
|
+
value: z.ZodNumber;
|
|
4
|
+
}>;
|
|
5
|
+
/**
|
|
6
|
+
* Dynamically create a Zod schema for a score based on provided parameters.
|
|
7
|
+
*/
|
|
8
|
+
export declare function makeScoreSchema(type: 'integer' | 'number', min: number, max: number, description: string): ScoreSchema;
|
|
9
|
+
/**
|
|
10
|
+
* Assumes only remaining placeholder in prompt is {record}
|
|
11
|
+
*/
|
|
12
|
+
export declare function score(record: Record<string, unknown>, prompt: string, schema: ScoreSchema, model?: string): Promise<number>;
|
|
13
|
+
export declare function scoreBatch(records: Array<Record<string, unknown>>, name: string, description: string, type: 'integer' | 'number', min: number, max: number, model?: string, maxConcurrency?: number): Promise<Array<number>>;
|
|
14
|
+
//# sourceMappingURL=scorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../../src/src/tools/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,gDAAgD,CAAC;AAqBnE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,CAAC,CAAC,SAAS,CAAA;CAAE,CAAC,CAAC;AAE9D;;GAEG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,SAAS,GAAG,QAAQ,EAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,GACjB,WAAW,CAWb;AAED;;GAEG;AACH,wBAAsB,KAAK,CAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,KAAK,GAAE,MAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAajB;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,GAAG,QAAQ,EAC1B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,GAAE,MAAuB,EAC9B,cAAc,GAAE,MAAY,GAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAcxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from '../../deps/jsr.io/@zod/zod/4.1.12/src/index.js';
|
|
2
|
+
import { mapParallel } from '../async.js';
|
|
3
|
+
import { askOpenAISafe } from '../openai.js';
|
|
4
|
+
import { dedent } from '../utils.js';
|
|
5
|
+
const PROMPT = dedent(`
|
|
6
|
+
# Instructions
|
|
7
|
+
|
|
8
|
+
Assign a {name} ({type} score between {min} and {max}) to the data record below.
|
|
9
|
+
|
|
10
|
+
Score description: {description}
|
|
11
|
+
|
|
12
|
+
Make sure to consider all the attributes of the data record, and assign the score
|
|
13
|
+
based on the content of the attributes.
|
|
14
|
+
|
|
15
|
+
# Data Record
|
|
16
|
+
|
|
17
|
+
{record}
|
|
18
|
+
`);
|
|
19
|
+
/**
|
|
20
|
+
* Dynamically create a Zod schema for a score based on provided parameters.
|
|
21
|
+
*/
|
|
22
|
+
export function makeScoreSchema(type, min, max, description) {
|
|
23
|
+
let schema;
|
|
24
|
+
if (type === 'integer') {
|
|
25
|
+
schema = z.number().int().min(min).max(max).describe(description);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
schema = z.number().min(min).max(max).describe(description);
|
|
29
|
+
}
|
|
30
|
+
return z.object({
|
|
31
|
+
value: schema
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Assumes only remaining placeholder in prompt is {record}
|
|
36
|
+
*/
|
|
37
|
+
export async function score(record, prompt, schema, model = 'gpt-4.1-mini') {
|
|
38
|
+
const renderedPrompt = prompt.replace('record', JSON.stringify(record, null, 2));
|
|
39
|
+
const response = await askOpenAISafe(renderedPrompt, model, schema);
|
|
40
|
+
if (response.parsed == null) {
|
|
41
|
+
throw new Error('Failed to parse score from OpenAI response');
|
|
42
|
+
}
|
|
43
|
+
return response.parsed.value;
|
|
44
|
+
}
|
|
45
|
+
export async function scoreBatch(records, name, description, type, min, max, model = 'gpt-4.1-mini', maxConcurrency = 100) {
|
|
46
|
+
const schema = makeScoreSchema(type, min, max, description);
|
|
47
|
+
const prompt = PROMPT
|
|
48
|
+
.replace('{name}', name)
|
|
49
|
+
.replace('{type}', type)
|
|
50
|
+
.replace('{min}', min.toString())
|
|
51
|
+
.replace('{max}', max.toString())
|
|
52
|
+
.replace('{description}', description);
|
|
53
|
+
return mapParallel(records, maxConcurrency, (record) => score(record, prompt, schema, model));
|
|
54
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BatchSearchOptions, FormattedSearchOptions, SearchOptions, SearchResult } from '../schemas/search.schema.js';
|
|
2
|
+
export type { SearchResult } from '../schemas/search.schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Call OpenAI Responses API with Web Search enabled (async).
|
|
5
|
+
*
|
|
6
|
+
* API Docs:
|
|
7
|
+
* - https://platform.openai.com/docs/guides/tools-web-search?api-mode=responses
|
|
8
|
+
*/
|
|
9
|
+
export declare function searchOpenAI({ prompt, model, useSearch, countryISOCode, contextSize, reasoningEffort, searchTool }: SearchOptions): Promise<SearchResult>;
|
|
10
|
+
/**
|
|
11
|
+
* Perform a web search using searchOpenAI and return structured response.
|
|
12
|
+
* The OpenAI API doesn't currently allow both web search tool and response format in the same call.
|
|
13
|
+
*
|
|
14
|
+
* This function:
|
|
15
|
+
* 1. Performs a web search using searchOpenAI
|
|
16
|
+
* 2. Formats the search results using a template
|
|
17
|
+
* 3. Sends the formatted results to OpenAI with a Zod schema to extract structured information
|
|
18
|
+
*/
|
|
19
|
+
export declare function searchWithFormat<T>({ prompt, model, responseSchema, useSearch, countryISOCode, contextSize, reasoningEffort }: FormattedSearchOptions<T>): Promise<T>;
|
|
20
|
+
/**
|
|
21
|
+
* Performs web search for multiple prompts concurrently while preserving order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function searchBatch({ prompts, model, useSearch, countryISOCode, contextSize, reasoningEffort, maxConcurrency }: BatchSearchOptions): Promise<Array<SearchResult>>;
|
|
24
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/src/tools/search.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAK3H,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,EAClC,MAAM,EACN,KAAsB,EACtB,SAAgB,EAChB,cAAqB,EACrB,WAAmB,EACnB,eAAuB,EACvB,UAAyB,EACzB,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAqBvC;AAqED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,EACzC,MAAM,EACN,KAAK,EACL,cAAc,EACd,SAAgB,EAChB,cAAqB,EACrB,WAAsB,EACtB,eAAuB,EACvB,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA0BxC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAC3B,OAAO,EACP,KAAsB,EACtB,SAAgB,EAChB,cAAqB,EACrB,WAAsB,EACtB,eAAuB,EACvB,cAAoB,EACpB,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAanD"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { mapParallel } from '../async.js';
|
|
2
|
+
import { askOpenAISafe } from '../openai.js';
|
|
3
|
+
import { extractDomain } from '../urls.js';
|
|
4
|
+
import { dedent } from '../utils.js';
|
|
5
|
+
/**
|
|
6
|
+
* Call OpenAI Responses API with Web Search enabled (async).
|
|
7
|
+
*
|
|
8
|
+
* API Docs:
|
|
9
|
+
* - https://platform.openai.com/docs/guides/tools-web-search?api-mode=responses
|
|
10
|
+
*/
|
|
11
|
+
export async function searchOpenAI({ prompt, model = 'gpt-4.1-mini', useSearch = true, countryISOCode = null, contextSize = 'low', reasoningEffort = 'low', searchTool = 'web_search' }) {
|
|
12
|
+
const params = {};
|
|
13
|
+
if (model.includes('-5')) {
|
|
14
|
+
params.reasoning = { effort: reasoningEffort };
|
|
15
|
+
}
|
|
16
|
+
if (useSearch) {
|
|
17
|
+
params.tools = [{
|
|
18
|
+
type: searchTool,
|
|
19
|
+
search_context_size: contextSize,
|
|
20
|
+
...(countryISOCode ? { user_location: { type: 'approximate', country: countryISOCode } } : {})
|
|
21
|
+
}];
|
|
22
|
+
params.tool_choice = 'required';
|
|
23
|
+
}
|
|
24
|
+
const { output } = await askOpenAISafe(prompt, model, undefined, params);
|
|
25
|
+
if (!output) {
|
|
26
|
+
throw new Error('No output from OpenAI');
|
|
27
|
+
}
|
|
28
|
+
return validateOpenAI(output);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Convert a raw web search response into a SearchResult instance.
|
|
32
|
+
*/
|
|
33
|
+
function validateOpenAI(response) {
|
|
34
|
+
let answer = '';
|
|
35
|
+
let sources = [];
|
|
36
|
+
// Filter out reasoning elements and find relevant elements
|
|
37
|
+
const relevantElements = response.filter(item => item.type !== 'reasoning');
|
|
38
|
+
const messageElement = relevantElements.find(item => item.type === 'message');
|
|
39
|
+
const hasWebSearch = relevantElements.some(item => item.type === 'web_search_call');
|
|
40
|
+
if (!messageElement) {
|
|
41
|
+
throw new Error('No message element found in response');
|
|
42
|
+
}
|
|
43
|
+
if (messageElement.type !== 'message') {
|
|
44
|
+
throw new Error('Message element must be of type "message"');
|
|
45
|
+
}
|
|
46
|
+
const content = messageElement.content?.[0];
|
|
47
|
+
if (!content) {
|
|
48
|
+
throw new Error('Message element has no content');
|
|
49
|
+
}
|
|
50
|
+
if (content.type !== 'output_text') {
|
|
51
|
+
throw new Error(`Content must be of type "output_text", got "${content.type}"`);
|
|
52
|
+
}
|
|
53
|
+
answer = content.text;
|
|
54
|
+
// Extract sources from annotations if web search was used
|
|
55
|
+
if (hasWebSearch && content.annotations) {
|
|
56
|
+
sources = content.annotations
|
|
57
|
+
.filter(ann => ann.type === 'url_citation')
|
|
58
|
+
.map(ann => ({
|
|
59
|
+
title: ann.title,
|
|
60
|
+
url: ann.url,
|
|
61
|
+
domain: extractDomain(ann.url)
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
answer,
|
|
66
|
+
sources
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const FORMATTED_SEARCH_PROMPT = dedent(`
|
|
70
|
+
Based on the following search results, please format the information according
|
|
71
|
+
to the requested structure:
|
|
72
|
+
|
|
73
|
+
# Search Query
|
|
74
|
+
|
|
75
|
+
{prompt}
|
|
76
|
+
|
|
77
|
+
# Search Results
|
|
78
|
+
|
|
79
|
+
{answer}
|
|
80
|
+
|
|
81
|
+
# Sources
|
|
82
|
+
|
|
83
|
+
{sources}
|
|
84
|
+
|
|
85
|
+
Please extract and format the relevant information from these search results as a JSON object.
|
|
86
|
+
`);
|
|
87
|
+
/**
|
|
88
|
+
* Perform a web search using searchOpenAI and return structured response.
|
|
89
|
+
* The OpenAI API doesn't currently allow both web search tool and response format in the same call.
|
|
90
|
+
*
|
|
91
|
+
* This function:
|
|
92
|
+
* 1. Performs a web search using searchOpenAI
|
|
93
|
+
* 2. Formats the search results using a template
|
|
94
|
+
* 3. Sends the formatted results to OpenAI with a Zod schema to extract structured information
|
|
95
|
+
*/
|
|
96
|
+
export async function searchWithFormat({ prompt, model, responseSchema, useSearch = true, countryISOCode = null, contextSize = 'medium', reasoningEffort = 'low' }) {
|
|
97
|
+
const searchResult = await searchOpenAI({
|
|
98
|
+
prompt,
|
|
99
|
+
model,
|
|
100
|
+
useSearch,
|
|
101
|
+
countryISOCode,
|
|
102
|
+
contextSize,
|
|
103
|
+
reasoningEffort
|
|
104
|
+
});
|
|
105
|
+
const sources = searchResult.sources
|
|
106
|
+
.map((source) => `- ${source.title}: ${source.url}`)
|
|
107
|
+
.join('\n');
|
|
108
|
+
const formattedPrompt = FORMATTED_SEARCH_PROMPT
|
|
109
|
+
.replace('{prompt}', prompt)
|
|
110
|
+
.replace('{answer}', searchResult.answer)
|
|
111
|
+
.replace('{sources}', sources);
|
|
112
|
+
const { parsed } = await askOpenAISafe(formattedPrompt, 'gpt-4.1-mini', responseSchema);
|
|
113
|
+
if (!parsed) {
|
|
114
|
+
throw new Error('Failed to parse structured response from OpenAI');
|
|
115
|
+
}
|
|
116
|
+
return parsed;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Performs web search for multiple prompts concurrently while preserving order.
|
|
120
|
+
*/
|
|
121
|
+
export function searchBatch({ prompts, model = 'gpt-4.1-mini', useSearch = true, countryISOCode = null, contextSize = 'medium', reasoningEffort = 'low', maxConcurrency = 100 }) {
|
|
122
|
+
return mapParallel(prompts, maxConcurrency, prompt => searchOpenAI({
|
|
123
|
+
prompt,
|
|
124
|
+
model,
|
|
125
|
+
useSearch,
|
|
126
|
+
countryISOCode: countryISOCode,
|
|
127
|
+
contextSize: contextSize,
|
|
128
|
+
reasoningEffort: reasoningEffort
|
|
129
|
+
}));
|
|
130
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seed Keyword Functions
|
|
3
|
+
*
|
|
4
|
+
* Pure functions for collecting and grouping seed keywords.
|
|
5
|
+
* No external dependencies - safe to import in both frontend and backend.
|
|
6
|
+
*/
|
|
7
|
+
export type { SeedKeyword, SeedKeywordSource } from '../schemas/seedKeyword.schema.js';
|
|
8
|
+
import type { SeedKeyword } from '../schemas/seedKeyword.schema.js';
|
|
9
|
+
interface PortfolioItemLike {
|
|
10
|
+
name: string;
|
|
11
|
+
keywordSeeds?: Array<string>;
|
|
12
|
+
}
|
|
13
|
+
interface PersonaLike {
|
|
14
|
+
name: string;
|
|
15
|
+
keywordSeeds?: Array<string>;
|
|
16
|
+
}
|
|
17
|
+
interface FunnelCategoryLike {
|
|
18
|
+
name: string;
|
|
19
|
+
keywordSeeds?: Array<string>;
|
|
20
|
+
}
|
|
21
|
+
interface FunnelStageLike {
|
|
22
|
+
stage: string;
|
|
23
|
+
categories?: Array<FunnelCategoryLike>;
|
|
24
|
+
}
|
|
25
|
+
interface CompetitorLike {
|
|
26
|
+
name: string;
|
|
27
|
+
portfolio?: Array<PortfolioItemLike>;
|
|
28
|
+
}
|
|
29
|
+
export interface CollectSeedKeywordsParams {
|
|
30
|
+
brandPortfolio?: Array<PortfolioItemLike>;
|
|
31
|
+
personas?: Array<PersonaLike>;
|
|
32
|
+
funnelStages?: Array<FunnelStageLike>;
|
|
33
|
+
competitors?: Array<CompetitorLike>;
|
|
34
|
+
customKeywords?: Array<string>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Collects seed keywords from all sources and creates SeedKeyword objects
|
|
38
|
+
* with proper metadata (id, source, sourceId, sourceName).
|
|
39
|
+
*/
|
|
40
|
+
export declare function collectSeedKeywords({ brandPortfolio, personas, funnelStages, competitors, customKeywords }: CollectSeedKeywordsParams): Array<SeedKeyword>;
|
|
41
|
+
/**
|
|
42
|
+
* Groups seed keywords by their source, maintaining order within each source.
|
|
43
|
+
* Keywords from the same portfolio item, competitor product, or funnel category
|
|
44
|
+
* are grouped together.
|
|
45
|
+
*
|
|
46
|
+
* @param seedKeywords - Flat array of seed keywords
|
|
47
|
+
* @param generateIdeasFromSeeds - When true, returns grouped keywords for idea generation.
|
|
48
|
+
* When false, returns all keywords flattened into a single group.
|
|
49
|
+
* @returns Array of grouped keywords (arrays for same-source groups, single items for personas/custom)
|
|
50
|
+
*/
|
|
51
|
+
export declare function groupSeedKeywords(seedKeywords: Array<SeedKeyword>, generateIdeasFromSeeds?: boolean): Array<Array<SeedKeyword> | SeedKeyword>;
|
|
52
|
+
/**
|
|
53
|
+
* Groups seed keywords and extracts just the keyword strings.
|
|
54
|
+
* Convenience wrapper around groupSeedKeywords for cases where
|
|
55
|
+
* only the keyword text is needed (not the full metadata).
|
|
56
|
+
*/
|
|
57
|
+
export declare function groupKeywordStrings(seedKeywords: Array<SeedKeyword>, generateIdeasFromSeeds?: boolean): Array<Array<string> | string>;
|
|
58
|
+
/**
|
|
59
|
+
* Collects and groups seed keywords in one step, returning only keyword strings.
|
|
60
|
+
* This is a convenience function for pipelines that need grouped keyword strings
|
|
61
|
+
* without the full SeedKeyword metadata.
|
|
62
|
+
*
|
|
63
|
+
* @param params - Same parameters as collectSeedKeywords
|
|
64
|
+
* @param generateIdeasFromSeeds - When true, returns grouped keywords. When false, returns flat.
|
|
65
|
+
* @returns Grouped keyword strings (arrays for same-source groups, single strings otherwise)
|
|
66
|
+
*/
|
|
67
|
+
export declare function collectAndGroupKeywordStrings(params: CollectSeedKeywordsParams, generateIdeasFromSeeds?: boolean): Array<Array<string> | string>;
|
|
68
|
+
//# sourceMappingURL=seedKeywords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seedKeywords.d.ts","sourceRoot":"","sources":["../../../src/src/tools/seedKeywords.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAGvF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAOpE,UAAU,iBAAiB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,UAAU,WAAW;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,UAAU,eAAe;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;CACvC;AAED,UAAU,cAAc;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CACrC;AAMD,MAAM,WAAW,yBAAyB;IACzC,cAAc,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,QAAQ,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IACtC,WAAW,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EACnC,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,cAAc,EACd,EAAE,yBAAyB,GAAG,KAAK,CAAC,WAAW,CAAC,CA+EhD;AAcD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAChC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,EAChC,sBAAsB,GAAE,OAAc,GACpC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,CA8FzC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAClC,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC,EAChC,sBAAsB,GAAE,OAAc,GACpC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAS/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,yBAAyB,EACjC,sBAAsB,GAAE,OAAc,GACpC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAG/B"}
|