@whittlelabs/sifter 0.28.1 → 0.30.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 +25 -5
- package/bin.js +2016 -26
- package/bin.js.map +4 -4
- package/package.json +1 -1
package/bin.js
CHANGED
|
@@ -11604,6 +11604,120 @@ var require_version_check = __commonJS({
|
|
|
11604
11604
|
}
|
|
11605
11605
|
});
|
|
11606
11606
|
|
|
11607
|
+
// ../../packages/shuttle/dist/branding/environment.js
|
|
11608
|
+
var require_environment = __commonJS({
|
|
11609
|
+
"../../packages/shuttle/dist/branding/environment.js"(exports2) {
|
|
11610
|
+
"use strict";
|
|
11611
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
11612
|
+
exports2.resolveEnvironment = resolveEnvironment;
|
|
11613
|
+
exports2.applyEnvironment = applyEnvironment;
|
|
11614
|
+
exports2.isWorthReporting = isWorthReporting;
|
|
11615
|
+
exports2.renderEnvironmentReport = renderEnvironmentReport;
|
|
11616
|
+
exports2.renderVerificationLine = renderVerificationLine;
|
|
11617
|
+
exports2.environmentReportJson = environmentReportJson;
|
|
11618
|
+
exports2.verificationJson = verificationJson;
|
|
11619
|
+
exports2.hostOf = hostOf;
|
|
11620
|
+
function resolveEnvironment(brand, profile, overrides = {}) {
|
|
11621
|
+
const table = brand.environments ?? {};
|
|
11622
|
+
const known = Object.keys(table).sort();
|
|
11623
|
+
const matched = Object.prototype.hasOwnProperty.call(table, profile) ? profile : null;
|
|
11624
|
+
const entry = matched === null ? void 0 : table[matched];
|
|
11625
|
+
return {
|
|
11626
|
+
profile,
|
|
11627
|
+
environment: matched,
|
|
11628
|
+
known,
|
|
11629
|
+
keep: pick(overrides.keepUrl, entry?.keepApiUrl, brand.keepRegistration.keepApiUrl),
|
|
11630
|
+
jobs: pick(overrides.jobsUrl, entry?.jobsApiUrl, brand.keepRegistration.jobsApiUrl)
|
|
11631
|
+
};
|
|
11632
|
+
}
|
|
11633
|
+
function pick(flag, fromEnvironment, brandDefault) {
|
|
11634
|
+
if (flag)
|
|
11635
|
+
return { url: flag, source: "flag" };
|
|
11636
|
+
if (fromEnvironment)
|
|
11637
|
+
return { url: fromEnvironment, source: "environment" };
|
|
11638
|
+
return { url: brandDefault, source: "brand-default" };
|
|
11639
|
+
}
|
|
11640
|
+
function applyEnvironment(brand, resolved) {
|
|
11641
|
+
const reg = brand.keepRegistration;
|
|
11642
|
+
if (resolved.keep.url === reg.keepApiUrl && resolved.jobs.url === reg.jobsApiUrl) {
|
|
11643
|
+
return brand;
|
|
11644
|
+
}
|
|
11645
|
+
return {
|
|
11646
|
+
...brand,
|
|
11647
|
+
keepRegistration: {
|
|
11648
|
+
...reg,
|
|
11649
|
+
keepApiUrl: resolved.keep.url,
|
|
11650
|
+
jobsApiUrl: resolved.jobs.url
|
|
11651
|
+
}
|
|
11652
|
+
};
|
|
11653
|
+
}
|
|
11654
|
+
function isWorthReporting(resolved) {
|
|
11655
|
+
return resolved.environment !== null || resolved.keep.source === "flag" || resolved.jobs.source === "flag";
|
|
11656
|
+
}
|
|
11657
|
+
function renderEnvironmentReport(resolved) {
|
|
11658
|
+
return [
|
|
11659
|
+
"",
|
|
11660
|
+
"Pairing environment",
|
|
11661
|
+
field("Profile", resolved.profile),
|
|
11662
|
+
field("Environment", describeEnvironment(resolved)),
|
|
11663
|
+
field("Keep", `${resolved.keep.url} ${describeSource(resolved, resolved.keep)}`),
|
|
11664
|
+
field("Jobs", `${resolved.jobs.url} ${describeSource(resolved, resolved.jobs)}`),
|
|
11665
|
+
""
|
|
11666
|
+
];
|
|
11667
|
+
}
|
|
11668
|
+
function renderVerificationLine(verificationUri) {
|
|
11669
|
+
return field("Verify at", `${hostOf(verificationUri)} as Keep reported it`);
|
|
11670
|
+
}
|
|
11671
|
+
function environmentReportJson(resolved) {
|
|
11672
|
+
return JSON.stringify({
|
|
11673
|
+
kind: "pairing-environment",
|
|
11674
|
+
profile: resolved.profile,
|
|
11675
|
+
environment: resolved.environment,
|
|
11676
|
+
known: resolved.known,
|
|
11677
|
+
keep: resolved.keep,
|
|
11678
|
+
jobs: resolved.jobs
|
|
11679
|
+
});
|
|
11680
|
+
}
|
|
11681
|
+
function verificationJson(verificationUri) {
|
|
11682
|
+
return JSON.stringify({
|
|
11683
|
+
kind: "pairing-verification",
|
|
11684
|
+
verificationUri,
|
|
11685
|
+
host: hostOf(verificationUri),
|
|
11686
|
+
source: "keep"
|
|
11687
|
+
});
|
|
11688
|
+
}
|
|
11689
|
+
function field(label, value) {
|
|
11690
|
+
return ` ${`${label}:`.padEnd(13)}${value}`;
|
|
11691
|
+
}
|
|
11692
|
+
function describeEnvironment(resolved) {
|
|
11693
|
+
if (resolved.environment !== null) {
|
|
11694
|
+
return `${resolved.environment} (named by this build)`;
|
|
11695
|
+
}
|
|
11696
|
+
if (resolved.known.length === 0) {
|
|
11697
|
+
return "none (this build declares no environments)";
|
|
11698
|
+
}
|
|
11699
|
+
return `none (this build knows ${resolved.known.join(", ")})`;
|
|
11700
|
+
}
|
|
11701
|
+
function describeSource(resolved, url) {
|
|
11702
|
+
switch (url.source) {
|
|
11703
|
+
case "flag":
|
|
11704
|
+
return "from the flag you passed";
|
|
11705
|
+
case "environment":
|
|
11706
|
+
return `from the "${resolved.environment ?? ""}" environment`;
|
|
11707
|
+
default:
|
|
11708
|
+
return "from the brand default";
|
|
11709
|
+
}
|
|
11710
|
+
}
|
|
11711
|
+
function hostOf(url) {
|
|
11712
|
+
try {
|
|
11713
|
+
return new URL(url).host;
|
|
11714
|
+
} catch {
|
|
11715
|
+
return url;
|
|
11716
|
+
}
|
|
11717
|
+
}
|
|
11718
|
+
}
|
|
11719
|
+
});
|
|
11720
|
+
|
|
11607
11721
|
// ../../packages/shuttle/dist/preflight/checks.js
|
|
11608
11722
|
var require_checks = __commonJS({
|
|
11609
11723
|
"../../packages/shuttle/dist/preflight/checks.js"(exports2) {
|
|
@@ -11619,6 +11733,7 @@ var require_checks = __commonJS({
|
|
|
11619
11733
|
var loom_1 = require_dist();
|
|
11620
11734
|
var version_check_1 = require_version_check();
|
|
11621
11735
|
var apply_1 = require_apply();
|
|
11736
|
+
var environment_1 = require_environment();
|
|
11622
11737
|
var NODE_FLOOR = "20.0.0";
|
|
11623
11738
|
var DISK_FLOOR_BYTES = 1024 * 1024 * 1024;
|
|
11624
11739
|
var WORKSPACE_EXECUTOR = "claude-code";
|
|
@@ -11745,7 +11860,7 @@ var require_checks = __commonJS({
|
|
|
11745
11860
|
if (strays.length > 0) {
|
|
11746
11861
|
return fail("pairing-environment", `the config claims from ${strays.join(", ")}, which this pairing is not rostered into`, `run \`${subject.brand.product.cliBinary} init\` to rewrite the config from this pairing`);
|
|
11747
11862
|
}
|
|
11748
|
-
return pass("pairing-environment", `
|
|
11863
|
+
return pass("pairing-environment", `paired with Keep at ${(0, environment_1.hostOf)(pairing.keepApiUrl)}, claiming from Jobs at ${(0, environment_1.hostOf)(pairing.jobsApiUrl)}`);
|
|
11749
11864
|
});
|
|
11750
11865
|
}
|
|
11751
11866
|
};
|
|
@@ -20572,15 +20687,1769 @@ var require_doctor = __commonJS({
|
|
|
20572
20687
|
}
|
|
20573
20688
|
});
|
|
20574
20689
|
|
|
20690
|
+
// ../../node_modules/.pnpm/qrcode-generator@2.0.4/node_modules/qrcode-generator/dist/qrcode.js
|
|
20691
|
+
var require_qrcode = __commonJS({
|
|
20692
|
+
"../../node_modules/.pnpm/qrcode-generator@2.0.4/node_modules/qrcode-generator/dist/qrcode.js"(exports2, module2) {
|
|
20693
|
+
var qrcode = (function() {
|
|
20694
|
+
var qrcode2 = function(typeNumber, errorCorrectionLevel) {
|
|
20695
|
+
var PAD0 = 236;
|
|
20696
|
+
var PAD1 = 17;
|
|
20697
|
+
var _typeNumber = typeNumber;
|
|
20698
|
+
var _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];
|
|
20699
|
+
var _modules = null;
|
|
20700
|
+
var _moduleCount = 0;
|
|
20701
|
+
var _dataCache = null;
|
|
20702
|
+
var _dataList = [];
|
|
20703
|
+
var _this = {};
|
|
20704
|
+
var makeImpl = function(test, maskPattern) {
|
|
20705
|
+
_moduleCount = _typeNumber * 4 + 17;
|
|
20706
|
+
_modules = (function(moduleCount) {
|
|
20707
|
+
var modules = new Array(moduleCount);
|
|
20708
|
+
for (var row = 0; row < moduleCount; row += 1) {
|
|
20709
|
+
modules[row] = new Array(moduleCount);
|
|
20710
|
+
for (var col = 0; col < moduleCount; col += 1) {
|
|
20711
|
+
modules[row][col] = null;
|
|
20712
|
+
}
|
|
20713
|
+
}
|
|
20714
|
+
return modules;
|
|
20715
|
+
})(_moduleCount);
|
|
20716
|
+
setupPositionProbePattern(0, 0);
|
|
20717
|
+
setupPositionProbePattern(_moduleCount - 7, 0);
|
|
20718
|
+
setupPositionProbePattern(0, _moduleCount - 7);
|
|
20719
|
+
setupPositionAdjustPattern();
|
|
20720
|
+
setupTimingPattern();
|
|
20721
|
+
setupTypeInfo(test, maskPattern);
|
|
20722
|
+
if (_typeNumber >= 7) {
|
|
20723
|
+
setupTypeNumber(test);
|
|
20724
|
+
}
|
|
20725
|
+
if (_dataCache == null) {
|
|
20726
|
+
_dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);
|
|
20727
|
+
}
|
|
20728
|
+
mapData(_dataCache, maskPattern);
|
|
20729
|
+
};
|
|
20730
|
+
var setupPositionProbePattern = function(row, col) {
|
|
20731
|
+
for (var r = -1; r <= 7; r += 1) {
|
|
20732
|
+
if (row + r <= -1 || _moduleCount <= row + r) continue;
|
|
20733
|
+
for (var c = -1; c <= 7; c += 1) {
|
|
20734
|
+
if (col + c <= -1 || _moduleCount <= col + c) continue;
|
|
20735
|
+
if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
|
|
20736
|
+
_modules[row + r][col + c] = true;
|
|
20737
|
+
} else {
|
|
20738
|
+
_modules[row + r][col + c] = false;
|
|
20739
|
+
}
|
|
20740
|
+
}
|
|
20741
|
+
}
|
|
20742
|
+
};
|
|
20743
|
+
var getBestMaskPattern = function() {
|
|
20744
|
+
var minLostPoint = 0;
|
|
20745
|
+
var pattern = 0;
|
|
20746
|
+
for (var i = 0; i < 8; i += 1) {
|
|
20747
|
+
makeImpl(true, i);
|
|
20748
|
+
var lostPoint = QRUtil.getLostPoint(_this);
|
|
20749
|
+
if (i == 0 || minLostPoint > lostPoint) {
|
|
20750
|
+
minLostPoint = lostPoint;
|
|
20751
|
+
pattern = i;
|
|
20752
|
+
}
|
|
20753
|
+
}
|
|
20754
|
+
return pattern;
|
|
20755
|
+
};
|
|
20756
|
+
var setupTimingPattern = function() {
|
|
20757
|
+
for (var r = 8; r < _moduleCount - 8; r += 1) {
|
|
20758
|
+
if (_modules[r][6] != null) {
|
|
20759
|
+
continue;
|
|
20760
|
+
}
|
|
20761
|
+
_modules[r][6] = r % 2 == 0;
|
|
20762
|
+
}
|
|
20763
|
+
for (var c = 8; c < _moduleCount - 8; c += 1) {
|
|
20764
|
+
if (_modules[6][c] != null) {
|
|
20765
|
+
continue;
|
|
20766
|
+
}
|
|
20767
|
+
_modules[6][c] = c % 2 == 0;
|
|
20768
|
+
}
|
|
20769
|
+
};
|
|
20770
|
+
var setupPositionAdjustPattern = function() {
|
|
20771
|
+
var pos = QRUtil.getPatternPosition(_typeNumber);
|
|
20772
|
+
for (var i = 0; i < pos.length; i += 1) {
|
|
20773
|
+
for (var j = 0; j < pos.length; j += 1) {
|
|
20774
|
+
var row = pos[i];
|
|
20775
|
+
var col = pos[j];
|
|
20776
|
+
if (_modules[row][col] != null) {
|
|
20777
|
+
continue;
|
|
20778
|
+
}
|
|
20779
|
+
for (var r = -2; r <= 2; r += 1) {
|
|
20780
|
+
for (var c = -2; c <= 2; c += 1) {
|
|
20781
|
+
if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
|
|
20782
|
+
_modules[row + r][col + c] = true;
|
|
20783
|
+
} else {
|
|
20784
|
+
_modules[row + r][col + c] = false;
|
|
20785
|
+
}
|
|
20786
|
+
}
|
|
20787
|
+
}
|
|
20788
|
+
}
|
|
20789
|
+
}
|
|
20790
|
+
};
|
|
20791
|
+
var setupTypeNumber = function(test) {
|
|
20792
|
+
var bits = QRUtil.getBCHTypeNumber(_typeNumber);
|
|
20793
|
+
for (var i = 0; i < 18; i += 1) {
|
|
20794
|
+
var mod = !test && (bits >> i & 1) == 1;
|
|
20795
|
+
_modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;
|
|
20796
|
+
}
|
|
20797
|
+
for (var i = 0; i < 18; i += 1) {
|
|
20798
|
+
var mod = !test && (bits >> i & 1) == 1;
|
|
20799
|
+
_modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
|
|
20800
|
+
}
|
|
20801
|
+
};
|
|
20802
|
+
var setupTypeInfo = function(test, maskPattern) {
|
|
20803
|
+
var data = _errorCorrectionLevel << 3 | maskPattern;
|
|
20804
|
+
var bits = QRUtil.getBCHTypeInfo(data);
|
|
20805
|
+
for (var i = 0; i < 15; i += 1) {
|
|
20806
|
+
var mod = !test && (bits >> i & 1) == 1;
|
|
20807
|
+
if (i < 6) {
|
|
20808
|
+
_modules[i][8] = mod;
|
|
20809
|
+
} else if (i < 8) {
|
|
20810
|
+
_modules[i + 1][8] = mod;
|
|
20811
|
+
} else {
|
|
20812
|
+
_modules[_moduleCount - 15 + i][8] = mod;
|
|
20813
|
+
}
|
|
20814
|
+
}
|
|
20815
|
+
for (var i = 0; i < 15; i += 1) {
|
|
20816
|
+
var mod = !test && (bits >> i & 1) == 1;
|
|
20817
|
+
if (i < 8) {
|
|
20818
|
+
_modules[8][_moduleCount - i - 1] = mod;
|
|
20819
|
+
} else if (i < 9) {
|
|
20820
|
+
_modules[8][15 - i - 1 + 1] = mod;
|
|
20821
|
+
} else {
|
|
20822
|
+
_modules[8][15 - i - 1] = mod;
|
|
20823
|
+
}
|
|
20824
|
+
}
|
|
20825
|
+
_modules[_moduleCount - 8][8] = !test;
|
|
20826
|
+
};
|
|
20827
|
+
var mapData = function(data, maskPattern) {
|
|
20828
|
+
var inc = -1;
|
|
20829
|
+
var row = _moduleCount - 1;
|
|
20830
|
+
var bitIndex = 7;
|
|
20831
|
+
var byteIndex = 0;
|
|
20832
|
+
var maskFunc = QRUtil.getMaskFunction(maskPattern);
|
|
20833
|
+
for (var col = _moduleCount - 1; col > 0; col -= 2) {
|
|
20834
|
+
if (col == 6) col -= 1;
|
|
20835
|
+
while (true) {
|
|
20836
|
+
for (var c = 0; c < 2; c += 1) {
|
|
20837
|
+
if (_modules[row][col - c] == null) {
|
|
20838
|
+
var dark = false;
|
|
20839
|
+
if (byteIndex < data.length) {
|
|
20840
|
+
dark = (data[byteIndex] >>> bitIndex & 1) == 1;
|
|
20841
|
+
}
|
|
20842
|
+
var mask = maskFunc(row, col - c);
|
|
20843
|
+
if (mask) {
|
|
20844
|
+
dark = !dark;
|
|
20845
|
+
}
|
|
20846
|
+
_modules[row][col - c] = dark;
|
|
20847
|
+
bitIndex -= 1;
|
|
20848
|
+
if (bitIndex == -1) {
|
|
20849
|
+
byteIndex += 1;
|
|
20850
|
+
bitIndex = 7;
|
|
20851
|
+
}
|
|
20852
|
+
}
|
|
20853
|
+
}
|
|
20854
|
+
row += inc;
|
|
20855
|
+
if (row < 0 || _moduleCount <= row) {
|
|
20856
|
+
row -= inc;
|
|
20857
|
+
inc = -inc;
|
|
20858
|
+
break;
|
|
20859
|
+
}
|
|
20860
|
+
}
|
|
20861
|
+
}
|
|
20862
|
+
};
|
|
20863
|
+
var createBytes = function(buffer, rsBlocks) {
|
|
20864
|
+
var offset = 0;
|
|
20865
|
+
var maxDcCount = 0;
|
|
20866
|
+
var maxEcCount = 0;
|
|
20867
|
+
var dcdata = new Array(rsBlocks.length);
|
|
20868
|
+
var ecdata = new Array(rsBlocks.length);
|
|
20869
|
+
for (var r = 0; r < rsBlocks.length; r += 1) {
|
|
20870
|
+
var dcCount = rsBlocks[r].dataCount;
|
|
20871
|
+
var ecCount = rsBlocks[r].totalCount - dcCount;
|
|
20872
|
+
maxDcCount = Math.max(maxDcCount, dcCount);
|
|
20873
|
+
maxEcCount = Math.max(maxEcCount, ecCount);
|
|
20874
|
+
dcdata[r] = new Array(dcCount);
|
|
20875
|
+
for (var i = 0; i < dcdata[r].length; i += 1) {
|
|
20876
|
+
dcdata[r][i] = 255 & buffer.getBuffer()[i + offset];
|
|
20877
|
+
}
|
|
20878
|
+
offset += dcCount;
|
|
20879
|
+
var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);
|
|
20880
|
+
var rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);
|
|
20881
|
+
var modPoly = rawPoly.mod(rsPoly);
|
|
20882
|
+
ecdata[r] = new Array(rsPoly.getLength() - 1);
|
|
20883
|
+
for (var i = 0; i < ecdata[r].length; i += 1) {
|
|
20884
|
+
var modIndex = i + modPoly.getLength() - ecdata[r].length;
|
|
20885
|
+
ecdata[r][i] = modIndex >= 0 ? modPoly.getAt(modIndex) : 0;
|
|
20886
|
+
}
|
|
20887
|
+
}
|
|
20888
|
+
var totalCodeCount = 0;
|
|
20889
|
+
for (var i = 0; i < rsBlocks.length; i += 1) {
|
|
20890
|
+
totalCodeCount += rsBlocks[i].totalCount;
|
|
20891
|
+
}
|
|
20892
|
+
var data = new Array(totalCodeCount);
|
|
20893
|
+
var index = 0;
|
|
20894
|
+
for (var i = 0; i < maxDcCount; i += 1) {
|
|
20895
|
+
for (var r = 0; r < rsBlocks.length; r += 1) {
|
|
20896
|
+
if (i < dcdata[r].length) {
|
|
20897
|
+
data[index] = dcdata[r][i];
|
|
20898
|
+
index += 1;
|
|
20899
|
+
}
|
|
20900
|
+
}
|
|
20901
|
+
}
|
|
20902
|
+
for (var i = 0; i < maxEcCount; i += 1) {
|
|
20903
|
+
for (var r = 0; r < rsBlocks.length; r += 1) {
|
|
20904
|
+
if (i < ecdata[r].length) {
|
|
20905
|
+
data[index] = ecdata[r][i];
|
|
20906
|
+
index += 1;
|
|
20907
|
+
}
|
|
20908
|
+
}
|
|
20909
|
+
}
|
|
20910
|
+
return data;
|
|
20911
|
+
};
|
|
20912
|
+
var createData = function(typeNumber2, errorCorrectionLevel2, dataList) {
|
|
20913
|
+
var rsBlocks = QRRSBlock.getRSBlocks(typeNumber2, errorCorrectionLevel2);
|
|
20914
|
+
var buffer = qrBitBuffer();
|
|
20915
|
+
for (var i = 0; i < dataList.length; i += 1) {
|
|
20916
|
+
var data = dataList[i];
|
|
20917
|
+
buffer.put(data.getMode(), 4);
|
|
20918
|
+
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber2));
|
|
20919
|
+
data.write(buffer);
|
|
20920
|
+
}
|
|
20921
|
+
var totalDataCount = 0;
|
|
20922
|
+
for (var i = 0; i < rsBlocks.length; i += 1) {
|
|
20923
|
+
totalDataCount += rsBlocks[i].dataCount;
|
|
20924
|
+
}
|
|
20925
|
+
if (buffer.getLengthInBits() > totalDataCount * 8) {
|
|
20926
|
+
throw "code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")";
|
|
20927
|
+
}
|
|
20928
|
+
if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
|
|
20929
|
+
buffer.put(0, 4);
|
|
20930
|
+
}
|
|
20931
|
+
while (buffer.getLengthInBits() % 8 != 0) {
|
|
20932
|
+
buffer.putBit(false);
|
|
20933
|
+
}
|
|
20934
|
+
while (true) {
|
|
20935
|
+
if (buffer.getLengthInBits() >= totalDataCount * 8) {
|
|
20936
|
+
break;
|
|
20937
|
+
}
|
|
20938
|
+
buffer.put(PAD0, 8);
|
|
20939
|
+
if (buffer.getLengthInBits() >= totalDataCount * 8) {
|
|
20940
|
+
break;
|
|
20941
|
+
}
|
|
20942
|
+
buffer.put(PAD1, 8);
|
|
20943
|
+
}
|
|
20944
|
+
return createBytes(buffer, rsBlocks);
|
|
20945
|
+
};
|
|
20946
|
+
_this.addData = function(data, mode) {
|
|
20947
|
+
mode = mode || "Byte";
|
|
20948
|
+
var newData = null;
|
|
20949
|
+
switch (mode) {
|
|
20950
|
+
case "Numeric":
|
|
20951
|
+
newData = qrNumber(data);
|
|
20952
|
+
break;
|
|
20953
|
+
case "Alphanumeric":
|
|
20954
|
+
newData = qrAlphaNum(data);
|
|
20955
|
+
break;
|
|
20956
|
+
case "Byte":
|
|
20957
|
+
newData = qr8BitByte(data);
|
|
20958
|
+
break;
|
|
20959
|
+
case "Kanji":
|
|
20960
|
+
newData = qrKanji(data);
|
|
20961
|
+
break;
|
|
20962
|
+
default:
|
|
20963
|
+
throw "mode:" + mode;
|
|
20964
|
+
}
|
|
20965
|
+
_dataList.push(newData);
|
|
20966
|
+
_dataCache = null;
|
|
20967
|
+
};
|
|
20968
|
+
_this.isDark = function(row, col) {
|
|
20969
|
+
if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {
|
|
20970
|
+
throw row + "," + col;
|
|
20971
|
+
}
|
|
20972
|
+
return _modules[row][col];
|
|
20973
|
+
};
|
|
20974
|
+
_this.getModuleCount = function() {
|
|
20975
|
+
return _moduleCount;
|
|
20976
|
+
};
|
|
20977
|
+
_this.make = function() {
|
|
20978
|
+
if (_typeNumber < 1) {
|
|
20979
|
+
var typeNumber2 = 1;
|
|
20980
|
+
for (; typeNumber2 < 40; typeNumber2++) {
|
|
20981
|
+
var rsBlocks = QRRSBlock.getRSBlocks(typeNumber2, _errorCorrectionLevel);
|
|
20982
|
+
var buffer = qrBitBuffer();
|
|
20983
|
+
for (var i = 0; i < _dataList.length; i++) {
|
|
20984
|
+
var data = _dataList[i];
|
|
20985
|
+
buffer.put(data.getMode(), 4);
|
|
20986
|
+
buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber2));
|
|
20987
|
+
data.write(buffer);
|
|
20988
|
+
}
|
|
20989
|
+
var totalDataCount = 0;
|
|
20990
|
+
for (var i = 0; i < rsBlocks.length; i++) {
|
|
20991
|
+
totalDataCount += rsBlocks[i].dataCount;
|
|
20992
|
+
}
|
|
20993
|
+
if (buffer.getLengthInBits() <= totalDataCount * 8) {
|
|
20994
|
+
break;
|
|
20995
|
+
}
|
|
20996
|
+
}
|
|
20997
|
+
_typeNumber = typeNumber2;
|
|
20998
|
+
}
|
|
20999
|
+
makeImpl(false, getBestMaskPattern());
|
|
21000
|
+
};
|
|
21001
|
+
_this.createTableTag = function(cellSize, margin) {
|
|
21002
|
+
cellSize = cellSize || 2;
|
|
21003
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
21004
|
+
var qrHtml = "";
|
|
21005
|
+
qrHtml += '<table style="';
|
|
21006
|
+
qrHtml += " border-width: 0px; border-style: none;";
|
|
21007
|
+
qrHtml += " border-collapse: collapse;";
|
|
21008
|
+
qrHtml += " padding: 0px; margin: " + margin + "px;";
|
|
21009
|
+
qrHtml += '">';
|
|
21010
|
+
qrHtml += "<tbody>";
|
|
21011
|
+
for (var r = 0; r < _this.getModuleCount(); r += 1) {
|
|
21012
|
+
qrHtml += "<tr>";
|
|
21013
|
+
for (var c = 0; c < _this.getModuleCount(); c += 1) {
|
|
21014
|
+
qrHtml += '<td style="';
|
|
21015
|
+
qrHtml += " border-width: 0px; border-style: none;";
|
|
21016
|
+
qrHtml += " border-collapse: collapse;";
|
|
21017
|
+
qrHtml += " padding: 0px; margin: 0px;";
|
|
21018
|
+
qrHtml += " width: " + cellSize + "px;";
|
|
21019
|
+
qrHtml += " height: " + cellSize + "px;";
|
|
21020
|
+
qrHtml += " background-color: ";
|
|
21021
|
+
qrHtml += _this.isDark(r, c) ? "#000000" : "#ffffff";
|
|
21022
|
+
qrHtml += ";";
|
|
21023
|
+
qrHtml += '"/>';
|
|
21024
|
+
}
|
|
21025
|
+
qrHtml += "</tr>";
|
|
21026
|
+
}
|
|
21027
|
+
qrHtml += "</tbody>";
|
|
21028
|
+
qrHtml += "</table>";
|
|
21029
|
+
return qrHtml;
|
|
21030
|
+
};
|
|
21031
|
+
_this.createSvgTag = function(cellSize, margin, alt, title) {
|
|
21032
|
+
var opts = {};
|
|
21033
|
+
if (typeof arguments[0] == "object") {
|
|
21034
|
+
opts = arguments[0];
|
|
21035
|
+
cellSize = opts.cellSize;
|
|
21036
|
+
margin = opts.margin;
|
|
21037
|
+
alt = opts.alt;
|
|
21038
|
+
title = opts.title;
|
|
21039
|
+
}
|
|
21040
|
+
cellSize = cellSize || 2;
|
|
21041
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
21042
|
+
alt = typeof alt === "string" ? { text: alt } : alt || {};
|
|
21043
|
+
alt.text = alt.text || null;
|
|
21044
|
+
alt.id = alt.text ? alt.id || "qrcode-description" : null;
|
|
21045
|
+
title = typeof title === "string" ? { text: title } : title || {};
|
|
21046
|
+
title.text = title.text || null;
|
|
21047
|
+
title.id = title.text ? title.id || "qrcode-title" : null;
|
|
21048
|
+
var size = _this.getModuleCount() * cellSize + margin * 2;
|
|
21049
|
+
var c, mc, r, mr, qrSvg = "", rect;
|
|
21050
|
+
rect = "l" + cellSize + ",0 0," + cellSize + " -" + cellSize + ",0 0,-" + cellSize + "z ";
|
|
21051
|
+
qrSvg += '<svg version="1.1" xmlns="http://www.w3.org/2000/svg"';
|
|
21052
|
+
qrSvg += !opts.scalable ? ' width="' + size + 'px" height="' + size + 'px"' : "";
|
|
21053
|
+
qrSvg += ' viewBox="0 0 ' + size + " " + size + '" ';
|
|
21054
|
+
qrSvg += ' preserveAspectRatio="xMinYMin meet"';
|
|
21055
|
+
qrSvg += title.text || alt.text ? ' role="img" aria-labelledby="' + escapeXml([title.id, alt.id].join(" ").trim()) + '"' : "";
|
|
21056
|
+
qrSvg += ">";
|
|
21057
|
+
qrSvg += title.text ? '<title id="' + escapeXml(title.id) + '">' + escapeXml(title.text) + "</title>" : "";
|
|
21058
|
+
qrSvg += alt.text ? '<description id="' + escapeXml(alt.id) + '">' + escapeXml(alt.text) + "</description>" : "";
|
|
21059
|
+
qrSvg += '<rect width="100%" height="100%" fill="white" cx="0" cy="0"/>';
|
|
21060
|
+
qrSvg += '<path d="';
|
|
21061
|
+
for (r = 0; r < _this.getModuleCount(); r += 1) {
|
|
21062
|
+
mr = r * cellSize + margin;
|
|
21063
|
+
for (c = 0; c < _this.getModuleCount(); c += 1) {
|
|
21064
|
+
if (_this.isDark(r, c)) {
|
|
21065
|
+
mc = c * cellSize + margin;
|
|
21066
|
+
qrSvg += "M" + mc + "," + mr + rect;
|
|
21067
|
+
}
|
|
21068
|
+
}
|
|
21069
|
+
}
|
|
21070
|
+
qrSvg += '" stroke="transparent" fill="black"/>';
|
|
21071
|
+
qrSvg += "</svg>";
|
|
21072
|
+
return qrSvg;
|
|
21073
|
+
};
|
|
21074
|
+
_this.createDataURL = function(cellSize, margin) {
|
|
21075
|
+
cellSize = cellSize || 2;
|
|
21076
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
21077
|
+
var size = _this.getModuleCount() * cellSize + margin * 2;
|
|
21078
|
+
var min = margin;
|
|
21079
|
+
var max = size - margin;
|
|
21080
|
+
return createDataURL(size, size, function(x, y) {
|
|
21081
|
+
if (min <= x && x < max && min <= y && y < max) {
|
|
21082
|
+
var c = Math.floor((x - min) / cellSize);
|
|
21083
|
+
var r = Math.floor((y - min) / cellSize);
|
|
21084
|
+
return _this.isDark(r, c) ? 0 : 1;
|
|
21085
|
+
} else {
|
|
21086
|
+
return 1;
|
|
21087
|
+
}
|
|
21088
|
+
});
|
|
21089
|
+
};
|
|
21090
|
+
_this.createImgTag = function(cellSize, margin, alt) {
|
|
21091
|
+
cellSize = cellSize || 2;
|
|
21092
|
+
margin = typeof margin == "undefined" ? cellSize * 4 : margin;
|
|
21093
|
+
var size = _this.getModuleCount() * cellSize + margin * 2;
|
|
21094
|
+
var img = "";
|
|
21095
|
+
img += "<img";
|
|
21096
|
+
img += ' src="';
|
|
21097
|
+
img += _this.createDataURL(cellSize, margin);
|
|
21098
|
+
img += '"';
|
|
21099
|
+
img += ' width="';
|
|
21100
|
+
img += size;
|
|
21101
|
+
img += '"';
|
|
21102
|
+
img += ' height="';
|
|
21103
|
+
img += size;
|
|
21104
|
+
img += '"';
|
|
21105
|
+
if (alt) {
|
|
21106
|
+
img += ' alt="';
|
|
21107
|
+
img += escapeXml(alt);
|
|
21108
|
+
img += '"';
|
|
21109
|
+
}
|
|
21110
|
+
img += "/>";
|
|
21111
|
+
return img;
|
|
21112
|
+
};
|
|
21113
|
+
var escapeXml = function(s) {
|
|
21114
|
+
var escaped = "";
|
|
21115
|
+
for (var i = 0; i < s.length; i += 1) {
|
|
21116
|
+
var c = s.charAt(i);
|
|
21117
|
+
switch (c) {
|
|
21118
|
+
case "<":
|
|
21119
|
+
escaped += "<";
|
|
21120
|
+
break;
|
|
21121
|
+
case ">":
|
|
21122
|
+
escaped += ">";
|
|
21123
|
+
break;
|
|
21124
|
+
case "&":
|
|
21125
|
+
escaped += "&";
|
|
21126
|
+
break;
|
|
21127
|
+
case '"':
|
|
21128
|
+
escaped += """;
|
|
21129
|
+
break;
|
|
21130
|
+
default:
|
|
21131
|
+
escaped += c;
|
|
21132
|
+
break;
|
|
21133
|
+
}
|
|
21134
|
+
}
|
|
21135
|
+
return escaped;
|
|
21136
|
+
};
|
|
21137
|
+
var _createHalfASCII = function(margin) {
|
|
21138
|
+
var cellSize = 1;
|
|
21139
|
+
margin = typeof margin == "undefined" ? cellSize * 2 : margin;
|
|
21140
|
+
var size = _this.getModuleCount() * cellSize + margin * 2;
|
|
21141
|
+
var min = margin;
|
|
21142
|
+
var max = size - margin;
|
|
21143
|
+
var y, x, r1, r2, p;
|
|
21144
|
+
var blocks = {
|
|
21145
|
+
"\u2588\u2588": "\u2588",
|
|
21146
|
+
"\u2588 ": "\u2580",
|
|
21147
|
+
" \u2588": "\u2584",
|
|
21148
|
+
" ": " "
|
|
21149
|
+
};
|
|
21150
|
+
var blocksLastLineNoMargin = {
|
|
21151
|
+
"\u2588\u2588": "\u2580",
|
|
21152
|
+
"\u2588 ": "\u2580",
|
|
21153
|
+
" \u2588": " ",
|
|
21154
|
+
" ": " "
|
|
21155
|
+
};
|
|
21156
|
+
var ascii = "";
|
|
21157
|
+
for (y = 0; y < size; y += 2) {
|
|
21158
|
+
r1 = Math.floor((y - min) / cellSize);
|
|
21159
|
+
r2 = Math.floor((y + 1 - min) / cellSize);
|
|
21160
|
+
for (x = 0; x < size; x += 1) {
|
|
21161
|
+
p = "\u2588";
|
|
21162
|
+
if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {
|
|
21163
|
+
p = " ";
|
|
21164
|
+
}
|
|
21165
|
+
if (min <= x && x < max && min <= y + 1 && y + 1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {
|
|
21166
|
+
p += " ";
|
|
21167
|
+
} else {
|
|
21168
|
+
p += "\u2588";
|
|
21169
|
+
}
|
|
21170
|
+
ascii += margin < 1 && y + 1 >= max ? blocksLastLineNoMargin[p] : blocks[p];
|
|
21171
|
+
}
|
|
21172
|
+
ascii += "\n";
|
|
21173
|
+
}
|
|
21174
|
+
if (size % 2 && margin > 0) {
|
|
21175
|
+
return ascii.substring(0, ascii.length - size - 1) + Array(size + 1).join("\u2580");
|
|
21176
|
+
}
|
|
21177
|
+
return ascii.substring(0, ascii.length - 1);
|
|
21178
|
+
};
|
|
21179
|
+
_this.createASCII = function(cellSize, margin) {
|
|
21180
|
+
cellSize = cellSize || 1;
|
|
21181
|
+
if (cellSize < 2) {
|
|
21182
|
+
return _createHalfASCII(margin);
|
|
21183
|
+
}
|
|
21184
|
+
cellSize -= 1;
|
|
21185
|
+
margin = typeof margin == "undefined" ? cellSize * 2 : margin;
|
|
21186
|
+
var size = _this.getModuleCount() * cellSize + margin * 2;
|
|
21187
|
+
var min = margin;
|
|
21188
|
+
var max = size - margin;
|
|
21189
|
+
var y, x, r, p;
|
|
21190
|
+
var white = Array(cellSize + 1).join("\u2588\u2588");
|
|
21191
|
+
var black = Array(cellSize + 1).join(" ");
|
|
21192
|
+
var ascii = "";
|
|
21193
|
+
var line = "";
|
|
21194
|
+
for (y = 0; y < size; y += 1) {
|
|
21195
|
+
r = Math.floor((y - min) / cellSize);
|
|
21196
|
+
line = "";
|
|
21197
|
+
for (x = 0; x < size; x += 1) {
|
|
21198
|
+
p = 1;
|
|
21199
|
+
if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {
|
|
21200
|
+
p = 0;
|
|
21201
|
+
}
|
|
21202
|
+
line += p ? white : black;
|
|
21203
|
+
}
|
|
21204
|
+
for (r = 0; r < cellSize; r += 1) {
|
|
21205
|
+
ascii += line + "\n";
|
|
21206
|
+
}
|
|
21207
|
+
}
|
|
21208
|
+
return ascii.substring(0, ascii.length - 1);
|
|
21209
|
+
};
|
|
21210
|
+
_this.renderTo2dContext = function(context, cellSize) {
|
|
21211
|
+
cellSize = cellSize || 2;
|
|
21212
|
+
var length = _this.getModuleCount();
|
|
21213
|
+
for (var row = 0; row < length; row++) {
|
|
21214
|
+
for (var col = 0; col < length; col++) {
|
|
21215
|
+
context.fillStyle = _this.isDark(row, col) ? "black" : "white";
|
|
21216
|
+
context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);
|
|
21217
|
+
}
|
|
21218
|
+
}
|
|
21219
|
+
};
|
|
21220
|
+
return _this;
|
|
21221
|
+
};
|
|
21222
|
+
qrcode2.stringToBytesFuncs = {
|
|
21223
|
+
"default": function(s) {
|
|
21224
|
+
var bytes = [];
|
|
21225
|
+
for (var i = 0; i < s.length; i += 1) {
|
|
21226
|
+
var c = s.charCodeAt(i);
|
|
21227
|
+
bytes.push(c & 255);
|
|
21228
|
+
}
|
|
21229
|
+
return bytes;
|
|
21230
|
+
}
|
|
21231
|
+
};
|
|
21232
|
+
qrcode2.stringToBytes = qrcode2.stringToBytesFuncs["default"];
|
|
21233
|
+
qrcode2.createStringToBytes = function(unicodeData, numChars) {
|
|
21234
|
+
var unicodeMap = (function() {
|
|
21235
|
+
var bin = base64DecodeInputStream(unicodeData);
|
|
21236
|
+
var read = function() {
|
|
21237
|
+
var b = bin.read();
|
|
21238
|
+
if (b == -1) throw "eof";
|
|
21239
|
+
return b;
|
|
21240
|
+
};
|
|
21241
|
+
var count = 0;
|
|
21242
|
+
var unicodeMap2 = {};
|
|
21243
|
+
while (true) {
|
|
21244
|
+
var b0 = bin.read();
|
|
21245
|
+
if (b0 == -1) break;
|
|
21246
|
+
var b1 = read();
|
|
21247
|
+
var b2 = read();
|
|
21248
|
+
var b3 = read();
|
|
21249
|
+
var k = String.fromCharCode(b0 << 8 | b1);
|
|
21250
|
+
var v = b2 << 8 | b3;
|
|
21251
|
+
unicodeMap2[k] = v;
|
|
21252
|
+
count += 1;
|
|
21253
|
+
}
|
|
21254
|
+
if (count != numChars) {
|
|
21255
|
+
throw count + " != " + numChars;
|
|
21256
|
+
}
|
|
21257
|
+
return unicodeMap2;
|
|
21258
|
+
})();
|
|
21259
|
+
var unknownChar = "?".charCodeAt(0);
|
|
21260
|
+
return function(s) {
|
|
21261
|
+
var bytes = [];
|
|
21262
|
+
for (var i = 0; i < s.length; i += 1) {
|
|
21263
|
+
var c = s.charCodeAt(i);
|
|
21264
|
+
if (c < 128) {
|
|
21265
|
+
bytes.push(c);
|
|
21266
|
+
} else {
|
|
21267
|
+
var b = unicodeMap[s.charAt(i)];
|
|
21268
|
+
if (typeof b == "number") {
|
|
21269
|
+
if ((b & 255) == b) {
|
|
21270
|
+
bytes.push(b);
|
|
21271
|
+
} else {
|
|
21272
|
+
bytes.push(b >>> 8);
|
|
21273
|
+
bytes.push(b & 255);
|
|
21274
|
+
}
|
|
21275
|
+
} else {
|
|
21276
|
+
bytes.push(unknownChar);
|
|
21277
|
+
}
|
|
21278
|
+
}
|
|
21279
|
+
}
|
|
21280
|
+
return bytes;
|
|
21281
|
+
};
|
|
21282
|
+
};
|
|
21283
|
+
var QRMode = {
|
|
21284
|
+
MODE_NUMBER: 1 << 0,
|
|
21285
|
+
MODE_ALPHA_NUM: 1 << 1,
|
|
21286
|
+
MODE_8BIT_BYTE: 1 << 2,
|
|
21287
|
+
MODE_KANJI: 1 << 3
|
|
21288
|
+
};
|
|
21289
|
+
var QRErrorCorrectionLevel = {
|
|
21290
|
+
L: 1,
|
|
21291
|
+
M: 0,
|
|
21292
|
+
Q: 3,
|
|
21293
|
+
H: 2
|
|
21294
|
+
};
|
|
21295
|
+
var QRMaskPattern = {
|
|
21296
|
+
PATTERN000: 0,
|
|
21297
|
+
PATTERN001: 1,
|
|
21298
|
+
PATTERN010: 2,
|
|
21299
|
+
PATTERN011: 3,
|
|
21300
|
+
PATTERN100: 4,
|
|
21301
|
+
PATTERN101: 5,
|
|
21302
|
+
PATTERN110: 6,
|
|
21303
|
+
PATTERN111: 7
|
|
21304
|
+
};
|
|
21305
|
+
var QRUtil = (function() {
|
|
21306
|
+
var PATTERN_POSITION_TABLE = [
|
|
21307
|
+
[],
|
|
21308
|
+
[6, 18],
|
|
21309
|
+
[6, 22],
|
|
21310
|
+
[6, 26],
|
|
21311
|
+
[6, 30],
|
|
21312
|
+
[6, 34],
|
|
21313
|
+
[6, 22, 38],
|
|
21314
|
+
[6, 24, 42],
|
|
21315
|
+
[6, 26, 46],
|
|
21316
|
+
[6, 28, 50],
|
|
21317
|
+
[6, 30, 54],
|
|
21318
|
+
[6, 32, 58],
|
|
21319
|
+
[6, 34, 62],
|
|
21320
|
+
[6, 26, 46, 66],
|
|
21321
|
+
[6, 26, 48, 70],
|
|
21322
|
+
[6, 26, 50, 74],
|
|
21323
|
+
[6, 30, 54, 78],
|
|
21324
|
+
[6, 30, 56, 82],
|
|
21325
|
+
[6, 30, 58, 86],
|
|
21326
|
+
[6, 34, 62, 90],
|
|
21327
|
+
[6, 28, 50, 72, 94],
|
|
21328
|
+
[6, 26, 50, 74, 98],
|
|
21329
|
+
[6, 30, 54, 78, 102],
|
|
21330
|
+
[6, 28, 54, 80, 106],
|
|
21331
|
+
[6, 32, 58, 84, 110],
|
|
21332
|
+
[6, 30, 58, 86, 114],
|
|
21333
|
+
[6, 34, 62, 90, 118],
|
|
21334
|
+
[6, 26, 50, 74, 98, 122],
|
|
21335
|
+
[6, 30, 54, 78, 102, 126],
|
|
21336
|
+
[6, 26, 52, 78, 104, 130],
|
|
21337
|
+
[6, 30, 56, 82, 108, 134],
|
|
21338
|
+
[6, 34, 60, 86, 112, 138],
|
|
21339
|
+
[6, 30, 58, 86, 114, 142],
|
|
21340
|
+
[6, 34, 62, 90, 118, 146],
|
|
21341
|
+
[6, 30, 54, 78, 102, 126, 150],
|
|
21342
|
+
[6, 24, 50, 76, 102, 128, 154],
|
|
21343
|
+
[6, 28, 54, 80, 106, 132, 158],
|
|
21344
|
+
[6, 32, 58, 84, 110, 136, 162],
|
|
21345
|
+
[6, 26, 54, 82, 110, 138, 166],
|
|
21346
|
+
[6, 30, 58, 86, 114, 142, 170]
|
|
21347
|
+
];
|
|
21348
|
+
var G15 = 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0;
|
|
21349
|
+
var G18 = 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0;
|
|
21350
|
+
var G15_MASK = 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1;
|
|
21351
|
+
var _this = {};
|
|
21352
|
+
var getBCHDigit = function(data) {
|
|
21353
|
+
var digit = 0;
|
|
21354
|
+
while (data != 0) {
|
|
21355
|
+
digit += 1;
|
|
21356
|
+
data >>>= 1;
|
|
21357
|
+
}
|
|
21358
|
+
return digit;
|
|
21359
|
+
};
|
|
21360
|
+
_this.getBCHTypeInfo = function(data) {
|
|
21361
|
+
var d = data << 10;
|
|
21362
|
+
while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {
|
|
21363
|
+
d ^= G15 << getBCHDigit(d) - getBCHDigit(G15);
|
|
21364
|
+
}
|
|
21365
|
+
return (data << 10 | d) ^ G15_MASK;
|
|
21366
|
+
};
|
|
21367
|
+
_this.getBCHTypeNumber = function(data) {
|
|
21368
|
+
var d = data << 12;
|
|
21369
|
+
while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {
|
|
21370
|
+
d ^= G18 << getBCHDigit(d) - getBCHDigit(G18);
|
|
21371
|
+
}
|
|
21372
|
+
return data << 12 | d;
|
|
21373
|
+
};
|
|
21374
|
+
_this.getPatternPosition = function(typeNumber) {
|
|
21375
|
+
return PATTERN_POSITION_TABLE[typeNumber - 1];
|
|
21376
|
+
};
|
|
21377
|
+
_this.getMaskFunction = function(maskPattern) {
|
|
21378
|
+
switch (maskPattern) {
|
|
21379
|
+
case QRMaskPattern.PATTERN000:
|
|
21380
|
+
return function(i, j) {
|
|
21381
|
+
return (i + j) % 2 == 0;
|
|
21382
|
+
};
|
|
21383
|
+
case QRMaskPattern.PATTERN001:
|
|
21384
|
+
return function(i, j) {
|
|
21385
|
+
return i % 2 == 0;
|
|
21386
|
+
};
|
|
21387
|
+
case QRMaskPattern.PATTERN010:
|
|
21388
|
+
return function(i, j) {
|
|
21389
|
+
return j % 3 == 0;
|
|
21390
|
+
};
|
|
21391
|
+
case QRMaskPattern.PATTERN011:
|
|
21392
|
+
return function(i, j) {
|
|
21393
|
+
return (i + j) % 3 == 0;
|
|
21394
|
+
};
|
|
21395
|
+
case QRMaskPattern.PATTERN100:
|
|
21396
|
+
return function(i, j) {
|
|
21397
|
+
return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
|
|
21398
|
+
};
|
|
21399
|
+
case QRMaskPattern.PATTERN101:
|
|
21400
|
+
return function(i, j) {
|
|
21401
|
+
return i * j % 2 + i * j % 3 == 0;
|
|
21402
|
+
};
|
|
21403
|
+
case QRMaskPattern.PATTERN110:
|
|
21404
|
+
return function(i, j) {
|
|
21405
|
+
return (i * j % 2 + i * j % 3) % 2 == 0;
|
|
21406
|
+
};
|
|
21407
|
+
case QRMaskPattern.PATTERN111:
|
|
21408
|
+
return function(i, j) {
|
|
21409
|
+
return (i * j % 3 + (i + j) % 2) % 2 == 0;
|
|
21410
|
+
};
|
|
21411
|
+
default:
|
|
21412
|
+
throw "bad maskPattern:" + maskPattern;
|
|
21413
|
+
}
|
|
21414
|
+
};
|
|
21415
|
+
_this.getErrorCorrectPolynomial = function(errorCorrectLength) {
|
|
21416
|
+
var a = qrPolynomial([1], 0);
|
|
21417
|
+
for (var i = 0; i < errorCorrectLength; i += 1) {
|
|
21418
|
+
a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0));
|
|
21419
|
+
}
|
|
21420
|
+
return a;
|
|
21421
|
+
};
|
|
21422
|
+
_this.getLengthInBits = function(mode, type) {
|
|
21423
|
+
if (1 <= type && type < 10) {
|
|
21424
|
+
switch (mode) {
|
|
21425
|
+
case QRMode.MODE_NUMBER:
|
|
21426
|
+
return 10;
|
|
21427
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
21428
|
+
return 9;
|
|
21429
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
21430
|
+
return 8;
|
|
21431
|
+
case QRMode.MODE_KANJI:
|
|
21432
|
+
return 8;
|
|
21433
|
+
default:
|
|
21434
|
+
throw "mode:" + mode;
|
|
21435
|
+
}
|
|
21436
|
+
} else if (type < 27) {
|
|
21437
|
+
switch (mode) {
|
|
21438
|
+
case QRMode.MODE_NUMBER:
|
|
21439
|
+
return 12;
|
|
21440
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
21441
|
+
return 11;
|
|
21442
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
21443
|
+
return 16;
|
|
21444
|
+
case QRMode.MODE_KANJI:
|
|
21445
|
+
return 10;
|
|
21446
|
+
default:
|
|
21447
|
+
throw "mode:" + mode;
|
|
21448
|
+
}
|
|
21449
|
+
} else if (type < 41) {
|
|
21450
|
+
switch (mode) {
|
|
21451
|
+
case QRMode.MODE_NUMBER:
|
|
21452
|
+
return 14;
|
|
21453
|
+
case QRMode.MODE_ALPHA_NUM:
|
|
21454
|
+
return 13;
|
|
21455
|
+
case QRMode.MODE_8BIT_BYTE:
|
|
21456
|
+
return 16;
|
|
21457
|
+
case QRMode.MODE_KANJI:
|
|
21458
|
+
return 12;
|
|
21459
|
+
default:
|
|
21460
|
+
throw "mode:" + mode;
|
|
21461
|
+
}
|
|
21462
|
+
} else {
|
|
21463
|
+
throw "type:" + type;
|
|
21464
|
+
}
|
|
21465
|
+
};
|
|
21466
|
+
_this.getLostPoint = function(qrcode3) {
|
|
21467
|
+
var moduleCount = qrcode3.getModuleCount();
|
|
21468
|
+
var lostPoint = 0;
|
|
21469
|
+
for (var row = 0; row < moduleCount; row += 1) {
|
|
21470
|
+
for (var col = 0; col < moduleCount; col += 1) {
|
|
21471
|
+
var sameCount = 0;
|
|
21472
|
+
var dark = qrcode3.isDark(row, col);
|
|
21473
|
+
for (var r = -1; r <= 1; r += 1) {
|
|
21474
|
+
if (row + r < 0 || moduleCount <= row + r) {
|
|
21475
|
+
continue;
|
|
21476
|
+
}
|
|
21477
|
+
for (var c = -1; c <= 1; c += 1) {
|
|
21478
|
+
if (col + c < 0 || moduleCount <= col + c) {
|
|
21479
|
+
continue;
|
|
21480
|
+
}
|
|
21481
|
+
if (r == 0 && c == 0) {
|
|
21482
|
+
continue;
|
|
21483
|
+
}
|
|
21484
|
+
if (dark == qrcode3.isDark(row + r, col + c)) {
|
|
21485
|
+
sameCount += 1;
|
|
21486
|
+
}
|
|
21487
|
+
}
|
|
21488
|
+
}
|
|
21489
|
+
if (sameCount > 5) {
|
|
21490
|
+
lostPoint += 3 + sameCount - 5;
|
|
21491
|
+
}
|
|
21492
|
+
}
|
|
21493
|
+
}
|
|
21494
|
+
;
|
|
21495
|
+
for (var row = 0; row < moduleCount - 1; row += 1) {
|
|
21496
|
+
for (var col = 0; col < moduleCount - 1; col += 1) {
|
|
21497
|
+
var count = 0;
|
|
21498
|
+
if (qrcode3.isDark(row, col)) count += 1;
|
|
21499
|
+
if (qrcode3.isDark(row + 1, col)) count += 1;
|
|
21500
|
+
if (qrcode3.isDark(row, col + 1)) count += 1;
|
|
21501
|
+
if (qrcode3.isDark(row + 1, col + 1)) count += 1;
|
|
21502
|
+
if (count == 0 || count == 4) {
|
|
21503
|
+
lostPoint += 3;
|
|
21504
|
+
}
|
|
21505
|
+
}
|
|
21506
|
+
}
|
|
21507
|
+
for (var row = 0; row < moduleCount; row += 1) {
|
|
21508
|
+
for (var col = 0; col < moduleCount - 6; col += 1) {
|
|
21509
|
+
if (qrcode3.isDark(row, col) && !qrcode3.isDark(row, col + 1) && qrcode3.isDark(row, col + 2) && qrcode3.isDark(row, col + 3) && qrcode3.isDark(row, col + 4) && !qrcode3.isDark(row, col + 5) && qrcode3.isDark(row, col + 6)) {
|
|
21510
|
+
lostPoint += 40;
|
|
21511
|
+
}
|
|
21512
|
+
}
|
|
21513
|
+
}
|
|
21514
|
+
for (var col = 0; col < moduleCount; col += 1) {
|
|
21515
|
+
for (var row = 0; row < moduleCount - 6; row += 1) {
|
|
21516
|
+
if (qrcode3.isDark(row, col) && !qrcode3.isDark(row + 1, col) && qrcode3.isDark(row + 2, col) && qrcode3.isDark(row + 3, col) && qrcode3.isDark(row + 4, col) && !qrcode3.isDark(row + 5, col) && qrcode3.isDark(row + 6, col)) {
|
|
21517
|
+
lostPoint += 40;
|
|
21518
|
+
}
|
|
21519
|
+
}
|
|
21520
|
+
}
|
|
21521
|
+
var darkCount = 0;
|
|
21522
|
+
for (var col = 0; col < moduleCount; col += 1) {
|
|
21523
|
+
for (var row = 0; row < moduleCount; row += 1) {
|
|
21524
|
+
if (qrcode3.isDark(row, col)) {
|
|
21525
|
+
darkCount += 1;
|
|
21526
|
+
}
|
|
21527
|
+
}
|
|
21528
|
+
}
|
|
21529
|
+
var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
|
|
21530
|
+
lostPoint += ratio * 10;
|
|
21531
|
+
return lostPoint;
|
|
21532
|
+
};
|
|
21533
|
+
return _this;
|
|
21534
|
+
})();
|
|
21535
|
+
var QRMath = (function() {
|
|
21536
|
+
var EXP_TABLE = new Array(256);
|
|
21537
|
+
var LOG_TABLE = new Array(256);
|
|
21538
|
+
for (var i = 0; i < 8; i += 1) {
|
|
21539
|
+
EXP_TABLE[i] = 1 << i;
|
|
21540
|
+
}
|
|
21541
|
+
for (var i = 8; i < 256; i += 1) {
|
|
21542
|
+
EXP_TABLE[i] = EXP_TABLE[i - 4] ^ EXP_TABLE[i - 5] ^ EXP_TABLE[i - 6] ^ EXP_TABLE[i - 8];
|
|
21543
|
+
}
|
|
21544
|
+
for (var i = 0; i < 255; i += 1) {
|
|
21545
|
+
LOG_TABLE[EXP_TABLE[i]] = i;
|
|
21546
|
+
}
|
|
21547
|
+
var _this = {};
|
|
21548
|
+
_this.glog = function(n) {
|
|
21549
|
+
if (n < 1) {
|
|
21550
|
+
throw "glog(" + n + ")";
|
|
21551
|
+
}
|
|
21552
|
+
return LOG_TABLE[n];
|
|
21553
|
+
};
|
|
21554
|
+
_this.gexp = function(n) {
|
|
21555
|
+
while (n < 0) {
|
|
21556
|
+
n += 255;
|
|
21557
|
+
}
|
|
21558
|
+
while (n >= 256) {
|
|
21559
|
+
n -= 255;
|
|
21560
|
+
}
|
|
21561
|
+
return EXP_TABLE[n];
|
|
21562
|
+
};
|
|
21563
|
+
return _this;
|
|
21564
|
+
})();
|
|
21565
|
+
function qrPolynomial(num, shift) {
|
|
21566
|
+
if (typeof num.length == "undefined") {
|
|
21567
|
+
throw num.length + "/" + shift;
|
|
21568
|
+
}
|
|
21569
|
+
var _num = (function() {
|
|
21570
|
+
var offset = 0;
|
|
21571
|
+
while (offset < num.length && num[offset] == 0) {
|
|
21572
|
+
offset += 1;
|
|
21573
|
+
}
|
|
21574
|
+
var _num2 = new Array(num.length - offset + shift);
|
|
21575
|
+
for (var i = 0; i < num.length - offset; i += 1) {
|
|
21576
|
+
_num2[i] = num[i + offset];
|
|
21577
|
+
}
|
|
21578
|
+
return _num2;
|
|
21579
|
+
})();
|
|
21580
|
+
var _this = {};
|
|
21581
|
+
_this.getAt = function(index) {
|
|
21582
|
+
return _num[index];
|
|
21583
|
+
};
|
|
21584
|
+
_this.getLength = function() {
|
|
21585
|
+
return _num.length;
|
|
21586
|
+
};
|
|
21587
|
+
_this.multiply = function(e) {
|
|
21588
|
+
var num2 = new Array(_this.getLength() + e.getLength() - 1);
|
|
21589
|
+
for (var i = 0; i < _this.getLength(); i += 1) {
|
|
21590
|
+
for (var j = 0; j < e.getLength(); j += 1) {
|
|
21591
|
+
num2[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i)) + QRMath.glog(e.getAt(j)));
|
|
21592
|
+
}
|
|
21593
|
+
}
|
|
21594
|
+
return qrPolynomial(num2, 0);
|
|
21595
|
+
};
|
|
21596
|
+
_this.mod = function(e) {
|
|
21597
|
+
if (_this.getLength() - e.getLength() < 0) {
|
|
21598
|
+
return _this;
|
|
21599
|
+
}
|
|
21600
|
+
var ratio = QRMath.glog(_this.getAt(0)) - QRMath.glog(e.getAt(0));
|
|
21601
|
+
var num2 = new Array(_this.getLength());
|
|
21602
|
+
for (var i = 0; i < _this.getLength(); i += 1) {
|
|
21603
|
+
num2[i] = _this.getAt(i);
|
|
21604
|
+
}
|
|
21605
|
+
for (var i = 0; i < e.getLength(); i += 1) {
|
|
21606
|
+
num2[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i)) + ratio);
|
|
21607
|
+
}
|
|
21608
|
+
return qrPolynomial(num2, 0).mod(e);
|
|
21609
|
+
};
|
|
21610
|
+
return _this;
|
|
21611
|
+
}
|
|
21612
|
+
;
|
|
21613
|
+
var QRRSBlock = (function() {
|
|
21614
|
+
var RS_BLOCK_TABLE = [
|
|
21615
|
+
// L
|
|
21616
|
+
// M
|
|
21617
|
+
// Q
|
|
21618
|
+
// H
|
|
21619
|
+
// 1
|
|
21620
|
+
[1, 26, 19],
|
|
21621
|
+
[1, 26, 16],
|
|
21622
|
+
[1, 26, 13],
|
|
21623
|
+
[1, 26, 9],
|
|
21624
|
+
// 2
|
|
21625
|
+
[1, 44, 34],
|
|
21626
|
+
[1, 44, 28],
|
|
21627
|
+
[1, 44, 22],
|
|
21628
|
+
[1, 44, 16],
|
|
21629
|
+
// 3
|
|
21630
|
+
[1, 70, 55],
|
|
21631
|
+
[1, 70, 44],
|
|
21632
|
+
[2, 35, 17],
|
|
21633
|
+
[2, 35, 13],
|
|
21634
|
+
// 4
|
|
21635
|
+
[1, 100, 80],
|
|
21636
|
+
[2, 50, 32],
|
|
21637
|
+
[2, 50, 24],
|
|
21638
|
+
[4, 25, 9],
|
|
21639
|
+
// 5
|
|
21640
|
+
[1, 134, 108],
|
|
21641
|
+
[2, 67, 43],
|
|
21642
|
+
[2, 33, 15, 2, 34, 16],
|
|
21643
|
+
[2, 33, 11, 2, 34, 12],
|
|
21644
|
+
// 6
|
|
21645
|
+
[2, 86, 68],
|
|
21646
|
+
[4, 43, 27],
|
|
21647
|
+
[4, 43, 19],
|
|
21648
|
+
[4, 43, 15],
|
|
21649
|
+
// 7
|
|
21650
|
+
[2, 98, 78],
|
|
21651
|
+
[4, 49, 31],
|
|
21652
|
+
[2, 32, 14, 4, 33, 15],
|
|
21653
|
+
[4, 39, 13, 1, 40, 14],
|
|
21654
|
+
// 8
|
|
21655
|
+
[2, 121, 97],
|
|
21656
|
+
[2, 60, 38, 2, 61, 39],
|
|
21657
|
+
[4, 40, 18, 2, 41, 19],
|
|
21658
|
+
[4, 40, 14, 2, 41, 15],
|
|
21659
|
+
// 9
|
|
21660
|
+
[2, 146, 116],
|
|
21661
|
+
[3, 58, 36, 2, 59, 37],
|
|
21662
|
+
[4, 36, 16, 4, 37, 17],
|
|
21663
|
+
[4, 36, 12, 4, 37, 13],
|
|
21664
|
+
// 10
|
|
21665
|
+
[2, 86, 68, 2, 87, 69],
|
|
21666
|
+
[4, 69, 43, 1, 70, 44],
|
|
21667
|
+
[6, 43, 19, 2, 44, 20],
|
|
21668
|
+
[6, 43, 15, 2, 44, 16],
|
|
21669
|
+
// 11
|
|
21670
|
+
[4, 101, 81],
|
|
21671
|
+
[1, 80, 50, 4, 81, 51],
|
|
21672
|
+
[4, 50, 22, 4, 51, 23],
|
|
21673
|
+
[3, 36, 12, 8, 37, 13],
|
|
21674
|
+
// 12
|
|
21675
|
+
[2, 116, 92, 2, 117, 93],
|
|
21676
|
+
[6, 58, 36, 2, 59, 37],
|
|
21677
|
+
[4, 46, 20, 6, 47, 21],
|
|
21678
|
+
[7, 42, 14, 4, 43, 15],
|
|
21679
|
+
// 13
|
|
21680
|
+
[4, 133, 107],
|
|
21681
|
+
[8, 59, 37, 1, 60, 38],
|
|
21682
|
+
[8, 44, 20, 4, 45, 21],
|
|
21683
|
+
[12, 33, 11, 4, 34, 12],
|
|
21684
|
+
// 14
|
|
21685
|
+
[3, 145, 115, 1, 146, 116],
|
|
21686
|
+
[4, 64, 40, 5, 65, 41],
|
|
21687
|
+
[11, 36, 16, 5, 37, 17],
|
|
21688
|
+
[11, 36, 12, 5, 37, 13],
|
|
21689
|
+
// 15
|
|
21690
|
+
[5, 109, 87, 1, 110, 88],
|
|
21691
|
+
[5, 65, 41, 5, 66, 42],
|
|
21692
|
+
[5, 54, 24, 7, 55, 25],
|
|
21693
|
+
[11, 36, 12, 7, 37, 13],
|
|
21694
|
+
// 16
|
|
21695
|
+
[5, 122, 98, 1, 123, 99],
|
|
21696
|
+
[7, 73, 45, 3, 74, 46],
|
|
21697
|
+
[15, 43, 19, 2, 44, 20],
|
|
21698
|
+
[3, 45, 15, 13, 46, 16],
|
|
21699
|
+
// 17
|
|
21700
|
+
[1, 135, 107, 5, 136, 108],
|
|
21701
|
+
[10, 74, 46, 1, 75, 47],
|
|
21702
|
+
[1, 50, 22, 15, 51, 23],
|
|
21703
|
+
[2, 42, 14, 17, 43, 15],
|
|
21704
|
+
// 18
|
|
21705
|
+
[5, 150, 120, 1, 151, 121],
|
|
21706
|
+
[9, 69, 43, 4, 70, 44],
|
|
21707
|
+
[17, 50, 22, 1, 51, 23],
|
|
21708
|
+
[2, 42, 14, 19, 43, 15],
|
|
21709
|
+
// 19
|
|
21710
|
+
[3, 141, 113, 4, 142, 114],
|
|
21711
|
+
[3, 70, 44, 11, 71, 45],
|
|
21712
|
+
[17, 47, 21, 4, 48, 22],
|
|
21713
|
+
[9, 39, 13, 16, 40, 14],
|
|
21714
|
+
// 20
|
|
21715
|
+
[3, 135, 107, 5, 136, 108],
|
|
21716
|
+
[3, 67, 41, 13, 68, 42],
|
|
21717
|
+
[15, 54, 24, 5, 55, 25],
|
|
21718
|
+
[15, 43, 15, 10, 44, 16],
|
|
21719
|
+
// 21
|
|
21720
|
+
[4, 144, 116, 4, 145, 117],
|
|
21721
|
+
[17, 68, 42],
|
|
21722
|
+
[17, 50, 22, 6, 51, 23],
|
|
21723
|
+
[19, 46, 16, 6, 47, 17],
|
|
21724
|
+
// 22
|
|
21725
|
+
[2, 139, 111, 7, 140, 112],
|
|
21726
|
+
[17, 74, 46],
|
|
21727
|
+
[7, 54, 24, 16, 55, 25],
|
|
21728
|
+
[34, 37, 13],
|
|
21729
|
+
// 23
|
|
21730
|
+
[4, 151, 121, 5, 152, 122],
|
|
21731
|
+
[4, 75, 47, 14, 76, 48],
|
|
21732
|
+
[11, 54, 24, 14, 55, 25],
|
|
21733
|
+
[16, 45, 15, 14, 46, 16],
|
|
21734
|
+
// 24
|
|
21735
|
+
[6, 147, 117, 4, 148, 118],
|
|
21736
|
+
[6, 73, 45, 14, 74, 46],
|
|
21737
|
+
[11, 54, 24, 16, 55, 25],
|
|
21738
|
+
[30, 46, 16, 2, 47, 17],
|
|
21739
|
+
// 25
|
|
21740
|
+
[8, 132, 106, 4, 133, 107],
|
|
21741
|
+
[8, 75, 47, 13, 76, 48],
|
|
21742
|
+
[7, 54, 24, 22, 55, 25],
|
|
21743
|
+
[22, 45, 15, 13, 46, 16],
|
|
21744
|
+
// 26
|
|
21745
|
+
[10, 142, 114, 2, 143, 115],
|
|
21746
|
+
[19, 74, 46, 4, 75, 47],
|
|
21747
|
+
[28, 50, 22, 6, 51, 23],
|
|
21748
|
+
[33, 46, 16, 4, 47, 17],
|
|
21749
|
+
// 27
|
|
21750
|
+
[8, 152, 122, 4, 153, 123],
|
|
21751
|
+
[22, 73, 45, 3, 74, 46],
|
|
21752
|
+
[8, 53, 23, 26, 54, 24],
|
|
21753
|
+
[12, 45, 15, 28, 46, 16],
|
|
21754
|
+
// 28
|
|
21755
|
+
[3, 147, 117, 10, 148, 118],
|
|
21756
|
+
[3, 73, 45, 23, 74, 46],
|
|
21757
|
+
[4, 54, 24, 31, 55, 25],
|
|
21758
|
+
[11, 45, 15, 31, 46, 16],
|
|
21759
|
+
// 29
|
|
21760
|
+
[7, 146, 116, 7, 147, 117],
|
|
21761
|
+
[21, 73, 45, 7, 74, 46],
|
|
21762
|
+
[1, 53, 23, 37, 54, 24],
|
|
21763
|
+
[19, 45, 15, 26, 46, 16],
|
|
21764
|
+
// 30
|
|
21765
|
+
[5, 145, 115, 10, 146, 116],
|
|
21766
|
+
[19, 75, 47, 10, 76, 48],
|
|
21767
|
+
[15, 54, 24, 25, 55, 25],
|
|
21768
|
+
[23, 45, 15, 25, 46, 16],
|
|
21769
|
+
// 31
|
|
21770
|
+
[13, 145, 115, 3, 146, 116],
|
|
21771
|
+
[2, 74, 46, 29, 75, 47],
|
|
21772
|
+
[42, 54, 24, 1, 55, 25],
|
|
21773
|
+
[23, 45, 15, 28, 46, 16],
|
|
21774
|
+
// 32
|
|
21775
|
+
[17, 145, 115],
|
|
21776
|
+
[10, 74, 46, 23, 75, 47],
|
|
21777
|
+
[10, 54, 24, 35, 55, 25],
|
|
21778
|
+
[19, 45, 15, 35, 46, 16],
|
|
21779
|
+
// 33
|
|
21780
|
+
[17, 145, 115, 1, 146, 116],
|
|
21781
|
+
[14, 74, 46, 21, 75, 47],
|
|
21782
|
+
[29, 54, 24, 19, 55, 25],
|
|
21783
|
+
[11, 45, 15, 46, 46, 16],
|
|
21784
|
+
// 34
|
|
21785
|
+
[13, 145, 115, 6, 146, 116],
|
|
21786
|
+
[14, 74, 46, 23, 75, 47],
|
|
21787
|
+
[44, 54, 24, 7, 55, 25],
|
|
21788
|
+
[59, 46, 16, 1, 47, 17],
|
|
21789
|
+
// 35
|
|
21790
|
+
[12, 151, 121, 7, 152, 122],
|
|
21791
|
+
[12, 75, 47, 26, 76, 48],
|
|
21792
|
+
[39, 54, 24, 14, 55, 25],
|
|
21793
|
+
[22, 45, 15, 41, 46, 16],
|
|
21794
|
+
// 36
|
|
21795
|
+
[6, 151, 121, 14, 152, 122],
|
|
21796
|
+
[6, 75, 47, 34, 76, 48],
|
|
21797
|
+
[46, 54, 24, 10, 55, 25],
|
|
21798
|
+
[2, 45, 15, 64, 46, 16],
|
|
21799
|
+
// 37
|
|
21800
|
+
[17, 152, 122, 4, 153, 123],
|
|
21801
|
+
[29, 74, 46, 14, 75, 47],
|
|
21802
|
+
[49, 54, 24, 10, 55, 25],
|
|
21803
|
+
[24, 45, 15, 46, 46, 16],
|
|
21804
|
+
// 38
|
|
21805
|
+
[4, 152, 122, 18, 153, 123],
|
|
21806
|
+
[13, 74, 46, 32, 75, 47],
|
|
21807
|
+
[48, 54, 24, 14, 55, 25],
|
|
21808
|
+
[42, 45, 15, 32, 46, 16],
|
|
21809
|
+
// 39
|
|
21810
|
+
[20, 147, 117, 4, 148, 118],
|
|
21811
|
+
[40, 75, 47, 7, 76, 48],
|
|
21812
|
+
[43, 54, 24, 22, 55, 25],
|
|
21813
|
+
[10, 45, 15, 67, 46, 16],
|
|
21814
|
+
// 40
|
|
21815
|
+
[19, 148, 118, 6, 149, 119],
|
|
21816
|
+
[18, 75, 47, 31, 76, 48],
|
|
21817
|
+
[34, 54, 24, 34, 55, 25],
|
|
21818
|
+
[20, 45, 15, 61, 46, 16]
|
|
21819
|
+
];
|
|
21820
|
+
var qrRSBlock = function(totalCount, dataCount) {
|
|
21821
|
+
var _this2 = {};
|
|
21822
|
+
_this2.totalCount = totalCount;
|
|
21823
|
+
_this2.dataCount = dataCount;
|
|
21824
|
+
return _this2;
|
|
21825
|
+
};
|
|
21826
|
+
var _this = {};
|
|
21827
|
+
var getRsBlockTable = function(typeNumber, errorCorrectionLevel) {
|
|
21828
|
+
switch (errorCorrectionLevel) {
|
|
21829
|
+
case QRErrorCorrectionLevel.L:
|
|
21830
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
|
|
21831
|
+
case QRErrorCorrectionLevel.M:
|
|
21832
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
|
|
21833
|
+
case QRErrorCorrectionLevel.Q:
|
|
21834
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
|
|
21835
|
+
case QRErrorCorrectionLevel.H:
|
|
21836
|
+
return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
|
|
21837
|
+
default:
|
|
21838
|
+
return void 0;
|
|
21839
|
+
}
|
|
21840
|
+
};
|
|
21841
|
+
_this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {
|
|
21842
|
+
var rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);
|
|
21843
|
+
if (typeof rsBlock == "undefined") {
|
|
21844
|
+
throw "bad rs block @ typeNumber:" + typeNumber + "/errorCorrectionLevel:" + errorCorrectionLevel;
|
|
21845
|
+
}
|
|
21846
|
+
var length = rsBlock.length / 3;
|
|
21847
|
+
var list = [];
|
|
21848
|
+
for (var i = 0; i < length; i += 1) {
|
|
21849
|
+
var count = rsBlock[i * 3 + 0];
|
|
21850
|
+
var totalCount = rsBlock[i * 3 + 1];
|
|
21851
|
+
var dataCount = rsBlock[i * 3 + 2];
|
|
21852
|
+
for (var j = 0; j < count; j += 1) {
|
|
21853
|
+
list.push(qrRSBlock(totalCount, dataCount));
|
|
21854
|
+
}
|
|
21855
|
+
}
|
|
21856
|
+
return list;
|
|
21857
|
+
};
|
|
21858
|
+
return _this;
|
|
21859
|
+
})();
|
|
21860
|
+
var qrBitBuffer = function() {
|
|
21861
|
+
var _buffer = [];
|
|
21862
|
+
var _length = 0;
|
|
21863
|
+
var _this = {};
|
|
21864
|
+
_this.getBuffer = function() {
|
|
21865
|
+
return _buffer;
|
|
21866
|
+
};
|
|
21867
|
+
_this.getAt = function(index) {
|
|
21868
|
+
var bufIndex = Math.floor(index / 8);
|
|
21869
|
+
return (_buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
|
|
21870
|
+
};
|
|
21871
|
+
_this.put = function(num, length) {
|
|
21872
|
+
for (var i = 0; i < length; i += 1) {
|
|
21873
|
+
_this.putBit((num >>> length - i - 1 & 1) == 1);
|
|
21874
|
+
}
|
|
21875
|
+
};
|
|
21876
|
+
_this.getLengthInBits = function() {
|
|
21877
|
+
return _length;
|
|
21878
|
+
};
|
|
21879
|
+
_this.putBit = function(bit) {
|
|
21880
|
+
var bufIndex = Math.floor(_length / 8);
|
|
21881
|
+
if (_buffer.length <= bufIndex) {
|
|
21882
|
+
_buffer.push(0);
|
|
21883
|
+
}
|
|
21884
|
+
if (bit) {
|
|
21885
|
+
_buffer[bufIndex] |= 128 >>> _length % 8;
|
|
21886
|
+
}
|
|
21887
|
+
_length += 1;
|
|
21888
|
+
};
|
|
21889
|
+
return _this;
|
|
21890
|
+
};
|
|
21891
|
+
var qrNumber = function(data) {
|
|
21892
|
+
var _mode = QRMode.MODE_NUMBER;
|
|
21893
|
+
var _data = data;
|
|
21894
|
+
var _this = {};
|
|
21895
|
+
_this.getMode = function() {
|
|
21896
|
+
return _mode;
|
|
21897
|
+
};
|
|
21898
|
+
_this.getLength = function(buffer) {
|
|
21899
|
+
return _data.length;
|
|
21900
|
+
};
|
|
21901
|
+
_this.write = function(buffer) {
|
|
21902
|
+
var data2 = _data;
|
|
21903
|
+
var i = 0;
|
|
21904
|
+
while (i + 2 < data2.length) {
|
|
21905
|
+
buffer.put(strToNum(data2.substring(i, i + 3)), 10);
|
|
21906
|
+
i += 3;
|
|
21907
|
+
}
|
|
21908
|
+
if (i < data2.length) {
|
|
21909
|
+
if (data2.length - i == 1) {
|
|
21910
|
+
buffer.put(strToNum(data2.substring(i, i + 1)), 4);
|
|
21911
|
+
} else if (data2.length - i == 2) {
|
|
21912
|
+
buffer.put(strToNum(data2.substring(i, i + 2)), 7);
|
|
21913
|
+
}
|
|
21914
|
+
}
|
|
21915
|
+
};
|
|
21916
|
+
var strToNum = function(s) {
|
|
21917
|
+
var num = 0;
|
|
21918
|
+
for (var i = 0; i < s.length; i += 1) {
|
|
21919
|
+
num = num * 10 + chatToNum(s.charAt(i));
|
|
21920
|
+
}
|
|
21921
|
+
return num;
|
|
21922
|
+
};
|
|
21923
|
+
var chatToNum = function(c) {
|
|
21924
|
+
if ("0" <= c && c <= "9") {
|
|
21925
|
+
return c.charCodeAt(0) - "0".charCodeAt(0);
|
|
21926
|
+
}
|
|
21927
|
+
throw "illegal char :" + c;
|
|
21928
|
+
};
|
|
21929
|
+
return _this;
|
|
21930
|
+
};
|
|
21931
|
+
var qrAlphaNum = function(data) {
|
|
21932
|
+
var _mode = QRMode.MODE_ALPHA_NUM;
|
|
21933
|
+
var _data = data;
|
|
21934
|
+
var _this = {};
|
|
21935
|
+
_this.getMode = function() {
|
|
21936
|
+
return _mode;
|
|
21937
|
+
};
|
|
21938
|
+
_this.getLength = function(buffer) {
|
|
21939
|
+
return _data.length;
|
|
21940
|
+
};
|
|
21941
|
+
_this.write = function(buffer) {
|
|
21942
|
+
var s = _data;
|
|
21943
|
+
var i = 0;
|
|
21944
|
+
while (i + 1 < s.length) {
|
|
21945
|
+
buffer.put(
|
|
21946
|
+
getCode(s.charAt(i)) * 45 + getCode(s.charAt(i + 1)),
|
|
21947
|
+
11
|
|
21948
|
+
);
|
|
21949
|
+
i += 2;
|
|
21950
|
+
}
|
|
21951
|
+
if (i < s.length) {
|
|
21952
|
+
buffer.put(getCode(s.charAt(i)), 6);
|
|
21953
|
+
}
|
|
21954
|
+
};
|
|
21955
|
+
var getCode = function(c) {
|
|
21956
|
+
if ("0" <= c && c <= "9") {
|
|
21957
|
+
return c.charCodeAt(0) - "0".charCodeAt(0);
|
|
21958
|
+
} else if ("A" <= c && c <= "Z") {
|
|
21959
|
+
return c.charCodeAt(0) - "A".charCodeAt(0) + 10;
|
|
21960
|
+
} else {
|
|
21961
|
+
switch (c) {
|
|
21962
|
+
case " ":
|
|
21963
|
+
return 36;
|
|
21964
|
+
case "$":
|
|
21965
|
+
return 37;
|
|
21966
|
+
case "%":
|
|
21967
|
+
return 38;
|
|
21968
|
+
case "*":
|
|
21969
|
+
return 39;
|
|
21970
|
+
case "+":
|
|
21971
|
+
return 40;
|
|
21972
|
+
case "-":
|
|
21973
|
+
return 41;
|
|
21974
|
+
case ".":
|
|
21975
|
+
return 42;
|
|
21976
|
+
case "/":
|
|
21977
|
+
return 43;
|
|
21978
|
+
case ":":
|
|
21979
|
+
return 44;
|
|
21980
|
+
default:
|
|
21981
|
+
throw "illegal char :" + c;
|
|
21982
|
+
}
|
|
21983
|
+
}
|
|
21984
|
+
};
|
|
21985
|
+
return _this;
|
|
21986
|
+
};
|
|
21987
|
+
var qr8BitByte = function(data) {
|
|
21988
|
+
var _mode = QRMode.MODE_8BIT_BYTE;
|
|
21989
|
+
var _data = data;
|
|
21990
|
+
var _bytes = qrcode2.stringToBytes(data);
|
|
21991
|
+
var _this = {};
|
|
21992
|
+
_this.getMode = function() {
|
|
21993
|
+
return _mode;
|
|
21994
|
+
};
|
|
21995
|
+
_this.getLength = function(buffer) {
|
|
21996
|
+
return _bytes.length;
|
|
21997
|
+
};
|
|
21998
|
+
_this.write = function(buffer) {
|
|
21999
|
+
for (var i = 0; i < _bytes.length; i += 1) {
|
|
22000
|
+
buffer.put(_bytes[i], 8);
|
|
22001
|
+
}
|
|
22002
|
+
};
|
|
22003
|
+
return _this;
|
|
22004
|
+
};
|
|
22005
|
+
var qrKanji = function(data) {
|
|
22006
|
+
var _mode = QRMode.MODE_KANJI;
|
|
22007
|
+
var _data = data;
|
|
22008
|
+
var stringToBytes = qrcode2.stringToBytesFuncs["SJIS"];
|
|
22009
|
+
if (!stringToBytes) {
|
|
22010
|
+
throw "sjis not supported.";
|
|
22011
|
+
}
|
|
22012
|
+
!(function(c, code) {
|
|
22013
|
+
var test = stringToBytes(c);
|
|
22014
|
+
if (test.length != 2 || (test[0] << 8 | test[1]) != code) {
|
|
22015
|
+
throw "sjis not supported.";
|
|
22016
|
+
}
|
|
22017
|
+
})("\u53CB", 38726);
|
|
22018
|
+
var _bytes = stringToBytes(data);
|
|
22019
|
+
var _this = {};
|
|
22020
|
+
_this.getMode = function() {
|
|
22021
|
+
return _mode;
|
|
22022
|
+
};
|
|
22023
|
+
_this.getLength = function(buffer) {
|
|
22024
|
+
return ~~(_bytes.length / 2);
|
|
22025
|
+
};
|
|
22026
|
+
_this.write = function(buffer) {
|
|
22027
|
+
var data2 = _bytes;
|
|
22028
|
+
var i = 0;
|
|
22029
|
+
while (i + 1 < data2.length) {
|
|
22030
|
+
var c = (255 & data2[i]) << 8 | 255 & data2[i + 1];
|
|
22031
|
+
if (33088 <= c && c <= 40956) {
|
|
22032
|
+
c -= 33088;
|
|
22033
|
+
} else if (57408 <= c && c <= 60351) {
|
|
22034
|
+
c -= 49472;
|
|
22035
|
+
} else {
|
|
22036
|
+
throw "illegal char at " + (i + 1) + "/" + c;
|
|
22037
|
+
}
|
|
22038
|
+
c = (c >>> 8 & 255) * 192 + (c & 255);
|
|
22039
|
+
buffer.put(c, 13);
|
|
22040
|
+
i += 2;
|
|
22041
|
+
}
|
|
22042
|
+
if (i < data2.length) {
|
|
22043
|
+
throw "illegal char at " + (i + 1);
|
|
22044
|
+
}
|
|
22045
|
+
};
|
|
22046
|
+
return _this;
|
|
22047
|
+
};
|
|
22048
|
+
var byteArrayOutputStream = function() {
|
|
22049
|
+
var _bytes = [];
|
|
22050
|
+
var _this = {};
|
|
22051
|
+
_this.writeByte = function(b) {
|
|
22052
|
+
_bytes.push(b & 255);
|
|
22053
|
+
};
|
|
22054
|
+
_this.writeShort = function(i) {
|
|
22055
|
+
_this.writeByte(i);
|
|
22056
|
+
_this.writeByte(i >>> 8);
|
|
22057
|
+
};
|
|
22058
|
+
_this.writeBytes = function(b, off, len) {
|
|
22059
|
+
off = off || 0;
|
|
22060
|
+
len = len || b.length;
|
|
22061
|
+
for (var i = 0; i < len; i += 1) {
|
|
22062
|
+
_this.writeByte(b[i + off]);
|
|
22063
|
+
}
|
|
22064
|
+
};
|
|
22065
|
+
_this.writeString = function(s) {
|
|
22066
|
+
for (var i = 0; i < s.length; i += 1) {
|
|
22067
|
+
_this.writeByte(s.charCodeAt(i));
|
|
22068
|
+
}
|
|
22069
|
+
};
|
|
22070
|
+
_this.toByteArray = function() {
|
|
22071
|
+
return _bytes;
|
|
22072
|
+
};
|
|
22073
|
+
_this.toString = function() {
|
|
22074
|
+
var s = "";
|
|
22075
|
+
s += "[";
|
|
22076
|
+
for (var i = 0; i < _bytes.length; i += 1) {
|
|
22077
|
+
if (i > 0) {
|
|
22078
|
+
s += ",";
|
|
22079
|
+
}
|
|
22080
|
+
s += _bytes[i];
|
|
22081
|
+
}
|
|
22082
|
+
s += "]";
|
|
22083
|
+
return s;
|
|
22084
|
+
};
|
|
22085
|
+
return _this;
|
|
22086
|
+
};
|
|
22087
|
+
var base64EncodeOutputStream = function() {
|
|
22088
|
+
var _buffer = 0;
|
|
22089
|
+
var _buflen = 0;
|
|
22090
|
+
var _length = 0;
|
|
22091
|
+
var _base64 = "";
|
|
22092
|
+
var _this = {};
|
|
22093
|
+
var writeEncoded = function(b) {
|
|
22094
|
+
_base64 += String.fromCharCode(encode(b & 63));
|
|
22095
|
+
};
|
|
22096
|
+
var encode = function(n) {
|
|
22097
|
+
if (n < 0) {
|
|
22098
|
+
} else if (n < 26) {
|
|
22099
|
+
return 65 + n;
|
|
22100
|
+
} else if (n < 52) {
|
|
22101
|
+
return 97 + (n - 26);
|
|
22102
|
+
} else if (n < 62) {
|
|
22103
|
+
return 48 + (n - 52);
|
|
22104
|
+
} else if (n == 62) {
|
|
22105
|
+
return 43;
|
|
22106
|
+
} else if (n == 63) {
|
|
22107
|
+
return 47;
|
|
22108
|
+
}
|
|
22109
|
+
throw "n:" + n;
|
|
22110
|
+
};
|
|
22111
|
+
_this.writeByte = function(n) {
|
|
22112
|
+
_buffer = _buffer << 8 | n & 255;
|
|
22113
|
+
_buflen += 8;
|
|
22114
|
+
_length += 1;
|
|
22115
|
+
while (_buflen >= 6) {
|
|
22116
|
+
writeEncoded(_buffer >>> _buflen - 6);
|
|
22117
|
+
_buflen -= 6;
|
|
22118
|
+
}
|
|
22119
|
+
};
|
|
22120
|
+
_this.flush = function() {
|
|
22121
|
+
if (_buflen > 0) {
|
|
22122
|
+
writeEncoded(_buffer << 6 - _buflen);
|
|
22123
|
+
_buffer = 0;
|
|
22124
|
+
_buflen = 0;
|
|
22125
|
+
}
|
|
22126
|
+
if (_length % 3 != 0) {
|
|
22127
|
+
var padlen = 3 - _length % 3;
|
|
22128
|
+
for (var i = 0; i < padlen; i += 1) {
|
|
22129
|
+
_base64 += "=";
|
|
22130
|
+
}
|
|
22131
|
+
}
|
|
22132
|
+
};
|
|
22133
|
+
_this.toString = function() {
|
|
22134
|
+
return _base64;
|
|
22135
|
+
};
|
|
22136
|
+
return _this;
|
|
22137
|
+
};
|
|
22138
|
+
var base64DecodeInputStream = function(str) {
|
|
22139
|
+
var _str = str;
|
|
22140
|
+
var _pos = 0;
|
|
22141
|
+
var _buffer = 0;
|
|
22142
|
+
var _buflen = 0;
|
|
22143
|
+
var _this = {};
|
|
22144
|
+
_this.read = function() {
|
|
22145
|
+
while (_buflen < 8) {
|
|
22146
|
+
if (_pos >= _str.length) {
|
|
22147
|
+
if (_buflen == 0) {
|
|
22148
|
+
return -1;
|
|
22149
|
+
}
|
|
22150
|
+
throw "unexpected end of file./" + _buflen;
|
|
22151
|
+
}
|
|
22152
|
+
var c = _str.charAt(_pos);
|
|
22153
|
+
_pos += 1;
|
|
22154
|
+
if (c == "=") {
|
|
22155
|
+
_buflen = 0;
|
|
22156
|
+
return -1;
|
|
22157
|
+
} else if (c.match(/^\s$/)) {
|
|
22158
|
+
continue;
|
|
22159
|
+
}
|
|
22160
|
+
_buffer = _buffer << 6 | decode(c.charCodeAt(0));
|
|
22161
|
+
_buflen += 6;
|
|
22162
|
+
}
|
|
22163
|
+
var n = _buffer >>> _buflen - 8 & 255;
|
|
22164
|
+
_buflen -= 8;
|
|
22165
|
+
return n;
|
|
22166
|
+
};
|
|
22167
|
+
var decode = function(c) {
|
|
22168
|
+
if (65 <= c && c <= 90) {
|
|
22169
|
+
return c - 65;
|
|
22170
|
+
} else if (97 <= c && c <= 122) {
|
|
22171
|
+
return c - 97 + 26;
|
|
22172
|
+
} else if (48 <= c && c <= 57) {
|
|
22173
|
+
return c - 48 + 52;
|
|
22174
|
+
} else if (c == 43) {
|
|
22175
|
+
return 62;
|
|
22176
|
+
} else if (c == 47) {
|
|
22177
|
+
return 63;
|
|
22178
|
+
} else {
|
|
22179
|
+
throw "c:" + c;
|
|
22180
|
+
}
|
|
22181
|
+
};
|
|
22182
|
+
return _this;
|
|
22183
|
+
};
|
|
22184
|
+
var gifImage = function(width, height) {
|
|
22185
|
+
var _width = width;
|
|
22186
|
+
var _height = height;
|
|
22187
|
+
var _data = new Array(width * height);
|
|
22188
|
+
var _this = {};
|
|
22189
|
+
_this.setPixel = function(x, y, pixel) {
|
|
22190
|
+
_data[y * _width + x] = pixel;
|
|
22191
|
+
};
|
|
22192
|
+
_this.write = function(out) {
|
|
22193
|
+
out.writeString("GIF87a");
|
|
22194
|
+
out.writeShort(_width);
|
|
22195
|
+
out.writeShort(_height);
|
|
22196
|
+
out.writeByte(128);
|
|
22197
|
+
out.writeByte(0);
|
|
22198
|
+
out.writeByte(0);
|
|
22199
|
+
out.writeByte(0);
|
|
22200
|
+
out.writeByte(0);
|
|
22201
|
+
out.writeByte(0);
|
|
22202
|
+
out.writeByte(255);
|
|
22203
|
+
out.writeByte(255);
|
|
22204
|
+
out.writeByte(255);
|
|
22205
|
+
out.writeString(",");
|
|
22206
|
+
out.writeShort(0);
|
|
22207
|
+
out.writeShort(0);
|
|
22208
|
+
out.writeShort(_width);
|
|
22209
|
+
out.writeShort(_height);
|
|
22210
|
+
out.writeByte(0);
|
|
22211
|
+
var lzwMinCodeSize = 2;
|
|
22212
|
+
var raster = getLZWRaster(lzwMinCodeSize);
|
|
22213
|
+
out.writeByte(lzwMinCodeSize);
|
|
22214
|
+
var offset = 0;
|
|
22215
|
+
while (raster.length - offset > 255) {
|
|
22216
|
+
out.writeByte(255);
|
|
22217
|
+
out.writeBytes(raster, offset, 255);
|
|
22218
|
+
offset += 255;
|
|
22219
|
+
}
|
|
22220
|
+
out.writeByte(raster.length - offset);
|
|
22221
|
+
out.writeBytes(raster, offset, raster.length - offset);
|
|
22222
|
+
out.writeByte(0);
|
|
22223
|
+
out.writeString(";");
|
|
22224
|
+
};
|
|
22225
|
+
var bitOutputStream = function(out) {
|
|
22226
|
+
var _out = out;
|
|
22227
|
+
var _bitLength = 0;
|
|
22228
|
+
var _bitBuffer = 0;
|
|
22229
|
+
var _this2 = {};
|
|
22230
|
+
_this2.write = function(data, length) {
|
|
22231
|
+
if (data >>> length != 0) {
|
|
22232
|
+
throw "length over";
|
|
22233
|
+
}
|
|
22234
|
+
while (_bitLength + length >= 8) {
|
|
22235
|
+
_out.writeByte(255 & (data << _bitLength | _bitBuffer));
|
|
22236
|
+
length -= 8 - _bitLength;
|
|
22237
|
+
data >>>= 8 - _bitLength;
|
|
22238
|
+
_bitBuffer = 0;
|
|
22239
|
+
_bitLength = 0;
|
|
22240
|
+
}
|
|
22241
|
+
_bitBuffer = data << _bitLength | _bitBuffer;
|
|
22242
|
+
_bitLength = _bitLength + length;
|
|
22243
|
+
};
|
|
22244
|
+
_this2.flush = function() {
|
|
22245
|
+
if (_bitLength > 0) {
|
|
22246
|
+
_out.writeByte(_bitBuffer);
|
|
22247
|
+
}
|
|
22248
|
+
};
|
|
22249
|
+
return _this2;
|
|
22250
|
+
};
|
|
22251
|
+
var getLZWRaster = function(lzwMinCodeSize) {
|
|
22252
|
+
var clearCode = 1 << lzwMinCodeSize;
|
|
22253
|
+
var endCode = (1 << lzwMinCodeSize) + 1;
|
|
22254
|
+
var bitLength = lzwMinCodeSize + 1;
|
|
22255
|
+
var table = lzwTable();
|
|
22256
|
+
for (var i = 0; i < clearCode; i += 1) {
|
|
22257
|
+
table.add(String.fromCharCode(i));
|
|
22258
|
+
}
|
|
22259
|
+
table.add(String.fromCharCode(clearCode));
|
|
22260
|
+
table.add(String.fromCharCode(endCode));
|
|
22261
|
+
var byteOut = byteArrayOutputStream();
|
|
22262
|
+
var bitOut = bitOutputStream(byteOut);
|
|
22263
|
+
bitOut.write(clearCode, bitLength);
|
|
22264
|
+
var dataIndex = 0;
|
|
22265
|
+
var s = String.fromCharCode(_data[dataIndex]);
|
|
22266
|
+
dataIndex += 1;
|
|
22267
|
+
while (dataIndex < _data.length) {
|
|
22268
|
+
var c = String.fromCharCode(_data[dataIndex]);
|
|
22269
|
+
dataIndex += 1;
|
|
22270
|
+
if (table.contains(s + c)) {
|
|
22271
|
+
s = s + c;
|
|
22272
|
+
} else {
|
|
22273
|
+
bitOut.write(table.indexOf(s), bitLength);
|
|
22274
|
+
if (table.size() < 4095) {
|
|
22275
|
+
if (table.size() == 1 << bitLength) {
|
|
22276
|
+
bitLength += 1;
|
|
22277
|
+
}
|
|
22278
|
+
table.add(s + c);
|
|
22279
|
+
}
|
|
22280
|
+
s = c;
|
|
22281
|
+
}
|
|
22282
|
+
}
|
|
22283
|
+
bitOut.write(table.indexOf(s), bitLength);
|
|
22284
|
+
bitOut.write(endCode, bitLength);
|
|
22285
|
+
bitOut.flush();
|
|
22286
|
+
return byteOut.toByteArray();
|
|
22287
|
+
};
|
|
22288
|
+
var lzwTable = function() {
|
|
22289
|
+
var _map = {};
|
|
22290
|
+
var _size = 0;
|
|
22291
|
+
var _this2 = {};
|
|
22292
|
+
_this2.add = function(key) {
|
|
22293
|
+
if (_this2.contains(key)) {
|
|
22294
|
+
throw "dup key:" + key;
|
|
22295
|
+
}
|
|
22296
|
+
_map[key] = _size;
|
|
22297
|
+
_size += 1;
|
|
22298
|
+
};
|
|
22299
|
+
_this2.size = function() {
|
|
22300
|
+
return _size;
|
|
22301
|
+
};
|
|
22302
|
+
_this2.indexOf = function(key) {
|
|
22303
|
+
return _map[key];
|
|
22304
|
+
};
|
|
22305
|
+
_this2.contains = function(key) {
|
|
22306
|
+
return typeof _map[key] != "undefined";
|
|
22307
|
+
};
|
|
22308
|
+
return _this2;
|
|
22309
|
+
};
|
|
22310
|
+
return _this;
|
|
22311
|
+
};
|
|
22312
|
+
var createDataURL = function(width, height, getPixel) {
|
|
22313
|
+
var gif = gifImage(width, height);
|
|
22314
|
+
for (var y = 0; y < height; y += 1) {
|
|
22315
|
+
for (var x = 0; x < width; x += 1) {
|
|
22316
|
+
gif.setPixel(x, y, getPixel(x, y));
|
|
22317
|
+
}
|
|
22318
|
+
}
|
|
22319
|
+
var b = byteArrayOutputStream();
|
|
22320
|
+
gif.write(b);
|
|
22321
|
+
var base64 = base64EncodeOutputStream();
|
|
22322
|
+
var bytes = b.toByteArray();
|
|
22323
|
+
for (var i = 0; i < bytes.length; i += 1) {
|
|
22324
|
+
base64.writeByte(bytes[i]);
|
|
22325
|
+
}
|
|
22326
|
+
base64.flush();
|
|
22327
|
+
return "data:image/gif;base64," + base64;
|
|
22328
|
+
};
|
|
22329
|
+
return qrcode2;
|
|
22330
|
+
})();
|
|
22331
|
+
!(function() {
|
|
22332
|
+
qrcode.stringToBytesFuncs["UTF-8"] = function(s) {
|
|
22333
|
+
function toUTF8Array(str) {
|
|
22334
|
+
var utf8 = [];
|
|
22335
|
+
for (var i = 0; i < str.length; i++) {
|
|
22336
|
+
var charcode = str.charCodeAt(i);
|
|
22337
|
+
if (charcode < 128) utf8.push(charcode);
|
|
22338
|
+
else if (charcode < 2048) {
|
|
22339
|
+
utf8.push(
|
|
22340
|
+
192 | charcode >> 6,
|
|
22341
|
+
128 | charcode & 63
|
|
22342
|
+
);
|
|
22343
|
+
} else if (charcode < 55296 || charcode >= 57344) {
|
|
22344
|
+
utf8.push(
|
|
22345
|
+
224 | charcode >> 12,
|
|
22346
|
+
128 | charcode >> 6 & 63,
|
|
22347
|
+
128 | charcode & 63
|
|
22348
|
+
);
|
|
22349
|
+
} else {
|
|
22350
|
+
i++;
|
|
22351
|
+
charcode = 65536 + ((charcode & 1023) << 10 | str.charCodeAt(i) & 1023);
|
|
22352
|
+
utf8.push(
|
|
22353
|
+
240 | charcode >> 18,
|
|
22354
|
+
128 | charcode >> 12 & 63,
|
|
22355
|
+
128 | charcode >> 6 & 63,
|
|
22356
|
+
128 | charcode & 63
|
|
22357
|
+
);
|
|
22358
|
+
}
|
|
22359
|
+
}
|
|
22360
|
+
return utf8;
|
|
22361
|
+
}
|
|
22362
|
+
return toUTF8Array(s);
|
|
22363
|
+
};
|
|
22364
|
+
})();
|
|
22365
|
+
(function(factory) {
|
|
22366
|
+
if (typeof define === "function" && define.amd) {
|
|
22367
|
+
define([], factory);
|
|
22368
|
+
} else if (typeof exports2 === "object") {
|
|
22369
|
+
module2.exports = factory();
|
|
22370
|
+
}
|
|
22371
|
+
})(function() {
|
|
22372
|
+
return qrcode;
|
|
22373
|
+
});
|
|
22374
|
+
}
|
|
22375
|
+
});
|
|
22376
|
+
|
|
22377
|
+
// ../../packages/shuttle/dist/pairing/terminal.js
|
|
22378
|
+
var require_terminal = __commonJS({
|
|
22379
|
+
"../../packages/shuttle/dist/pairing/terminal.js"(exports2) {
|
|
22380
|
+
"use strict";
|
|
22381
|
+
var __importDefault = exports2 && exports2.__importDefault || function(mod) {
|
|
22382
|
+
return mod && mod.__esModule ? mod : { "default": mod };
|
|
22383
|
+
};
|
|
22384
|
+
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
22385
|
+
exports2.renderPairingInvitation = renderPairingInvitation;
|
|
22386
|
+
exports2.hyperlink = hyperlink;
|
|
22387
|
+
exports2.qrBlock = qrBlock;
|
|
22388
|
+
var qrcode_generator_1 = __importDefault(require_qrcode());
|
|
22389
|
+
var INK = 0;
|
|
22390
|
+
var PAPER = 15;
|
|
22391
|
+
var HALF = "\u2580";
|
|
22392
|
+
var RESET = "\x1B[0m";
|
|
22393
|
+
var QUIET = 4;
|
|
22394
|
+
function renderPairingInvitation(invitation) {
|
|
22395
|
+
const lines = [invitation.header, ""];
|
|
22396
|
+
if (invitation.rich) {
|
|
22397
|
+
const code = qrBlock(invitation.verificationUriComplete, invitation.columns);
|
|
22398
|
+
if (code.length > 0) {
|
|
22399
|
+
lines.push(...code, "");
|
|
22400
|
+
}
|
|
22401
|
+
}
|
|
22402
|
+
lines.push(`Open: ${invitation.rich ? hyperlink(invitation.verificationUriComplete) : invitation.verificationUriComplete}`);
|
|
22403
|
+
lines.push(`User code: ${invitation.userCode}`);
|
|
22404
|
+
lines.push("");
|
|
22405
|
+
lines.push(`Waiting for verification (expires in ${invitation.expiresIn}s)...`);
|
|
22406
|
+
return lines;
|
|
22407
|
+
}
|
|
22408
|
+
function hyperlink(url, label = url) {
|
|
22409
|
+
return `\x1B]8;;${url}\x1B\\${label}\x1B]8;;\x1B\\`;
|
|
22410
|
+
}
|
|
22411
|
+
function qrBlock(text, columns) {
|
|
22412
|
+
const qr = (0, qrcode_generator_1.default)(0, "M");
|
|
22413
|
+
qr.addData(text);
|
|
22414
|
+
qr.make();
|
|
22415
|
+
const count = qr.getModuleCount();
|
|
22416
|
+
const size = count + QUIET * 2;
|
|
22417
|
+
if (columns !== void 0 && size > columns)
|
|
22418
|
+
return [];
|
|
22419
|
+
const dark = (row, column) => {
|
|
22420
|
+
const r = row - QUIET;
|
|
22421
|
+
const c = column - QUIET;
|
|
22422
|
+
if (r < 0 || c < 0 || r >= count || c >= count)
|
|
22423
|
+
return false;
|
|
22424
|
+
return qr.isDark(r, c);
|
|
22425
|
+
};
|
|
22426
|
+
const lines = [];
|
|
22427
|
+
for (let row = 0; row < size; row += 2) {
|
|
22428
|
+
let line = "";
|
|
22429
|
+
for (let column = 0; column < size; column++) {
|
|
22430
|
+
const top = dark(row, column) ? INK : PAPER;
|
|
22431
|
+
const bottom = row + 1 < size && dark(row + 1, column) ? INK : PAPER;
|
|
22432
|
+
line += `\x1B[38;5;${top};48;5;${bottom}m${HALF}`;
|
|
22433
|
+
}
|
|
22434
|
+
lines.push(line + RESET);
|
|
22435
|
+
}
|
|
22436
|
+
return lines;
|
|
22437
|
+
}
|
|
22438
|
+
}
|
|
22439
|
+
});
|
|
22440
|
+
|
|
20575
22441
|
// ../../packages/shuttle/dist/pairing/device-code.js
|
|
20576
22442
|
var require_device_code = __commonJS({
|
|
20577
22443
|
"../../packages/shuttle/dist/pairing/device-code.js"(exports2) {
|
|
20578
22444
|
"use strict";
|
|
20579
22445
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
20580
22446
|
exports2.pair = pair;
|
|
22447
|
+
exports2.webFirstRemedy = webFirstRemedy;
|
|
20581
22448
|
var os_1 = require("os");
|
|
20582
22449
|
var apply_1 = require_apply();
|
|
20583
22450
|
var version_check_1 = require_version_check();
|
|
22451
|
+
var typed_exit_1 = require_typed_exit();
|
|
22452
|
+
var terminal_1 = require_terminal();
|
|
20584
22453
|
async function pair(opts) {
|
|
20585
22454
|
const fetcher = opts.fetcher ?? globalThis.fetch;
|
|
20586
22455
|
const log = opts.log ?? ((line) => console.log(line));
|
|
@@ -20602,18 +22471,31 @@ var require_device_code = __commonJS({
|
|
|
20602
22471
|
});
|
|
20603
22472
|
log(opts.brand.strings?.pairingDoneMessage ?? `Paired ${displayName}.`);
|
|
20604
22473
|
} else {
|
|
20605
|
-
|
|
20606
|
-
|
|
20607
|
-
|
|
20608
|
-
|
|
20609
|
-
|
|
22474
|
+
let device;
|
|
22475
|
+
try {
|
|
22476
|
+
device = await startDeviceCode({
|
|
22477
|
+
keepApiUrl: reg.keepApiUrl,
|
|
22478
|
+
oauthClientId: reg.oauthClientId,
|
|
22479
|
+
fetcher,
|
|
22480
|
+
brand: opts.brand
|
|
22481
|
+
});
|
|
22482
|
+
} catch (err) {
|
|
22483
|
+
if ((0, typed_exit_1.isTypedExit)(err))
|
|
22484
|
+
throw err;
|
|
22485
|
+
throw new Error(webFirstRemedy(opts.brand, err));
|
|
22486
|
+
}
|
|
22487
|
+
opts.onVerificationUri?.(device.verificationUri);
|
|
22488
|
+
const invitation = (0, terminal_1.renderPairingInvitation)({
|
|
22489
|
+
header: opts.brand.strings?.pairingHeader ?? `Pair your ${opts.brand.product.title}`,
|
|
22490
|
+
verificationUri: device.verificationUri,
|
|
22491
|
+
verificationUriComplete: device.verificationUriComplete ?? device.verificationUri,
|
|
22492
|
+
userCode: device.userCode,
|
|
22493
|
+
expiresIn: device.expiresIn,
|
|
22494
|
+
rich: opts.rich ?? Boolean(process.stdout.isTTY),
|
|
22495
|
+
...columnsOf(opts) !== void 0 ? { columns: columnsOf(opts) } : {}
|
|
20610
22496
|
});
|
|
20611
|
-
|
|
20612
|
-
|
|
20613
|
-
log(`Visit: ${device.verificationUri}`);
|
|
20614
|
-
log(`User code: ${device.userCode}`);
|
|
20615
|
-
log("");
|
|
20616
|
-
log(`Waiting for verification (expires in ${device.expiresIn}s)...`);
|
|
22497
|
+
for (const line of invitation)
|
|
22498
|
+
log(line);
|
|
20617
22499
|
token = await pollForToken({
|
|
20618
22500
|
keepApiUrl: reg.keepApiUrl,
|
|
20619
22501
|
oauthClientId: reg.oauthClientId,
|
|
@@ -20681,6 +22563,19 @@ var require_device_code = __commonJS({
|
|
|
20681
22563
|
const poolsJson = await readJson(poolsRes);
|
|
20682
22564
|
return poolsJson.data.pools;
|
|
20683
22565
|
}
|
|
22566
|
+
function webFirstRemedy(brand, cause) {
|
|
22567
|
+
const reason = cause instanceof Error ? cause.message : String(cause);
|
|
22568
|
+
const where = brand.product.webPairingUrl ? brand.product.webPairingUrl : `your ${brand.product.title} web app, under Settings, Sifters`;
|
|
22569
|
+
return [
|
|
22570
|
+
`Could not start browser pairing: ${reason}`,
|
|
22571
|
+
"",
|
|
22572
|
+
`Pair from the web instead: open ${where}, press Pair a Sifter, and run the`,
|
|
22573
|
+
`command it shows (${brand.product.cliBinary} init --pairing-code=<code>).`
|
|
22574
|
+
].join("\n");
|
|
22575
|
+
}
|
|
22576
|
+
function columnsOf(opts) {
|
|
22577
|
+
return opts.columns ?? process.stdout.columns;
|
|
22578
|
+
}
|
|
20684
22579
|
async function startDeviceCode(opts) {
|
|
20685
22580
|
const url = `${opts.keepApiUrl.replace(/\/$/, "")}/api/oauth/device`;
|
|
20686
22581
|
const response = await opts.fetcher(url, {
|
|
@@ -20933,24 +22828,31 @@ var require_init = __commonJS({
|
|
|
20933
22828
|
var fsp = __importStar(require("fs/promises"));
|
|
20934
22829
|
var commander_1 = require_commander();
|
|
20935
22830
|
var apply_1 = require_apply();
|
|
22831
|
+
var environment_1 = require_environment();
|
|
20936
22832
|
var device_code_1 = require_device_code();
|
|
20937
22833
|
var store_1 = require_store();
|
|
20938
22834
|
var spend_store_1 = require_spend_store();
|
|
20939
22835
|
var typed_exit_1 = require_typed_exit();
|
|
20940
22836
|
var preflight_1 = require_preflight();
|
|
20941
22837
|
function buildInitCommand(brand) {
|
|
20942
|
-
return new commander_1.Command("init").description(`Pair this ${brand.product.title} with Keep and seed local state`).option("--pairing-code <code>", "Pairing code from the product UI").option("--keep-url <url>", "Override the Keep API URL
|
|
22838
|
+
return new commander_1.Command("init").description(`Pair this ${brand.product.title} with Keep and seed local state`).option("--pairing-code <code>", "Pairing code from the product UI").option("--keep-url <url>", "Override the Keep API URL, beating both the profile's environment and the brand default").option("--jobs-url <url>", "Override the Jobs API URL, beating both the profile's environment and the brand default").option("--json", "Print the resolved pairing environment as JSON, one object per line; the rest of the output is unchanged").option("--executor <type>", `Executor to write into ${brand.product.id}.yaml (e.g. claude-code). Must be in the brand's executor allowlist.`).option("--poll-interval <ms>", "Run-loop poll interval in milliseconds").option("--daily-cap <tokens>", "Daily token cap; overrides the brand default").option("--monthly-cap <tokens>", "Monthly token cap; overrides the brand default").option("--tmp-dir <path>", "Base directory for each job's throwaway checkout (defaults to the OS temp dir; set only when that is unsuitable)").option("-p, --profile <name>", profileFlagDescription(brand)).action(async (options) => {
|
|
20943
22839
|
try {
|
|
20944
22840
|
const profile = (0, apply_1.resolveProfile)(brand, options.profile);
|
|
20945
22841
|
const setupOptions = parseSetupOptions(brand, options);
|
|
20946
|
-
const
|
|
20947
|
-
|
|
20948
|
-
|
|
20949
|
-
|
|
20950
|
-
|
|
20951
|
-
|
|
20952
|
-
|
|
20953
|
-
|
|
22842
|
+
const asJson = options.json === true;
|
|
22843
|
+
const environment = (0, environment_1.resolveEnvironment)(brand, profile, {
|
|
22844
|
+
keepUrl: options.keepUrl,
|
|
22845
|
+
jobsUrl: options.jobsUrl
|
|
22846
|
+
});
|
|
22847
|
+
const effectiveBrand = (0, environment_1.applyEnvironment)(brand, environment);
|
|
22848
|
+
const report = (0, environment_1.isWorthReporting)(environment);
|
|
22849
|
+
if (report) {
|
|
22850
|
+
if (asJson)
|
|
22851
|
+
console.log((0, environment_1.environmentReportJson)(environment));
|
|
22852
|
+
else
|
|
22853
|
+
for (const line of (0, environment_1.renderEnvironmentReport)(environment))
|
|
22854
|
+
console.log(line);
|
|
22855
|
+
}
|
|
20954
22856
|
const paths = (0, apply_1.resolvePaths)(effectiveBrand, profile);
|
|
20955
22857
|
await fsp.mkdir(paths.configDir, { recursive: true });
|
|
20956
22858
|
for (const step of effectiveBrand.setupSteps ?? []) {
|
|
@@ -20980,7 +22882,14 @@ var require_init = __commonJS({
|
|
|
20980
22882
|
}
|
|
20981
22883
|
const pairing = await (0, device_code_1.pair)({
|
|
20982
22884
|
brand: effectiveBrand,
|
|
20983
|
-
pairingCode: options.pairingCode
|
|
22885
|
+
pairingCode: options.pairingCode,
|
|
22886
|
+
// Keep's answer is the half no local table can predict: it
|
|
22887
|
+
// builds `verification_uri` from its OWN configuration, so a
|
|
22888
|
+
// tier pointed at a page nobody serves looks exactly like a
|
|
22889
|
+
// healthy one until an operator opens the link.
|
|
22890
|
+
...report ? {
|
|
22891
|
+
onVerificationUri: (uri) => console.log(asJson ? (0, environment_1.verificationJson)(uri) : (0, environment_1.renderVerificationLine)(uri))
|
|
22892
|
+
} : {}
|
|
20984
22893
|
});
|
|
20985
22894
|
const store = new store_1.PairingConfigStore(paths.configFile);
|
|
20986
22895
|
await store.write(pairing);
|
|
@@ -21020,6 +22929,13 @@ var require_init = __commonJS({
|
|
|
21020
22929
|
}
|
|
21021
22930
|
});
|
|
21022
22931
|
}
|
|
22932
|
+
function profileFlagDescription(brand) {
|
|
22933
|
+
const known = Object.keys(brand.environments ?? {}).sort();
|
|
22934
|
+
const base = 'Config profile to pair into (isolates this pairing under its own dir; default "default")';
|
|
22935
|
+
if (known.length === 0)
|
|
22936
|
+
return base;
|
|
22937
|
+
return `${base}. These names also select the backend: ${known.join(", ")}`;
|
|
22938
|
+
}
|
|
21023
22939
|
function parseSetupOptions(brand, raw) {
|
|
21024
22940
|
const out = {};
|
|
21025
22941
|
if (raw.executor !== void 0) {
|
|
@@ -23317,7 +25233,8 @@ var require_dist5 = __commonJS({
|
|
|
23317
25233
|
"../../packages/shuttle/dist/index.js"(exports2) {
|
|
23318
25234
|
"use strict";
|
|
23319
25235
|
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
23320
|
-
exports2.
|
|
25236
|
+
exports2.listPairings = exports2.PairingConfigStore = exports2.pair = exports2.DEFAULT_REFUSAL_MESSAGE = exports2.DEFAULT_MONTHLY_PERIOD = exports2.DEFAULT_DAILY_PERIOD = exports2.SUBSTRATE_BRAND = exports2.verificationJson = exports2.resolveEnvironment = exports2.renderVerificationLine = exports2.renderEnvironmentReport = exports2.isWorthReporting = exports2.hostOf = exports2.environmentReportJson = exports2.applyEnvironment = exports2.renderTemplate = exports2.expandHome = exports2.resolvePaths = exports2.SpendStore = exports2.AuditLogStore = exports2.createSpendTrackerObserver = exports2.createAuditLogObserver = exports2.createLoggerObserver = exports2.SpendCapExceeded = exports2.ObserverChain = exports2.createCustomScriptExecutor = exports2.createWebhookExecutor = exports2.createHttpApiExecutor = exports2.createClaudeCodeExecutor = exports2.ExecutorRegistry = exports2.AgentCredentialRevokedError = exports2.runPreflight = exports2.renderLines = exports2.renderJson = exports2.printReport = exports2.hasFailure = exports2.createProbes = exports2.checksFor = exports2.PREFLIGHT_FLOORS = exports2.PREFLIGHT_EXIT_CODE = exports2.CHECKS = exports2.readResponseLatestVersion = exports2.checkResponseMinVersion = exports2.compareSemver = exports2.UpgradeRequiredError = exports2.LATEST_VERSION_HEADER = exports2.MIN_VERSION_HEADER = exports2.loadConfig = exports2.Shuttle = exports2.createCli = void 0;
|
|
25237
|
+
exports2.revokePairing = void 0;
|
|
23321
25238
|
var cli_1 = require_cli();
|
|
23322
25239
|
Object.defineProperty(exports2, "createCli", { enumerable: true, get: function() {
|
|
23323
25240
|
return cli_1.createCli;
|
|
@@ -23441,6 +25358,31 @@ var require_dist5 = __commonJS({
|
|
|
23441
25358
|
Object.defineProperty(exports2, "renderTemplate", { enumerable: true, get: function() {
|
|
23442
25359
|
return apply_1.renderTemplate;
|
|
23443
25360
|
} });
|
|
25361
|
+
var environment_1 = require_environment();
|
|
25362
|
+
Object.defineProperty(exports2, "applyEnvironment", { enumerable: true, get: function() {
|
|
25363
|
+
return environment_1.applyEnvironment;
|
|
25364
|
+
} });
|
|
25365
|
+
Object.defineProperty(exports2, "environmentReportJson", { enumerable: true, get: function() {
|
|
25366
|
+
return environment_1.environmentReportJson;
|
|
25367
|
+
} });
|
|
25368
|
+
Object.defineProperty(exports2, "hostOf", { enumerable: true, get: function() {
|
|
25369
|
+
return environment_1.hostOf;
|
|
25370
|
+
} });
|
|
25371
|
+
Object.defineProperty(exports2, "isWorthReporting", { enumerable: true, get: function() {
|
|
25372
|
+
return environment_1.isWorthReporting;
|
|
25373
|
+
} });
|
|
25374
|
+
Object.defineProperty(exports2, "renderEnvironmentReport", { enumerable: true, get: function() {
|
|
25375
|
+
return environment_1.renderEnvironmentReport;
|
|
25376
|
+
} });
|
|
25377
|
+
Object.defineProperty(exports2, "renderVerificationLine", { enumerable: true, get: function() {
|
|
25378
|
+
return environment_1.renderVerificationLine;
|
|
25379
|
+
} });
|
|
25380
|
+
Object.defineProperty(exports2, "resolveEnvironment", { enumerable: true, get: function() {
|
|
25381
|
+
return environment_1.resolveEnvironment;
|
|
25382
|
+
} });
|
|
25383
|
+
Object.defineProperty(exports2, "verificationJson", { enumerable: true, get: function() {
|
|
25384
|
+
return environment_1.verificationJson;
|
|
25385
|
+
} });
|
|
23444
25386
|
var defaults_1 = require_defaults2();
|
|
23445
25387
|
Object.defineProperty(exports2, "SUBSTRATE_BRAND", { enumerable: true, get: function() {
|
|
23446
25388
|
return defaults_1.SUBSTRATE_BRAND;
|
|
@@ -23480,7 +25422,7 @@ var import_path = require("path");
|
|
|
23480
25422
|
var import_promises = require("fs/promises");
|
|
23481
25423
|
var import_yaml = __toESM(require_dist4());
|
|
23482
25424
|
var import_shuttle = __toESM(require_dist5());
|
|
23483
|
-
var buildVersion = true ? "0.
|
|
25425
|
+
var buildVersion = true ? "0.30.0" : pkg.version;
|
|
23484
25426
|
var sifterBrand = {
|
|
23485
25427
|
product: {
|
|
23486
25428
|
id: "sifter",
|
|
@@ -23488,7 +25430,12 @@ var sifterBrand = {
|
|
|
23488
25430
|
cliBinary: "whittle-sifter",
|
|
23489
25431
|
packageName: "@whittlelabs/sifter",
|
|
23490
25432
|
version: buildVersion,
|
|
23491
|
-
description: "Pairs with Whittle Sift to run AI code reviews on your hardware with your credentials."
|
|
25433
|
+
description: "Pairs with Whittle Sift to run AI code reviews on your hardware with your credentials.",
|
|
25434
|
+
// Production's own pairing page. The published binary defaults to the
|
|
25435
|
+
// production backend, so this is the surface the person holding that
|
|
25436
|
+
// binary actually has; a non-prod pairing arrives with its command
|
|
25437
|
+
// already built by the tier that printed it.
|
|
25438
|
+
webPairingUrl: "https://sift.whittlelabs.com/settings/sifters"
|
|
23492
25439
|
},
|
|
23493
25440
|
paths: {
|
|
23494
25441
|
configDir: "~/.sifter",
|
|
@@ -23523,6 +25470,40 @@ var sifterBrand = {
|
|
|
23523
25470
|
]
|
|
23524
25471
|
}
|
|
23525
25472
|
},
|
|
25473
|
+
// The environments Whittle Labs operates, keyed by the profile name that
|
|
25474
|
+
// selects one. `init --profile stage` resolves both URLs from here, so a
|
|
25475
|
+
// non-prod pairing is one flag instead of three and there is no host to
|
|
25476
|
+
// mistype. `--keep-url` / `--jobs-url` still win, which is what keeps a
|
|
25477
|
+
// backend Whittle Labs does not run reachable.
|
|
25478
|
+
//
|
|
25479
|
+
// `prod` is stated even though it duplicates the defaults below: a person
|
|
25480
|
+
// reading `--help` should see the whole set, and a profile literally named
|
|
25481
|
+
// `prod` should resolve rather than fall through to a default that only
|
|
25482
|
+
// happens to agree. The DEFAULT profile ("default") is deliberately not a
|
|
25483
|
+
// key — it is not an environment name, and it keeps its historic meaning
|
|
25484
|
+
// of "the brand's own defaults", which are production's.
|
|
25485
|
+
//
|
|
25486
|
+
// `studio` is the local dev fleet on this machine, reachable over Tailscale
|
|
25487
|
+
// at the `studio.whittlelabs.com` hostname rather than `localhost`, because
|
|
25488
|
+
// a pairing made from a phone or a second machine has to resolve too.
|
|
25489
|
+
environments: {
|
|
25490
|
+
prod: {
|
|
25491
|
+
keepApiUrl: "https://keep.whittlelabs.com",
|
|
25492
|
+
jobsApiUrl: "https://jobs.whittlelabs.com"
|
|
25493
|
+
},
|
|
25494
|
+
stage: {
|
|
25495
|
+
keepApiUrl: "https://keep.stage.whittlelabs.com",
|
|
25496
|
+
jobsApiUrl: "https://jobs.stage.whittlelabs.com"
|
|
25497
|
+
},
|
|
25498
|
+
test: {
|
|
25499
|
+
keepApiUrl: "https://keep.test.whittlelabs.com",
|
|
25500
|
+
jobsApiUrl: "https://jobs.test.whittlelabs.com"
|
|
25501
|
+
},
|
|
25502
|
+
studio: {
|
|
25503
|
+
keepApiUrl: "http://studio.whittlelabs.com:3007",
|
|
25504
|
+
jobsApiUrl: "http://studio.whittlelabs.com:3005"
|
|
25505
|
+
}
|
|
25506
|
+
},
|
|
23526
25507
|
keepRegistration: {
|
|
23527
25508
|
keepApiUrl: process.env.KEEP_API_URL ?? "https://keep.whittlelabs.com",
|
|
23528
25509
|
jobsApiUrl: process.env.JOBS_API_URL ?? "https://jobs.whittlelabs.com",
|
|
@@ -23642,7 +25623,16 @@ async function buildExecutorBlock(executor, ctx) {
|
|
|
23642
25623
|
console.error("Keep refused its credentials \u2014 it was decommissioned from the");
|
|
23643
25624
|
console.error("web app, or its secret was rotated by a newer pairing.");
|
|
23644
25625
|
console.error("");
|
|
23645
|
-
console.error(
|
|
25626
|
+
console.error("Two ways to pair again:");
|
|
25627
|
+
console.error("");
|
|
25628
|
+
console.error(
|
|
25629
|
+
` 1. Run \`${sifterBrand.product.cliBinary} init\` and scan the QR code it prints,`
|
|
25630
|
+
);
|
|
25631
|
+
console.error(" or open the link beside it.");
|
|
25632
|
+
console.error(
|
|
25633
|
+
` 2. Open ${sifterBrand.product.webPairingUrl ?? "the web app, under Settings, Sifters"},`
|
|
25634
|
+
);
|
|
25635
|
+
console.error(" press Pair a Sifter, and run the command it shows.");
|
|
23646
25636
|
console.error("");
|
|
23647
25637
|
process.exit(3);
|
|
23648
25638
|
}
|